3
NZt                 @   s  d dl Z d dlZd dlZd dlZd dlT ddlT ddlmZm	Z	 ddl
mZ ejdejZdZdZd	Zd
ZdZdZdZdZdZdZdd Zdd Zd6ddZd7ddZdd Zdd Zdd Z d d! Z!d"d# Z"d$d% Z#d8d&d'Z$d9d)d*Z%d:d+d,Z&d;d-d.Z'd/d0 Z(d<d2d3Z)d=d4d5Z*dS )>    N)*   )deviceutils)to_bytes_utf8zHTTP/\d.\d\s(\d+)         i     z/IoMgmt/Adapters/a  <?xml version="1.0" encoding="UTF-8" ?><io:Adapter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:io="http://www.hp.com/schemas/imaging/con/ledm/iomgmt/2008/11/30" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:wifi="http://www.hp.com/schemas/imaging/con/wifi/2009/06/26">  <io:HardwareConfig> <dd:Power>%s</dd:Power> </io:HardwareConfig> </io:Adapter>a#  <?xml version="1.0" encoding="UTF-8"?><io:Adapters xmlns:io="http://www.hp.com/schemas/imaging/con/ledm/iomgmt/2008/11/30" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/"><io:Adapter><io:HardwareConfig><dd:Power>%s</dd:Power></io:HardwareConfig></io:Adapter></io:Adapters>a  <io:Profile xmlns:io="http://www.hp.com/schemas/imaging/con/ledm/iomgmt/2008/11/30" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:wifi="http://www.hp.com/schemas/imaging/con/wifi/2009/06/26" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/ledm/iomgmt/2008/11/30 ../../schemas/IoMgmt.xsd http://www.hp.com/schemas/imaging/con/dictionaries/1.0/ ../../schemas/dd/DataDictionaryMasterLEDM.xsd"><io:AdapterProfile><io:WifiProfile><wifi:SSID>%s</wifi:SSID><wifi:CommunicationMode>%s</wifi:CommunicationMode><wifi:EncryptionType>%s</wifi:EncryptionType><wifi:AuthenticationMode>%s</wifi:AuthenticationMode></io:WifiProfile></io:AdapterProfile></io:Profile>z<io:KeyInfo><io:WpaPassPhraseInfo><wifi:RsnEncryption>AESOrTKIP</wifi:RsnEncryption><wifi:RsnAuthorization>autoWPA</wifi:RsnAuthorization><wifi:PassPhrase>%s</wifi:PassPhrase></io:WpaPassPhraseInfo></io:KeyInfo>c       
   -   C   s  i i dt f\}}}}d}xD|tk r\|d7 }tdttd  }t| |dd\}}|tkrP qW |tkrxtjd|  |S t||d< t|dkrd}x*|D ] }d|d| < d|d	| < y|d
 |d| < W n> tk
r }	 z tj	d|	  d|d| < W Y d d }	~	X nX y|d |d| < W n> tk
rb }	 z tj	d|	  d|d| < W Y d d }	~	X nX y|d |d| < W n> tk
r }	 z tj	d|	  d|d| < W Y d d }	~	X nX |d }qW |S )Nr   r   z<io:Adaptersz<io:Adapter>z$Request Failed With Response Code %dadaptorlistlength zadaptorpresence-%dzadaptorstate-%dz;io:adapter-map:resourcenode-map:resourcelink-dd:resourceurizadaptorid-%dzMissing response key: %sz$io:adapter-io:hardwareconfig-dd:namezadaptorname-%dz:io:adapter-io:hardwareconfig-dd:deviceconnectivityporttypezadaptortype-%d)

HTTP_ERRORMAX_RETRIESLEDM_WIFI_BASE_URIlenreadXmlTagDataFromURIHTTP_OKlogerrorKeyErrordebug)
devretparamselementCountcode	max_triesURI
paramsListae r!   !/usr/share/hplip/base/LedmWifi.pygetAdaptorList6   sD    
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adaptorpresence-r   Unknown)r$   r%   )r#   r   rangelowerjoinstrappend)
r   ZrValr   Znum_adaptorsnnamer   rpxr!   r!   r"   getWifiAdaptorID^   s0    



