3
NZY                 @   s   d dl Z d dlZd dlZddlT ddlmZmZ dZdZ	dZ
de
 Zd	d
 Zdd Zdd Zdd Zd*ddZd+ddZdd Zdd Zd,ddZd-ddZd.ddZd/d d!Zd"d# Zd$d% Zd&d' Zd(d) ZdS )0    N   )*)deviceutilsd      z=http://www.hp.com/schemas/imaging/cnc/dcsl/2006/05/WifiConfigz?<?xml version="1.0" encoding="utf-8"?>
<WiFiConfig xmlns="%s">
c             C   s  |st jd di fS t jd t j| | j|}t jd|  tj }t jd | jtj	|dd}d}x.|d	7 }| jtj	|d	d}| s|t
krlP qlW |j }tj|jd
}|jtdtdjdd}t j| t jdt|  |st jd di fS ytj j|}W nt tjjjk
r } zPt jd|  tjdt|tj}|d k	rvt j|t|jdd   di fS d }~X nX d}	x,|D ]$}
|
j jdr||
 j }	P qW |	|d< |	|fS )NzInvalid requestZexecutionfailedz)Sending request on wifi config channel...zWrote %d bytes.z*Reading response on wifi config channel...   )streamZtimeoutr   r   zutf-8ZDevicecapabilitiesZDeviceCapabilities  zRead %d bytes.zNo datazXML parser failed: %szline\s*(\d+).*?column\s*(\d+)   errorreturn) logerrordebuglog_dataZwriteWifiConfigioBytesIOZreadWifiConfigr   Z
MAX_BUFFERMAX_RETRIESgetvaluer   Zunescapedecodereplace
to_unicodelenXMLToDictParserparseXMLxmlparsersexpat
ExpatErrorresearchstrIintgrouplowerendswith)devrequestZbytes_writtendataZ	bytesreadiparamsematchr   p r0   /usr/share/hplip/base/wifi.py_readWriteWifiConfig&   sN    








r2   c             C   s   i }t d }t| |\}}|s"i S ||d< |dkrDtjd|  |S dddg}xL|D ]D}y|| ||jdd < W qT tk
r   tjd
|  wTY qTX qTW |S )NzL<GetDeviceCapabilitiesRequest>
</GetDeviceCapabilitiesRequest>
</WiFiConfig>r   okz+GetDeviceCapabilities returned an error: %sz\wificonfig-getdevicecapabilitiesresponse-devicecapabilities-numberofsupportedwifiaccessorieszLwificonfig-getdevicecapabilitiesresponse-interfaceversion-minorreleasenumberzLwificonfig-getdevicecapabilitiesresponse-interfaceversion-majorreleasenumber-r   zMissing response key: %s)PREAMBLEr2   r   r   splitKeyErrorr   )r(   retr)   r   r,   
param_keysr/   r0   r0   r1   getDeviceCapabilitiesh   s(    
r;   c             C   s  i }t d }t| |\}}|s&ddiS ||d< |dkrHtjd|  |S yt|d }W n ttfk
rt   d}Y nX ||d< |dkrtjd n0|d	kry@|d
 |d< |d |d< |d |d< |d |d< |d |d< W n2 tk
r } ztjd|  W Y d d }~X nX nxt|D ]}yh|d|  |d| < |d|  |d| < |d|  |d| < |d|  |d| < |d|  |d| < W n2 tk
r } ztjd|  W Y d d }~X nX qW |S )Nz><GetAdaptorListRequest>
</GetAdaptorListRequest>
</WiFiConfig>adaptorlistlengthr   r   r3   z$GetAdaptorList returned an error: %sz3wificonfig-getadaptorlistresponse-adaptorlistlengthz"GetAdaptorList returned 0 adaptorsr   zCwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptoridzadaptorid-0zEwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptornamezadaptorname-0zIwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorpresencezadaptorpresence-0zFwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorstatezadaptorstate-0zEwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptortypezadaptortype-0zMissing response key: %szFwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorid-%dzadaptorid-%dzHwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorname-%dzadaptorname-%dzLwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorpresence-%dzadaptorpresence-%dzIwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptorstate-%dzadaptorstate-%dzHwificonfig-getadaptorlistresponse-adaptorlist-adaptorinfo-adaptortype-%dzadaptortype-%d)	r6   r2   r   r   r$   
ValueErrorr8   r   range)r(   r9   r)   r   r,   Zadaptor_list_lengthr-   ar0   r0   r1   getAdaptorList   sH    

"&r@   c       
      C   s   g }t | }y|d }W n tk
