
    =	fY                         d dl Z d dlZd dlZddl ddlmZmZ dZdZ	dZ
de
z  Zd	 Zd
 Zd Zd ZddZddZd Zd ZddZddZddZddZd Zd Zd Zd Zy)    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           	         |st         j                  d       di fS t         j                  d       t         j                  |       | j	                  |      }t         j                  d|z         t        j                         }t         j                  d       | j                  t        j                  |d      }d}	 |d	z  }| j                  t        j                  |d	      }|r	|t        kD  rn4|j                         }t        j                  |j                  d
            }|j                  t!        d      t!        d            j                  dd      }t         j                  |       t         j                  dt#        |      z         |st         j                  d       di fS 	 t        j$                         j'                  |      }d}	|D ]6  }
|
j=                         j?                  d      s#||
   j=                         }	 n |	|d<   |	|fS # t(        j*                  j,                  j.                  $ r}t         j                  d|z         t0        j3                  dt5        |      t0        j6                        }|0t         j                  |t9        |j;                  d            d         di fcY d }~S d }~ww xY w)NzInvalid requestexecutionfailedz)Sending request on wifi config channel...zWrote %d bytes.z*Reading response on wifi config channel...   )streamtimeoutr   r   zutf-8DevicecapabilitiesDeviceCapabilities  zRead %d bytes.zNo datazXML parser failed: %szline\s*(\d+).*?column\s*(\d+)   errorreturn) logerrordebuglog_datawriteWifiConfigioBytesIOreadWifiConfigr   
MAX_BUFFERMAX_RETRIESgetvaluer   unescapedecodereplace
to_unicodelenXMLToDictParserparseXMLxmlparsersexpat
ExpatErrorresearchstrIintgrouplowerendswith)devrequestbytes_writtendata	bytesreadiparamsematchr   ps              /usr/share/hplip/base/wifi.py_readWriteWifiConfigr=   &   sP   		#$ "$$II9:LL ''0MII-/0::<DII:;""6#4#4T2"NI	A
	Q&&v'8'8q&Q	AO	  ==?D >>$++g./D
 <<
#78*EY:Z[ccdjlnoDLLIIT*+		) "$$%&&(11$7 $K 779m, )//+K
 (F=# ;;'' %		)A-.		>AMIId3u{{1~./01 "$$%s   +#H 'K;A;J<6K<Kc                 $   i }t         dz   }t        | |      \  }}|si S ||d<   |dk7  rt        j                  d|z         |S g d}|D ]  }	 ||   ||j	                  d      d   <    |S # t
        $ r t        j                  d|z         Y Ew xY w)	NzL<GetDeviceCapabilitiesRequest>
</GetDeviceCapabilitiesRequest>
</WiFiConfig>r   okz+GetDeviceCapabilities returned an error: %s)z\wificonfig-getdevicecapabilitiesresponse-devicecapabilities-numberofsupportedwifiaccessorieszLwificonfig-getdevicecapabilitiesresponse-interfaceversion-minorreleasenumberzLwificonfig-getdevicecapabilitiesresponse-interfaceversion-majorreleasenumber-Missing response key: %sPREAMBLEr=   r   r   splitKeyErrorr   r2   retr3   r   r8   
param_keysr;   s          r<   getDeviceCapabilitiesrJ   h   s    
C  G /sG<K	$Cd		?+MN
J
  	$*1ICR ! J	  	II0145	   A++!BBc                    i }t         dz   }t        | |      \  }}|sddiS ||d<   |dk7  rt        j                  d|z         |S 	 t	        |d         }||d<   |dk(  rt        j                  d       |S |d	k(  r+	 |d
   |d<   |d   |d<   |d   |d<   |d   |d<   |d   |d<   |S t        |      D ]I  }	 |d|z     |d|z  <   |d|z     |d|z  <   |d|z     |d|z  <   |d|z     |d|z  <   |d|z     |d|z  <   K |S # t
        t        f$ r d}Y w xY w# t        $ r#}t        j                  d|z         Y d }~|S d }~ww xY w# t        $ r"}t        j                  d|z         Y d }~d }~ww xY w)Nz><GetAdaptorListRequest>