r3   onc       
      C   s  d}d}x|D ]}|d }|d }i ddt f\}}}}	t| }t| }t| ||d|d< |d tkpn|d tkstjd|d ||f  t| }t| ||d|d< |d tkp|d tkstj	d|d ||f  qtjd||f  |||d	 |d
 fS qW dS )Nr   r   r   
   errorreturnzjWifi Adapter turn ON request Failed. ResponseCode=%s AdaptorId=%s AdaptorName=%s. Trying another interfacezPWifi Adapter turn ON request Failed. ResponseCode=%s AdaptorId=%s AdaptorName=%szDWifi Adapter turn ON request is Success. AdaptorId=%s AdaptorName=%sr
      r(   r(   )r(   r   r   r   )
r   r   adapterPowerXml_payload1writeXmlDataToURIr   HTTP_NOCONTENTr   r   adapterPowerXml_payload2r   )
r   ZadapterListZpower_state
adaptor_idZadaptorNamer   r   ZpowerXmlr   r   r!   r!   r"   setAdaptorPower   s$    
r=   c       
   %   C   s:  i }|d krt | d }nt | d | }x(t| |ddd\}}}|tkrNq,q,P q,W ||d< |tkrvtjd|  |S |d k	r6|dkrzytjt|d	 j	d
j
d
}|std|d< n||d< y&tjt|d j	d
j
d
|d< W n   |d |d< Y nX |d |d< |d |d< |d |d< |d |d< |d |d< W n2 tk
rt } ztjd|  W Y d d }~X nX nxt|D ]}	y&y&tjt|d|	  j	d
j
d
}W n" tk
r   |d|	  }Y nX |std|d|	 < n||d|	 < y.tjt|d|	  j	d
j
d
|d|	 < W n    |d|	  |d|	 < Y nX |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 yd(|d)< d*|d+< W n2 tk
r. } ztjd|  W Y d d }~X nX qW |S ),Nz/WifiNetworksz/WifiNetworks/SSID=z<io:WifiNetworksz<io:WifiNetwork>r5   Znumberofscanentriesz$Request Failed With Response Code %dr   z(io:wifinetworks-io:wifinetwork-wifi:ssidzutf-8z	(unknown)zssid-0z)io:wifinetworks-io:wifinetwork-wifi:bssidzbssid-0z+io:wifinetworks-io:wifinetwork-wifi:channelz	channel-0z5io:wifinetworks-io:wifinetwork-wifi:communicationmodezcommunicationmode-0z5io:wifinetworks-io:wifinetwork-io:signalinfo-wifi:dbmzdbm-0z2io:wifinetworks-io:wifinetwork-wifi:encryptiontypezencryptiontype-0z@io:wifinetworks-io:wifinetwork-io:signalinfo-wifi:signalstrengthzsignalstrength-0zMissing response key: %sz+io:wifinetworks-io:wifinetwork-wifi:ssid-%dzssid-%dz,io:wifinetworks-io:wifinetwork-wifi:bssid-%dzbssid-%dz.io:wifinetworks-io:wifinetwork-wifi:channel-%dz
channel-%dz8io:wifinetworks-io:wifinetwork-wifi:communicationmode-%dzcommunicationmode-%dz8io:wifinetworks-io:wifinetwork-io:signalinfo-wifi:dbm-%dzdbm-%dz5io:wifinetworks-io:wifinetwork-wifi:encryptiontype-%dzencryptiontype-%dzCio:wifinetworks-io:wifinetwork-io:signalinfo-wifi:signalstrength-%dzsignalstrength-%d   Zsignalstrengthmaxr   Zsignalstrengthmin)r   readXmlDataFromURIHTTP_ACCEPTEDr   r   r   binasciiZ	unhexlifyr,   encodedecodeZ
to_unicoder   r   r)   	TypeError)
r   adapterNamessidr   r   r   r   r   r    r   r!   r!   r"   performScan   sr    

&$&. &rG   c          '   C   s  d#\}}}}}}}d}	t | d }
i td  }}}d}x2|tk rh|d7 }t| |
dd\}}}|tkr8P q8W |tkrd}d}
x6|tk r|d7 }t| |
d	d
\}}}|tkr|d}	P q|W |tkrtjd|  |||||||fS |	dkr|d k	r|tkry|d }|d }|d }d|d kr&d}n^d}|dkr|d }|d }x>t|D ]2}|d|  dkrN|d|  }|d|  }P qNW W n6 tk
r } ztjdt	|  W Y d d }~X nX n|d k	r|tkryy|d }W n   |d }Y nX y|d }W n   |d }Y nX y|d }W n   |d }Y nX y|d  }W n   |d! }Y nX d|j
 krrd}nd}W n6 tk