r0   d}Y nX xt|D ]}y|d|  }W n tk
rh   d}Y nX |j dkr<ddd	d
g}g }xZ|D ]R}y|dj|dt|g }	W n& tk
r   |dkrd}	nd}	Y nX |j|	 qW |j| q<W |S )Nr<   r   zadaptortype-%dr   wifiembeddedwifiaccessoryZ	adaptoridZadaptornameZadaptorstateZadaptorpresencer4   r   Unknown)rA   rB   r5   )r@   r8   r>   r&   joinr"   append)
r(   ZrValr9   Znum_adaptorsnnamer,   rr/   xr0   r0   r1   getWifiAdaptorID   s0    



rJ   PowerOnc       	      C   s   d
}d}xx|D ]p}|d }|d }t d||f  }t| |\}}|sHdS |dkr`tjd|  qtjd |||d |d	 fS qW dS )Nr   r   r   zv<SetAdaptorPowerRequest>
<AdaptorID>%s</AdaptorID>
<PowerState>%s</PowerState>
</SetAdaptorPowerRequest>
</WiFiConfig>r3   z%SetAdaptorPower returned an error: %sz!SetAdaptorPower returned Success.r      r5   r5   )r5   r   r   r   r5   )r5   r   r   r   )r6   r2   r   r   r   )	r(   ZadapterListZpower_state
adaptor_idZadaptorNamer?   r)   r   r,   r0   r0   r1   setAdaptorPower   s    

rN   c          &   C   s  i dd  }}}x|d kr2t d|  }d}d}nt d||f  }d}d}t| |\}	}
|
sdd	diS |	|d
< |	dkrtjd||	f  |S yt|
d|  }W n ttfk
r   d}Y nX ||d	< |dkr|j dkrtjd|  ntjd|  n|dkry|
d|  }|s&t	d|d< n||d< |
d|  |d< |
d|  |d< |
d|  |d< |
d|  |d< |
d|  |d< |
d|  |d < |
d!|  |d"< W n2 tk
r } ztjd#|  W Y d d }~X nX n4x0t
|D ]"}|| }y|
d$||f  }|st	d|d%| < n||d%| < |
d&||f  |d'| < |
d(||f  |d)| < |
d*||f  |d+| < |
d,||f  |d-| < |
d.||f  |d/| < |
d0||f  |d1| < |
d2||f  |d3| < W n2 tk
r } ztjd#|  W Y d d }~X nX qW y8|
d4|   }|d5< |
d6|  |d7< |
d8|  |d9< W n2 tk
rv } ztjd#|  W Y d d }~X nX |j dkrP d:}||7 }|tkrP tjd; qW |S )<Nr   ZNewScanzX<UndirectedScanRequest>
<ScanState>%s</ScanState>
</UndirectedScanRequest>
</WiFiConfig>ZUndirectedScanZundirectedscanresponsezd<DirectedScanRequest>
<SSID>%s</SSID>
<ScanState>%s</ScanState>
</DirectedScanRequest>
</WiFiConfig>ZDirectedZdirectedscanresponseZnumberofscanentriesr   r3   z%s returned an error: %sz!wificonfig-%s-numberofscanentriesZscancompletez%%s returned 0 entries. Scan complete.z'%s returned 0 entries. Resuming scan...r   z%wificonfig-%s-scanlist-scanentry-ssidz	(unknown)zssid-0z&wificonfig-%s-scanlist-scanentry-bssidzbssid-0z(wificonfig-%s-scanlist-scanentry-channelz	channel-0z2wificonfig-%s-scanlist-scanentry-communicationmodezcommunicationmode-0z$wificonfig-%s-scanlist-scanentry-dbmzdbm-0z/wificonfig-%s-scanlist-scanentry-encryptiontypezencryptiontype-0z%wificonfig-%s-scanlist-scanentry-rankzrank-0z/wificonfig-%s-scanlist-scanentry-signalstrengthzsignalstrength-0zMissing response key: %sz(wificonfig-%s-scanlist-scanentry-ssid-%dzssid-%dz)wificonfig-%s-scanlist-scanentry-bssid-%dzbssid-%dz+wificonfig-%s-scanlist-scanentry-channel-%dz
channel-%dz5wificonfig-%s-scanlist-scanentry-communicationmode-%dzcommunicationmode-%dz'wificonfig-%s-scanlist-scanentry-dbm-%dzdbm-%dz2wificonfig-%s-scanlist-scanentry-encryptiontype-%dzencryptiontype-%dz(wificonfig-%s-scanlist-scanentry-rank-%dzrank-%dz2wificonfig-%s-scanlist-scanentry-signalstrength-%dzsignalstrength-%dzwificonfig-%s-scanstateZ	scanstatez,wificonfig-%s-scansettings-signalstrengthmaxsignalstrengthmaxz,wificonfig-%s-scansettings-signalstrengthminsignalstrengthminZ
ResumeScanr   )r6   r2   r   r   r$   r=   r8   r&   r   r   r>   MAX_NETWORKStimeZsleep)r(   adapterNamessidr9   r+   Z
scan_stater)   typZrspr   r,   Znumber_of_scan_entriesr-   r?   jr0   r0   r1   performScan   s    


$& 
rW   c       
      C   sV   i }t d|||d|f  }t| |\}}	|	s0i S ||d< |dkrRtjd|  |S |S )Nz<AssociateRequest>
<SSID>%s</SSID>
<CommunicationMode>%s</CommunicationMode>
<EncryptionType>%s</EncryptionType>
<EncryptedParameters>%s</EncryptedParameters>
<Key>%s</Key>
</AssociateRequest>
</WiFiConfig>Falser   r3   zAssociate returned an error: %s)r6   r2   r   r   )
r(   rS   rT   Zcommunication_modeZencryption_typekeyr9   r)   r   r,   r0   r0   r1   	associatec  s    
rZ   c       	      C   s   g }t d }t| |\}}|s"g S |dkr<tjd|  |S y|d }|d }W nh tk
r   d}xNy|d|  }W n tk
r   P Y nX |d|  }|j||f |d	7 }qfW Y nX |j||f |S )
Nz8<GetVSACodesRequest>
</GetVSACodesRequest>
</WiFiConfig>r3   z!GetVSACodes returned an error: %sz=wificonfig-getvsacodesresponse-vsacodelist-vsacode-rulenumberz;wificonfig-getvsacodesresponse-vsacodelist-vsacode-severityr   z@wificonfig-getvsacodesresponse-vsacodelist-vsacode-rulenumber-%dz>wificonfig-getvsacodesresponse-vsacodelist-vsacode-severity-%dr   )r6   r2   r   r   r8   rE   )	r(   rS   r9   r)   r   r,   ZruleZseverityrF   r0   r0   r1   getVSACodes  s0    r[   c             C   s   i }t d|  }t| |\}}|s&i S ||d< |dkrHtjd|  |S ddddd	d
dg}xL|D ]D}y|| ||jdd < W q` tk
r   tjd|  w`Y q`X q`W |S )Nz`<GetIPConfigurationRequest>
<AdaptorID>%d</AdaptorID>
</GetIPConfigurationRequest>
</WiFiConfig>r   r3   z(GetIPConfiguration returned an error: %szAwificonfig-getipconfigurationresponse-ipconfiguration-addressmodezIwificonfig-getipconfigurationresponse-ipconfiguration-alternatednsaddresszDwificonfig-getipconfigurationresponse-ipconfiguration-gatewayaddressz?wificonfig-getipconfigurationresponse-ipconfiguration-ipaddresszGwificonfig-getipconfigurationresponse-ipconfiguration-primarydnsaddressz@wificonfig-getipconfigurationresponse-ipconfiguration-subnetmaskzCwificonfig-getipconfigurationresponse-networkconfiguration-hostnamer4   r   zMissing response key: %sr5   )r6   r2   r   r   r7   r8   r   )r(   rM   r9   r)   r   r,   r:   r/   r0   r0   r1   __getIPConfiguration  s0    