</GetAdaptorListRequest>
</WiFiConfig>adaptorlistlengthr   r   r?   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-0rB   zFwificonfig-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-%dadaptortype-%d)	rD   r=   r   r   r.   
ValueErrorrF   r   range)r2   rH   r3   r   r8   adaptor_list_lengthr9   as           r<   getAdaptorListrS      sO   
C  G /sG<K#Q''$Cd		8;FG
 !&)^"_`  3Ca		67, J) 
	!	6!'(m!nC#)*q#rC '-.y'zC#$$*+s$tC !#)*q#rC  J *+ 	:A:*01y|}1}*~NQ&',23}  AB  4B  -C$q()06  8F  IJ  8J  1K(1,--34  CD  5D  .E%)*,23}  AB  4B  -C$q()	: J9 !     	6II01455 J	6  :		4q899:sC   C> ;(D 4AE>DD	ED<<E	E/E**E/c           
         g }t        |       }	 |d   }t        |      D ]n  }	 |d|z     }|j                         dv sg d}g }|D ]4  }	 |dj	                  |dt        |      g         }	|j                  |	       6 |j                  |       p |S # t        $ r d}Y w xY w# t        $ r d}Y w xY w# t        $ r |dk(  rd	}	nd
}	Y _w xY w)NrM   r   rN   r   )wifiembeddedwifiaccessory)	adaptoridadaptornameadaptorstateadaptorpresencer@   rW   rA   Unknown)rS   rF   rP   r0   joinr,   append)
r2   rValrH   num_adaptorsnnamer8   rr;   xs
             r<   getWifiAdaptorIDrd      s
    D

C./ <  	'!+,D ::<<<TFA 	&BGGQSV$456A 	 KKN+. K5    	D	   &K'%	&s4   B B#
 B4B B #B10B14C
	C
c                     d}d}|D ]o  }|d   }|d   }t         d|d|dz   }t        | |      \  }}|s y|d	k7  rt        j                  d
|z         Nt        j	                  d       |||d   |d   fc S  y)NrA   r   r   r   z$<SetAdaptorPowerRequest>
<AdaptorID>z</AdaptorID>
<PowerState>z5</PowerState>
</SetAdaptorPowerRequest>
</WiFiConfig>)rA   r   r   r   r?   z%SetAdaptorPower returned an error: %sz!SetAdaptorPower returned Success.r      )rD   r=   r   r   r   )	r2   adapterListpower_state
adaptor_idadaptorNamerR   r3   r   r8   s	            r<   setAdaptorPowerrk      s    JK 7qT
d 	- - 33@V$II=KLII9:{AaD!A$66#7&     c                    i dd}}}	 |t         d|z  z   }d}d}nt         d|d|dz   }d	}d
}t        | |      \  }	}
|
sddiS |	|d<   |	dk7  rt        j                  |d|	       |S 	 t	        |
d|z           }||d<   |dk(  rG|j                         dk(  rt        j                  d|z         n8t        j                  d|z         n|dk(  rm	 |
d|z     }|st        d      |d<   n||d<   |
d|z     |d<   |
d|z     |d<   |
d|z     |d<   |
d|z     |d<   |
d|z     |d <   |
d!|z     |d"<   |
d#|z     |d$<   nt        |      D ]  }||z   }	 |
d&||fz     }|st        d      |d'|z  <   n||d'|z  <   |
d(||fz     |d)|z  <   |
d*||fz     |d+|z  <   |
d,||fz     |d-|z  <   |
d.||fz     |d/|z  <   |
d0||fz     |d1|z  <   |
d2||fz     |d3|z  <   |
d4||fz     |d5|z  <    	 |
d6|z     x}|d7<   |
d8|z     |d9<   |
d:|z     |d;<   |j                         dk(  r	 |S d<}||z  }|t        kD  r	 |S t        j                  d=       G# t
        t        f$ r d}Y w xY w# t        $ r"}t        j                  d%|z         Y d }~d }~ww xY w# t        $ r#}t        j                  d%|z         Y d }~rd }~ww xY w# t        $ r"}t        j                  d%|z         Y d }~d }~ww xY w)>Nr   NewScanzX<UndirectedScanRequest>
