U
    9_                     @   s   d dl Z d dlZd dlZd dlT G dd dZedkrG dd dZe e dZd d	l	m
Z
 e
d
d G dd dZd dlmZ d dlmZ e Zed
 eeeej e  dS )    N)*c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )DNSSDHostNamesResolverc                 C   s&   || _ t|| _i | _td|   d S )Nz+%s)_deviceslen_unresolved_device_uri_by_name
debugprint)selfdevices r   0/usr/share/system-config-printer/dnssdresolve.py__init__   s    
zDNSSDHostNamesResolver.__init__c                 C   s   t d|   d S )Nz-%s)r   r	   r   r   r   __del__    s    zDNSSDHostNamesResolver.__del__c                    sR  | _ t }|s&|g   ` ` d S  j D ]\}dsT  jd8  _q0tj	}|j
}|dd}t|dkr   q0|\}}}	}
tj|}|d|	 7 }z`|dd}t|d} j|||
f< td	|  |jd
d
|||
d
d j fddd	 W q0 tjk
rJ } ztdt|     W 5 d }~X Y q0X q0d S )Nzdnssd://   .      zorg.freedesktop.Avahi/zorg.freedesktop.Avahi.ServerzResolving address for %sr   c                    s     | S N)_error)er	   urir   r   <lambda>J   s    z0DNSSDHostNamesResolver.resolve.<locals>.<lambda>)reply_handlerZerror_handlerzFailed to resolve address: %s)_reply_handlerdbusZ	SystemBusr   items
startswithr   urllibparseZurlparseZnetlocrsplitr   	_resolvedZunquoteZ
get_objectZ	Interfacer   r   ZResolveService_replyZDBusExceptionrepr)r	   r   ZbusZdeviceresulthostnameelementsnamestypeprotocoldomainobjZserverr   r   r   r   resolve#   sN    
   
zDNSSDHostNamesResolver.resolvec                 C   s8   |  j d8  _ | j dkr4td | | j | `| `d S )Nr   r   zAll addresses resolved)r   r   r   r   r   r   r   r   r$   P   s    
z DNSSDHostNamesResolver._resolvedc                 C   sh   | j |||f }|| j| _|}|d}|dkr>|d | }td|||f  || j| _|   d S )Nr   r   z%s is at %s (%s))r   r   addressfindr   r(   r$   )r	   Z	interfacer,   r*   r+   r-   ZhostZ	aprotocolr0   ZportZtxtflagsr   r(   pr   r   r   r%   X   s    
zDNSSDHostNamesResolver._replyc                 C   s    t d|t|f  |   d S )NzError resolving %s: %s)r   r&   r$   )r	   r   errorr   r   r   r   d   s    zDNSSDHostNamesResolver._errorN)	__name__
__module____qualname__r   r   r/   r$   r%   r   r   r   r   r   r      s   -r   __main__c                   @   s   e Zd Zdd ZdS )Devicec                 C   s    zd| j  W S    Y dS X d S )Nz<Device @ %s>z<Device>)r0   r   r   r   r   __repr__j   s    zDevice.__repr__N)r5   r6   r7   r:   r   r   r   r   r9   i   s   r9   )z*dnssd://dlk-08E206-P1._printer._tcp.local/z dnssd://foo._printer._tcp.local/)DBusGMainLoopT)Zset_as_defaultc                   @   s$   e Zd Zdd Zdd Zdd ZdS )Testc                 C   s   || _ || _d S r   )_loopr   )r	   loopr
   r   r   r   r   v   s    zTest.__init__c                 C   s   t | j}|j| jd dS )N)r   F)r   r   r/   reply)r	   rr   r   r   runz   s    
zTest.runc                 G   s   t | | j  d S r   )printr=   quit)r	   argsr   r   r   r?      s    z
Test.replyN)r5   r6   r7   r   rA   r?   r   r   r   r   r<   u   s   r<   )GObject)GLib)r   reZurllib.parser!   debugr   r5   r9   r
   Z	dbus.glibr;   r<   Zgi.repositoryrE   rF   ZMainLoopr>   Zset_debuggingZidle_addrA   r   r   r   r   <module>   s"   O
