U
    9_                     @   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 z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 | |d |t |  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              
   C   s>  i | _ | jj }d|kr"d|kr"dS | j }|d }|dd}d}|rz"t||}dd |D }d}W n tjk
r   d}Y nX || j d	< |dd
}|r|rz|| W q tk
r   |}d}Y qX n|r|}d}nR|d }zt||}dd |D }W n tjk
r"   d}Y nX || j d	< d}|| j d< |rh|dddkrh|ddkrlt	j
}	nt	j}	z,tt	j|||	d|d| _| j }
d}W n tk
r   d}Y nX || j d< |rhz"t|
j|d| _| j  d}W n   d}Y nX || j d< |rh|di }|dd }|rhz.t|
jd|i|d| _| j }|| j d< W n   Y nX |rd }zft }| j d }t|jd| f|d| _| j }t|j|d| _| j }d| j d< || j d< W nP tk
r   Y n< tk
r( } z|j\}}||f| j d< W 5 d }~X Y nX |d k	rd|kr|d dd
}t|}| \}}}}}d}z4t|jd||f tjdf|d| _| j }d}W n6 tk
r } z|j\}}||f}W 5 d }~X Y nX || j d < |r:d!|kr:z8t|dd"d#d$|gt j!t j"t j"d%| _| 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   Z)family_socktype_proto_canonname_sockaddr1r   r   r   r   W   s   Zremote_server_try_connectZcups_device_uri_schemeipp)r   Zhttphttpsr   )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)#answersr   Z
get_windowgetsocketZgetaddrinfoZgaierrorindex
ValueErrorcupsZHTTP_ENCRYPT_REQUIREDZHTTP_ENCRYPT_IF_REQUESTEDr   Z
Connectionop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   d S r=   )r&   Zcancelr>   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   