<ScanState>%s</ScanState>
</UndirectedScanRequest>
</WiFiConfig>UndirectedScanundirectedscanresponsez<DirectedScanRequest>
<SSID>z</SSID>
<ScanState>z1</ScanState>
</DirectedScanRequest>
</WiFiConfig>Directeddirectedscanresponsenumberofscanentriesr   r?   z returned an error: z!wificonfig-%s-numberofscanentries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-0rB   z(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-scanstate	scanstatez,wificonfig-%s-scansettings-signalstrengthmaxsignalstrengthmaxz,wificonfig-%s-scansettings-signalstrengthminsignalstrengthmin
ResumeScanr   )rD   r=   r   r   r.   rO   rF   r0   r   r"   rP   MAX_NETWORKStimesleep)r2   adapterNamessidrH   r7   
scan_stater3   typrspr   r8   number_of_scan_entriesr9   rR   js                  r<   performScanr      sU   Q	JC
< " " G
 #C*C  *	"& &G C(C23@V)1--(M$IICEFJ	'%(0SVY0Y)Z%[" &<!"!Q&!^3		ACGH		CcIJ#q(:EKL$.{$;CM$(CM!'(PSV(V!WI#)*TWZ*Z#[K -34hkn4n-o)*%&Ls&RSG*01beh1h*i&' &'NQT'T UH*01beh1h*i&'
 12 >aC>!"LPSUVx"WXD-7-DIM*-1IM**01\`cef_g1g*hC
Q',23`dgijck3k,lCq()6<=tx{}~w=  7AC.23(./X\_ab[c/c(dC1%39:nruwxqy:y3zC+a/0)/0Z^acd]e0e)fC	A&39:nruwxqy:y3zC+a/0>$	6,23Ls3R,SSJ[)'-.\_b.b'cC#$'-.\_b.b'cC#$ / J "
	##| J 	

1} > H% 	'%&"	'2  :		4q899:&   >II81<==>  	6II01455	6s\   +I A+I' BJ,#K I$#I$'	J0JJ	KJ<<K	K/K**K/c                     i }t         d|d|d|ddd|dz   }t        | |      \  }}	|	si S ||d<   |d	k7  rt        j                  d
|z         |S |S )Nz<AssociateRequest>
<SSID>z</SSID>
<CommunicationMode>z%</CommunicationMode>
<EncryptionType>z'</EncryptionType>
<EncryptedParameters>Falsez</EncryptedParameters>
<Key>z(</Key>
</AssociateRequest>
</WiFiConfig>r   r?   zAssociate returned an error: %s)rD   r=   r   r   )
r2   r|   r}   communication_modeencryption_typekeyrH   r3   r   r8   s
             r<   	associater   c  so    
C ,#W	 	G /sG<K	$Cd		3kAB
Jrl   c                 T   g }t         dz   }t        | |      \  }}|sg S |dk7  rt        j                  d|z         |S 	 |d   }|d   }|j	                  ||f       |S # t
        $ r@ d}	 	 |d|z     }n# t
        $ r Y Y |S w xY w|d|z     }|j	                  ||f       |d	z  }<w xY w)