r } ztjdt	|  W Y d d }~X nX tjd"|||||||f  |||||||fS )$N0.0.0.0r'   oldz
/Protocolsr   r   z<io:Protocolz/DevMgmt/IOConfigDyn.xmlz<iocfgdyn2:IOConfigDynz<dd3:IOAdaptorConfignewz$Request Failed With Response Code %dzTio:protocols-io:protocol-io:addresses-io:ipv4addresses-io:ipv4address-dd:ipv4addresszSio:protocols-io:protocol-io:addresses-io:ipv4addresses-io:ipv4address-dd:subnetmaskzWio:protocols-io:protocol-io:addresses-io:ipv4addresses-io:ipv4address-dd:defaultgatewayZDHCPzUio:protocols-io:protocol-io:addresses-io:ipv4addresses-io:ipv4address-dd:configmethodZdhcpZautoipz.io:protocols-io:protocol-dd:dnsserveripaddressz7io:protocols-io:protocol-dd:secondarydnsserveripaddressz1io:protocols-io:protocol-dd:dnsserveripaddress-%dz::z:io:protocols-io:protocol-dd:secondarydnsserveripaddress-%dzMissing response key: %szpiocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:ipaddresszriocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:ipaddress-0zqiocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:subnetmaskzsiocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:subnetmask-0zuiocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:defaultgatewayzwiocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:defaultgateway-0zuiocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:ipconfigmethodzwiocfgdyn2:ioconfigdyn-dd3:ioadaptorconfig-dd3:networkadaptorconfig-dd3:ipversionconfig-dd3:ipconfig-dd:ipconfigmethod-0zTip=%s, hostname=%s, addressmode=%s, subnetmask=%s, gateway=%s, pridns=%s, sec_dns=%s)rH   r'   r'   rH   rH   rH   rH   )r   r   r   r?   r   r   r   r)   r   r,   r*   r   )r   rE   ipZhostnameZaddressmodeZ
subnetmaskgatewayZpridnssec_dnsZprotocolr   r   r   r   r   r   r    r!   r!   r"   getIPConfiguration   s    



&
$rN   c             C   sF  d\}}}}}}i i t t df\}}	}
}}t| d }d}d}xN|tk r|d7 }t| |dd\}}
}t| |dd\}	}}|
tkr>|tkr>P q>W |
tkr|tkrtjdt  |||||fS |d k	o|	d k	r6y4|d	 }|d
 }|d }|d }|d }|	d }W n6 tk
r4 } ztj	dt
|  W Y d d }~X nX ||||||fS )Nr   r   z/Profiles/Activez/IoMgmt/IoConfig.xmlr   z<io:Profilez<io:IoConfigz$Request Failed With Response Code %dz8io:profile-io:networkprofile-io:ipv4network-dd:ipaddressz9io:profile-io:networkprofile-io:ipv4network-dd:subnetmaskz=io:profile-io:networkprofile-io:ipv4network-dd:defaultgatewayzAio:profile-io:networkprofile-io:ipv4network-dd:dnsserveripaddresszJio:profile-io:networkprofile-io:ipv4network-dd:secondarydnsserveripaddressz[io:ioconfig-io:iodeviceprotocolconfig-io:ipv4domainname-dd:domainnameconfig-dd:configmethodzMissing response key: %s)r   r   r   r   r   r   )r   r   r   r?   r   r   r   r   r   r   r,   )r   rE   rK   ZsubnetrL   Zpri_dnsrM   modeZparams1Zparams2code1code2r   ZURI1ZURI2r   r    r!   r!   r"   getwifiotherdetailsC  s2    
$rR   c             C   s   d\}}}i t d  }}}t| d }d}	x2|	tk r\|	d7 }	t| |dd\}}}|tkr,P q,W |tkr~tjd|  |||fS |d k	ry|d }|d }|d	 }W n4 tk
r }
 ztjd
t	|
  W Y d d }
~
X nX |||fS )Nr   r   z/Profiles/Activer   z<io:Profilez$Request Failed With Response Code %dzBio:profile-io:adapterprofile-io:wifiprofile-wifi:communicationmodez?io:profile-io:adapterprofile-io:wifiprofile-wifi:encryptiontypez6io:profile-io:adapterprofile-io:wifiprofile-wifi:bssidzMissing response key: %s)r   r   r   )
r   r   r   r?   r   r   r   r   r   r,   )r   rE   ZalgrO   ZsecretidZparmsr   r   r   r   r    r!   r!   r"   getCryptoSuiteb  s(    