r\   c             C   s   d\}}}}}}}	t | |}
|
r|
d j dkry<|
d }|
d }|
d }|
d }|
d	 }|
d
 }|
d }	W n4 tk
r } ztjdt|  W Y d d }~X nX |||||||	fS )N0.0.0.0rC   r   r3   Z	ipaddresshostnameaddressmode
subnetmaskZgatewayaddressZprimarydnsaddressZalternatednsaddresszMissing response key: %s)r]   rC   rC   r]   r]   r]   r]   )r\   r&   r8   r   r   r"   )r(   rS   rM   Zipr^   r_   r`   ZgatewayZpridnsZsec_dnsr9   r-   r0   r0   r1   getIPConfiguration  s    
$ra   c             C   s   i }t d|  }t| |\}}|s&i S ||d< |dkrHtjd|  |S ddddg}xL|D ]D}y|| ||jd	d < W qZ tk
r   tjd|  wZY qZX qZW |S )Nz^<GetSignalStrengthRequest>
<AdaptorID>%d</AdaptorID>
</GetSignalStrengthRequest>
</WiFiConfig>r   r3   z'GetSignalStrength returned an error: %sz7wificonfig-getsignalstrengthresponse-signalstrength-dbmzEwificonfig-getsignalstrengthresponse-signalstrength-signalstrengthmaxzEwificonfig-getsignalstrengthresponse-signalstrength-signalstrengthminzGwificonfig-getsignalstrengthresponse-signalstrength-signalstrengthvaluer4   r   zMissing response key: %sr5   )r6   r2   r   r   r7   r8   r   )r(   rM   r9   r)   r   r,   r:   r/   r0   r0   r1   __getSignalStrength  s*    