Nz8<GetVSACodesRequest>
</GetVSACodesRequest>
</WiFiConfig>r?   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   )rD   r=   r   r   r]   rF   )	r2   r|   rH   r3   r   r8   ruleseverityr`   s	            r<   getVSACodesr     s    
C  G /sG<K	d		5CD
%UVWX 	

D(#$J  `cdde  J ^abbcHJJh'(FA s/   
A B'+A43B'4	B=B'B%B'c                 *   i }t         d|z  z   }t        | |      \  }}|si S ||d<   |dk7  rt        j                  d|z         |S g d}|D ]  }	 ||   ||j	                  d      d   <    |S # t
        $ r t        j                  d|z         Y Ew xY w)	Nz`<GetIPConfigurationRequest>
<AdaptorID>%d</AdaptorID>
</GetIPConfigurationRequest>
</WiFiConfig>r   r?   z(GetIPConfiguration returned an error: %s)zAwificonfig-getipconfigurationresponse-ipconfiguration-addressmodezIwificonfig-getipconfigurationresponse-ipconfiguration-alternatednsaddresszDwificonfig-getipconfigurationresponse-ipconfiguration-gatewayaddressz?wificonfig-getipconfigurationresponse-ipconfiguration-ipaddresszGwificonfig-getipconfigurationresponse-ipconfiguration-primarydnsaddressz@wificonfig-getipconfigurationresponse-ipconfiguration-subnetmaskzCwificonfig-getipconfigurationresponse-networkconfiguration-hostnamer@   rA   rB   rC   r2   ri   rH   r3   r   r8   rI   r;   s           r<   __getIPConfigurationr     s    
C   G
 /sG<K	$Cd		<{JK
J  	$*1ICR ! J	  	II0145	   A..!BBc                 &   d\  }}}}}}}	t        | |      }
|
r:|
d   j                         dk(  r$	 |
d   }|
d   }|
d   }|
d   }|
d   }|
d	   }|
d
   }	|||||||	fS # t        $ r+}t        j	                  dt        |      z         Y d }~8d }~ww xY w)N)0.0.0.0r[   r[   r   r   r   r   r   r?   	ipaddresshostnameaddressmode
subnetmaskgatewayaddressprimarydnsaddressalternatednsaddressrB   )r   r0   rF   r   r   r,   )r2   r|   ri   ipr   r   r   gatewaypridnssec_dnsrH   r9   s               r<   getIPConfigurationr     s    S DB+z7FG
sJ
/C
s=!'')T1		;[!B:Hm,K\*J*+G,-F/0G xj'67JJ  	;II03q69::	;s   #A 	B%!BBc                 *   i }t         d|z  z   }t        | |      \  }}|si S ||d<   |dk7  rt        j                  d|z         |S g d}|D ]  }	 ||   ||j	                  d      d   <    |S # t
        $ r t        j                  d|z         Y Ew xY w)	Nz^<GetSignalStrengthRequest>
<AdaptorID>%d</AdaptorID>
</GetSignalStrengthRequest>
</WiFiConfig>r   r?   'GetSignalStrength returned an error: %s)z7wificonfig-getsignalstrengthresponse-signalstrength-dbmzEwificonfig-getsignalstrengthresponse-signalstrength-signalstrengthmaxzEwificonfig-getsignalstrengthresponse-signalstrength-signalstrengthminzGwificonfig-getsignalstrengthresponse-signalstrength-signalstrengthvaluer@   rA   rB   rC   r   s           r<   __getSignalStrengthr     s    
C   G
 /sG<K	$Cd		;kIJ
J  	$*1ICR ! J	  	II0145	r   c                     d\  }}}}t        | |      }|r+|d   j                         dk(  r	 |d   }|d   }|d   }|d   }||||fS # t        $ r+}	t        j	                  dt        |	      z         Y d }	~	5d }	~	ww xY w)	N)   r   r   i8r   r?   rv   rw   signalstrengthvaluedbmrB   )r   r0   rF   r   r   r,   )
r2   r|   r}   ri   ss_maxss_minss_valss_dbmrH   r9   s
             r<   getSignalStrengthr     s    %2"FFFF
c:
.C
s=!'')T1	;,-F,-F./FZF 666))  	;II03q69::	;s   A 	A;!A66A;c                 $   i }t         dz   }t        | |      \  }}|si S ||d<   |dk7  rt        j                  d|z         |S g d}|D ]  }	 ||   ||j	                  d      d   <    |S # t
        $ r t        j                  d|z         Y Ew xY w)	Nz><GetCryptoSuiteRequest>
</GetCryptoSuiteRequest>
</WiFiConfig>r   r?   r   )z;wificonfig-getcryptosuiteresponse-cryposuite-crypoalgorithmz6wificonfig-getcryptosuiteresponse-cryposuite-crypomodez5wificonfig-getcryptosuiteresponse-cryposuite-secretidr@   rA   rB   rC   rG   s          r<   __getCryptoSuiter     s    
C  G /sG<K	$Cd		;kIJ
LJ  	$*1ICR ! J	  	II0145	rK   c                     d\  }}}t        |       }|r&|d   j                         dk(  r	 |d   }|d   }|d   }|||fS # t        $ r+}t        j	                  dt        |      z         Y d }~4d }~ww xY w)N)r   r   r   r   r?   crypoalgorithm	crypomodesecretidrB   )r   r0   rF   r   r   r,   )r2   r|   algmoder   rH   r9   s          r<   getCryptoSuiter   ,  s    $Cx
3
C
s=!'')T1	;&'C{#D:H x  	;II03q69::	;s   ? 	A3!A..A3c                     d}t         dz   }t        | |      \  }}|s|S |dk7  r|S 	 |d   }|S # t        $ r t        j	                  d       Y |S w xY w)Nr   z8<GetHostnameRequest>
</GetHostnameRequest>
</WiFiConfig>r?   z'wificonfig-gethostnameresponse-hostnamezMissing response key: hostname)rD   r=   rF   r   r   )r2   rH   r3   r   r8   s        r<   getHostnamer   <  sx    
C  G /sG<K
d
4>? J  4		23J4s   . AAc                    t         j                  d| z         d| |fz  }ddlm} dd l}i }t        |      }t         j                  |       	 |j                  d      }|j                  dd       |j                  d	d
       |j                  dt        |             |j                          |j                  |       |j                         }|j                   dk7  rt         j                  d       i S |j#                         }	t         j                  |	       	 t%        j&                         j)                  |	      }
d|
v rt         j                  d       i S |
j1                  dd      |d<   |
j1                  dd      |d<   |
j1                  dd      }|
j1                  dd      }|
j1                  dd      }|
j1                  dd      }|d|d|d|}|j3                         |d<   |S # |j                  |j                  f$ r t         j                  d       i cY S w xY w# |	j*                  j,                  j.                  $ r i cY S w xY w)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.comPOSTz/wps2/locationzContent-typeztext/xmlzContent-LengthzHost connection error   z$Connection to location server failedzlocationrs-errorz Location server returned failurezlocationrs-location-latitudelatitudezlocationrs-location-longitude	longitudez0locationrs-location-street-address-street-numberr   z/locationrs-location-street-address-address-linez'locationrs-location-street-address-cityz/locationrs-location-street-address-country-code z, address)r   r   sixext.movesr   socketr#   r   HTTPSConnection
putrequest	putheaderr,   
endheaderssendgaierrorr   getresponsestatusreadr   r$   r%   r'   r(   r)   getstrip)bssidssr3   r   r   rH   request_lenconnresponser&   r8   street_numberstreet_namecitycountryr   s                   r<   getLocationr   T  s   II0589 2;G *
Cg,KLL	**+DE 01~z2'[)9:		'
 !H#		89	
--/CLL&&(11#6 V#		45	jj!?CC
Ozz"A1ECJJQSUVM**NPRSK::?DDjjJBOG!.T7KG]]_C	NJ? OOV\\* 		)*	 ;;'' 	s%   A1G, #H$ ,2H! H!$%II)PowerOn)N)r   )rz   r   xml.parsers.expatr&   gr   r   r   ry   r   NSrD   r=   rJ   rS   rd   rk   r   r   r   r   r   r   r   r   r   r   r    rl   r<   <module>r      s   .  	   D	=D@-b"N6cP8 H FK*@*$>  0=rl   