$rS   c             C   s   i t  }}t| d }|dkrDd}	ttjt|jd|||	f }
n`|}	tjddtt}td | t	 t|d   tjt|jd|||	tjt|jdf }
t
| ||
d}||d< |tkptstjd	|d   |S )
Nz/Profiles/ActiveZnoneopenzutf-8z</io:WifiProfile>r   r5   r6   z$Request Failed With Response Code %d)r   r   passPhraseXmlrA   Zhexlifyr   rC   findr   
keyInfoXmlr9   r   r:   r   r   )r   rE   rF   Zcommunication_modeZencryption_typekeyr   r   r   ZauthModeZppXmlposr!   r!   r"   	associate}  s    
"0rZ   c       
      C   s   g i t df\}}}}d
\}}t| d }d}	x4|	tk r`|	d7 }	t| |ddd\}}}|tkr.P q.W |tkr|tjd|  |S |d k	ry|d }W n   d}Y nX y|d	 }W n   d}Y nX |j||f |S )Nr   r   z/VsaCodes.xmlr   z<io:VsaCodesr5   z$Request Failed With Response Code %dz$io:vsacodes-wifi:vsacode-dd:severityz(io:vsacodes-wifi:vsacode-wifi:rulenumber)r   r   )r   r   r   r?   r   r   warnr-   )
r   rE   r   r   r   r   ZseverityZruler   r   r!   r!   r"   getVSACodes  s.    


r\   c             C   s   d}d}d}x2|t k r>|d7 }t| |dd\}}}|tkrP qW |tkrZtjd|  |S |d k	ry|d }W n0 tk
r } ztjd|  W Y d d }~X nX |S )	Nr   z/IoMgmt/IoConfig.xmlr   r   z<io:IoConfigz9Request failed with Response code %d. HostName not found.z*io:ioconfig-io:iodeviceconfig-dd3:hostnamezMissing response key: %s)r   r?   r   r   r[   r   r   )r   ZhostNamer   r   r   r   r   r    r!   r!   r"   getHostname  s"    
 r]   c             C   s   d\}}}}i t d  }}	}
