3
Z              
   @   sz   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 ddl
T yd dlZW n   Y nX G dd deZdS )    )GtkN)TimedSubprocessTimedOperation   )*c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CheckNetworkServerSanityc             C   s"   t j| |d |jtj |  d S )NzCheck network server sanity)Question__init__Znew_pager   ZLabel)selftroubleshooter r   I/usr/share/system-config-printer/troubleshoot/CheckNetworkServerSanity.pyr	   '   s    z!CheckNetworkServerSanity.__init__c          N   C   s>  i | _ | jj }d|kr"d|kr"dS | jj }|d }|jdd}d}|ry"tj||}dd |D }d}W n tjk
r   d}Y nX || j d	< |jdd
}|r|ry|j| W q tk
r   |}d}Y qX n|r|}d}nR|d }ytj||}dd |D }W n tjk
r"   d}Y nX || j d	< d}|| j d< |rh|jddd&krh|jddkrlt	j
}	nt	j}	y,tt	j|||	d|d| _| jj }
d}W n tk
r   d}Y nX || j d< |rhy"t|
j|d| _| jj  d}W n   d}Y nX || j d< |rh|jdi }|jdd }|rhy.t|
jd|i|d| _| jj }|| j d< W n   Y nX |rd }yftj }| j d }t|jd| f|d| _| jj }t|j|d| _| jj }d| j d< || j d< W nP tk
r   Y n< tk
r( } z|j\}}||f| j d< W Y d d }~X nX |d k	rd|kr|d jdd
}tj|}|j \}}}}}d}y4t|jd||f tjdf|d| _| jj }d}W n6 tk
r } z|j\}}||f}W Y d d }~X nX || j d < |r:d!|kr:y8t|dd"d#d$|gt j!t j"t j"d%| _| jj | j d!< W n   Y nX dS )'NZremote_server_nameZremote_server_ip_addressFZremote_server_portiw  c             S   s   g | ]}|d  d qS )   r   r   ).0Z(family_socktype_proto_canonname_sockaddrr   r   r   
<listcomp>=   s   z4CheckNetworkServerSanity.display.<locals>.<listcomp>TZremote_server_name_resolves c             S   s   g | ]}|d  d qS )r   r   r   )r   Z)family_socktype_proto_canonname_sockaddr1r   r   r   r   W   s   Zremote_server_try_connectZcups_device_uri_schemeipphttphttps)hostZport
encryption)kwargsparentZremote_server_connect_ipp)r   Zremote_server_cupscups_printer_dictz
device-uriuriZremote_cups_queue_attributesz	smb://%s/)argsr   Zremote_server_smbZremote_server_smb_shareszsmb://%s/%si  Z#remote_server_smb_share_anon_accessZremote_server_tracerouteZ
traceroutez-w1)r   Z	close_fdsr   stdinstdoutstderr)r   r   r   )#answersr   Z
get_windowgetsocketZgetaddrinfoZgaierrorindex
ValueErrorcupsZHTTP_ENCRYPT_REQUIREDZHTTP_ENCRYPT_IF_REQUESTEDr   Z
ConnectionopZrunRuntimeErrorZgetPrintersZgetPrinterAttributessmbcZContextZopendirZgetdents	NameErrorr   smburiZSMBURIZseparateopenosO_RDWRr   
subprocessZDEVNULLPIPE)r
   r    r   Zserver_nameZserver_portZtry_connectZaiZresolvesZipaddrr   cZipp_connectZcups_serverr   r   attrcontextnamedirZsharesesugroupr   ZshareuserZpasswordZ
accessiblefr   r   r   display+   s    






 














 





z CheckNetworkServerSanity.displayc             C   s   | j S )N)r    )r
   r   r   r   collect_answer   s    z'CheckNetworkServerSanity.collect_answerc             C   s   | j j  d S )N)r&   Zcancel)r
   r   r   r   cancel_operation   s    z)CheckNetworkServerSanity.cancel_operationN)__name__
__module____qualname__r	   r;   r<   r=   r   r   r   r   r   &   s
    r   )Zgi.repositoryr   r%   r,   r*   r"   r.   Ztimedopsr   r   baser(   r   r   r   r   r   r   <module>   s   