rb   c       
      C   s   d\}}}}t | |}|r|d j dkry$|d }|d }|d }|d	 }W n4 tk
r }	 ztjd
t|	  W Y d d }	~	X nX ||||fS )N   r      r   r3   rO   rP   ZsignalstrengthvalueZdbmzMissing response key: %s8)rc   r   r   re   )rb   r&   r8   r   r   r"   )
r(   rS   rT   rM   Zss_maxZss_minZss_valZss_dbmr9   r-   r0   r0   r1   getSignalStrength  s    
$rf   c             C   s   i }t d }t| |\}}|s"i S ||d< |dkrDtjd|  |S dddg}xL|D ]D}y|| ||jdd < W qT tk
r   tjd
|  wTY qTX qTW |S )Nz><GetCryptoSuiteRequest>
</GetCryptoSuiteRequest>
</WiFiConfig>r   r3   z'GetSignalStrength returned an error: %sz;wificonfig-getcryptosuiteresponse-cryposuite-crypoalgorithmz6wificonfig-getcryptosuiteresponse-cryposuite-crypomodez5wificonfig-getcryptosuiteresponse-cryposuite-secretidr4   r   zMissing response key: %sr5   )r6   r2   r   r   r7   r8   r   )r(   r9   r)   r   r,   r:   r/   r0   r0   r1   __getCryptoSuite  s(    
rg   c             C   s   d\}}}t | }|rx|d j dkrxy|d }|d }|d }W n4 tk
rv } ztjdt|  W Y d d }~X nX |||fS )	Nr   r   r3   ZcrypoalgorithmZ	crypomodesecretidzMissing response key: %s)r   r   r   )rg   r&   r8   r   r   r"   )r(   rS   Zalgmoderh   r9   r-   r0   r0   r1   getCryptoSuite,  s    
$rj   c             C   s^   d}t d }t| |\}}|s"|S |dkr.|S y|d }W n tk
rX   tjd Y nX |S )Nr   z8<GetHostnameRequest>
</GetHostnameRequest>
</WiFiConfig>r3   z'wificonfig-gethostnameresponse-hostnamezMissing response key: hostname)r6   r2   r8   r   r   )r(   r9   r)   r   r,   r0   r0   r1   getHostname<  s    rk   c             C   s  t jd|   d| |f }ddlm} dd l}i }t|}t j| yH|jd}|jdd |j	d	d
 |j	dt
| |j  |j| W n& |j|jfk
r   t jd i S X |j }|jdkrt jd i S |j }	t j|	 ytj j|	}
W n |	jjjk
r   i S X d|
kr.t jd i S |
jdd|d< |
jdd|d< |
jdd}|
jdd}|
jdd}|
jdd}d||||f }|j |d< |S )Nz Getting location for wifi AP: %saS  <?xml version='1.0'?>
<LocationRQ xmlns='http://skyhookwireless.com/wps/2005' version='2.6' street-address-lookup='full'>
<authentication version='2.0'>
<simple>
<username>beta</username>
<realm>js.loki.com</realm>
</simple>
</authentication>
<access-point>
<mac>%s</mac>
<signal-strength>%d</signal-strength>
</access-point>
</LocationRQ>r   )http_clientr   zapi.skyhookwireless.comZPOSTz/wps2/locationzContent-typeztext/xmlzContent-LengthzHost connection errorrd   z$Connection to location server failedzlocationrs-errorz Location server returned failurezlocationrs-location-latitudeZlatitudezlocationrs-location-longitudeZ	longitudez0locationrs-location-street-address-street-numberr   z/locationrs-location-street-address-address-linez'locationrs-location-street-address-cityz/locationrs-location-street-address-country-codez%s %s, %s, %saddress)r   r   Zsixext.movesrl   socketr   r   ZHTTPSConnectionZ
putrequestZ	putheaderr"   Z
endheaderssendZgaierrorr   ZgetresponseZstatusreadr   r   r   r   r   r   getstrip)ZbssidZssr)   rl   rn   r9   Zrequest_lenZconnZresponser   r,   Zstreet_numberZstreet_nameZcityZcountryrm   r0   r0   r1   getLocationT  sN    







rs   )rK   )N)r   )r   )r   )r   )rR   r   Zxml.parsers.expatr   gr   r   r   rQ   r   ZNSr6   r2   r;   r@   rJ   rN   rW   rZ   r[   r\   ra   rb   rf   rg   rj   rk   rs   r0   r0   r0   r1   <module>   s0   B 1'

h$
#

 