|d k	r6t| d | }n||||fS x2t| |ddd\}}	}
|	tkrptjd qDqDP qDW |	tkrtjd	|	  ||||fS |d k	r|
d
kry|d }|d }W n0 tk
r } ztjd|  W Y d d }~X nX ||||fS )Nr>   r   r   z/WifiNetworks/SSID=z<io:WifiNetworksz<io:WifiNetwork>r5   zCGot Response as HTTP_ACCEPTED, so retrying to get the actual resultz$Request Failed With Response Code %dr   z5io:wifinetworks-io:wifinetwork-io:signalinfo-wifi:dbmz@io:wifinetworks-io:wifinetwork-io:signalinfo-wifi:signalstrengthzMissing response key: %s8)r>   r   r   r^   )	r   r   r?   r@   r   infor   r   r   )r   rE   rF   r<   Zss_maxZss_minZss_valZss_dbmr   r   r   r   r    r!   r!   r"   getSignalStrength  s,    
 r`   r>   c             C   s  g t  }}t|dd}tj| tj }| j dkr| j  | j dkr| j	  | j
| yx| jd||rnq^W W q tk
r   | j  tjd Y qX nF| j| y| j| j|| W n& tk
r   | j  tjd Y nX nH| j| y| j| j|| W n( tk
r*   | j  tjd Y nX |j jd}	|	d k	rt|	}|tkrrtj|	}	|	j|dt|	}
|	|
d  j }|jd	d
jdd
jdd
}|jd}ytj  }|j!|}dj"dd t#dd |D }|j$|}xN|D ]F}|j% }|jd	d
jdd
jdd
}tj& j't(|}|j)| qW W n8 t*j+j,j-k
rn } ztj.d|  W Y d d }~X nX ntj.d|  ||fS )Nr   r   r   i   z"Unable to read Marvell_EWS ChannelzUnable to read EWS_LEDM ChannelzUnable to read LEDM Channelzutf-8 	
0c             s   s   | ]
}|V  qd S )Nr!   ).0lr!   r!   r"   	<genexpr>  s    z(readXmlTagDataFromURI.<locals>.<genexpr>c             S   s   | dkS )Nz<>r!   )r2   r!   r!   r"   <lambda>  s    z'readXmlTagDataFromURI.<locals>.<lambda>zXML parser failed: %sz!HTTP Responce failed with %s coder(   r(   )/r   format_http_getr   r_   ioBytesIOopenLEDM	closeLEDMopenEWS_LEDMopenMarvell_EWSwriteMarvell_EWSreadMarvell_EWSErrorcloseMarvell_EWSr   writeEWS_LEDMreadLEDMDatareadEWS_LEDMcloseEWS_LEDM	writeLEDMreadLEDMgetvaluerC   get_error_coder   r   Zunchunck_xml_datarV   r   stripreplacerstripZextendedExpatZParser+   filterZgetElementsByTagNameZtoStringXMLToDictParserparseXMLr   r-   xmlparsersexpat
ExpatErrorr   )r   r   xmlRootNodeZxmlReqDataNodetimeoutr   r   dataresponsestrResprY   repstrZparser_objectZroot_elementZreqDataElementListZnoder   r    r!   r!   r"   r     sd    











"r   c             C   s  i t d  }}}t|dd}tj| tj }	| j dkr| j  | j dkr| j	  | j
| yx| jd|	|rtqdW W q tk
r   | j  tjd Y qX nF| j| y| j| j|	| W n& tk
r   | j  tjd Y nX nH| j| y| j| j|	| W n( tk
r0   | j  tjd Y nX |	j jd}
|
d k	rt|
}|tkrtj|
}
|
j|dt|
}|
|d  j }|jd	d
jdd
jdd
}|jd}|j |}ytj! j"|}W n8 t#j$j%j&k
r } ztj'd|  W Y d d }~X nX ntj'd|  |||fS )Nr   r   r   i   z"Unable to read Marvell_EWS ChannelzUnable to read EWS_LEDM ChannelzUnable to read LEDM Channelzutf-8ra   rb   rc   rd   re   zXML parser failed: %sz" HTTP Responce failed with %s coder(   r(   )(r   rj   r   r_   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r   ru   rv   rw   rx   ry   rz   r{   rC   r|   r   r   Zextract_xml_chunkrV   r   r}   r~   r   countr   r   r   r   r   r   r   )r   r   r   ZxmlChildNoder   r   r   r   r   r   r   rY   r   r    r!   r!   r"   r?   $  sV    








"r?   c             C   s<  t }t|t||}tj }| j dkr| j dkr| j  | j| yx| j	d||rZqJW W q t
k
r   | j  tjd Y qX nF| j| y| j| j|| W n& t
k
r   | j  tjd Y nX nH| j| y| j| j|| W n( t
k
r   | j  tjd Y nX |j jd}|d k	r8t|}|S )	Nr   i  z"Unable to read Marvell_EWS ChannelzUnable to read EWS_LEDM ChannelzUnable to read LEDM Channelzutf-8r(   r(   )r   format_http_putr   rk   rl   rm   ro   rp   rq   rr   rs   rt   r   r   ru   rv   rw   rx   ry   rz   rn   r{   rC   r|   )r   r   r   r   r   r   r   r   r!   r!   r"   r9   Z  s:    



r9   c             C   sR   | st S tj| }|d krt S yt|jd}W n ttfk
rL   t }Y nX |S )Nr   )r   http_result_patmatchintgroup
ValueErrorrD   )r   r   r   r!   r!   r"   r|     s     
 
r|   text/xml; charset=utf-8c             C   s   d}t jdS )N	localhostz{GET $requst HTTP/1.1
Host: $host
User-Agent: hplip/3.0
Content-Type: $content_type
Content-Length: $ledmlen

$xmldata)r   cat)requstledmlenxmldatacontent_typehostr!   r!   r"   rj     s    rj   c             C   s   d}t jdS )Nr   z{PUT $requst HTTP/1.1
Host: $host
User-Agent: hplip/3.0
Content-Type: $content_type
Content-Length: $ledmlen

$xmldata)r   r   )r   r   r   r   r   r!   r!   r"   r     s    r   )r4   )N)r   )r>   )r>   )r>   )r   )r   )+Ztimerk   rA   Zxml.parsers.expatr   stringgr   r   r   Zsixextr   recompileIr   r   r@   r:   r   r   r   r;   r8   rU   rW   r#   r3   r=   rG   rN   rR   rS   rZ   r\   r]   r`   r   r?   r9   r|   rj   r   r!   r!   r!   r"   <module>   sF   (!

Hc
 
<
6
'
