3
NZ                 @   s  d dl mZ d dlZd dlZd dlZd dlmZmZmZ d dl	Z	d dl
Z
d dlZd dlZd dljjZd dlT d dlT d dlT d dlmZmZmZmZmZ d dlmZ ddlT 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Z&dZ'dZ(G dd de)Z*G dd de+Z,dS )    )divisionN)BytesIOto_bytes_utf8
to_unicode)*)deviceutilscodesdimestatus)r      s   HTTP/\d.\d\s(\d+)         i  i     i  a  <?xml version="1.0" encoding="UTF-8"?><!-- THIS DATA SUBJECT TO DISCLAIMER(S) INCLUDED WITH THE PRODUCT OF ORIGIN.--><prdcfgdyn2:ProductConfigDyn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:prdcfgdyn2="http://www.hp.com/schemas/imaging/con/ledm/productconfigdyn/2009/03/16" xmlns:prdcfgdyn="http://www.hp.com/schemas/imaging/con/ledm/productconfigdyn/2007/11/05" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/ledm/productconfigdyn/2009/03/16 ../schemas/ledm2/ProductConfigDyn.xsd http://www.hp.com/schemas/imaging/con/ledm/productconfigdyn/2007/11/05 ../schemas/ProductConfigDyn.xsd http://www.hp.com/schemas/imaging/con/dictionaries/1.0/ ../schemas/dd/DataDictionaryMasterLEDM.xsd"><prdcfgdyn2:ProductSettings><dd:TimeStamp>%s</dd:TimeStamp></prdcfgdyn2:ProductSettings></prdcfgdyn2:ProductConfigDyn>a  <?xml version="1.0" encoding="UTF-8"?><!--Sample XML file generated by XMLSPY v5 rel. 4 U (http://www.xmlspy.com)--><faxcfgdyn:FaxConfigDyn xmlns:faxcfgdyn="http://www.hp.com/schemas/imaging/con/ledm/faxconfigdyn/2009/03/03" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:fax="http://www.hp.com/schemas/imaging/con/fax/2008/06/13" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/ledm/faxconfigdyn/2009/03/03 ../schemas/FaxConfigDyn.xsd"><faxcfgdyn:SystemSettings><dd:PhoneNumber>%s</dd:PhoneNumber></faxcfgdyn:SystemSettings></faxcfgdyn:FaxConfigDyn>a  <?xml version="1.0" encoding="UTF-8"?><!--Sample XML file generated by XMLSPY v5 rel. 4 U (http://www.xmlspy.com)--><faxcfgdyn:FaxConfigDyn xmlns:faxcfgdyn="http://www.hp.com/schemas/imaging/con/ledm/faxconfigdyn/2009/03/03" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:fax="http://www.hp.com/schemas/imaging/con/fax/2008/06/13" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/ledm/faxconfigdyn/2009/03/03 ../schemas/FaxConfigDyn.xsd"><faxcfgdyn:SystemSettings><dd:CompanyName>%s</dd:CompanyName></faxcfgdyn:SystemSettings></faxcfgdyn:FaxConfigDyn>a   <?xml version="1.0" encoding="UTF-8"?><FaxPCSendDyn xmlns="http://www.hp.com/schemas/imaging/con/ledm/printtofaxdyn/2008/11/24" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/ledm/printtofaxdyn/2008/11/24 ../schemas/FaxPCSendDyn.xsd"><FaxPCSendConfig><FaxTxPhoneNumber>%s</FaxTxPhoneNumber><NumPages>%d</NumPages><TTI_Control>TTI_Off</TTI_Control></FaxPCSendConfig></FaxPCSendDyn>aH  <?xml version="1.0" encoding="UTF-8" ?><FaxPCSendDyn xmlns="http://www.hp.com/schemas/imaging/con/ledm/printtofaxdyn/2008/11/24" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/ledm/printtofaxdyn/2008/11/24 ../schemas/FaxPCSendDyn.xsd"><PageConfig><PageNum>%d</PageNum><Width>1728</Width><Height>2200</Height><ImageType>BW</ImageType><Compression>mh</Compression><HorizontalDPI>%d</HorizontalDPI><VerticalDPI>%d</VerticalDPI></PageConfig></FaxPCSendDyn>a  <?xml version="1.0" encoding="UTF-8"?><Job xmlns="http://www.hp.com/schemas/imaging/con/ledm/jobs/2009/04/30" xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/" xmlns:fax="http://www.hp.com/schemas/imaging/con/fax/2008/06/13" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com/schemas/imaging/con/ledm/jobs/2009/04/30 ../schemas/Jobs.xsd"><JobUrl>%s</JobUrl><JobState>Canceled</JobState></Job>c               @   sn   e Zd ZdddedfddZdd Zdd Zd	d
 ZeeeZ	dd Z
dd Zeee
ZdddZdd ZdS )LEDMFaxDeviceNFc             C   s>   t j| ||||| d | _d | _| jdkr4| j| _nd| _d S )NnetZ	localhost)	FaxDevice__init__send_fax_threadZupload_log_threadbushost	http_host)selfZ
device_uriprinter_namecallbackZfax_typeZdisable_dbus r   /usr/share/hplip/fax/ledmfax.pyr   J   s    

zLEDMFaxDevice.__init__c             C   s   d|| j t||f }tj| | j|jd t }x| jd|ddrJq8W |j }tj| | j	  t
j|}|d kr|tS yt|jd}W n ttfk
r   t}Y nX |tkS )NzbPUT %s HTTP/1.1
Connection: Keep-alive
User-agent: hplip/2.0
Host: %s
Content-length: %d

%szutf-8i      )timeoutr   )r   lenloglog_data	writeLEDMencoder   readLEDMgetvalue	closeLEDMhttp_result_patmatchHTTP_OKintgroup
ValueError	TypeError
HTTP_ERROR)r   ZurlZpostdataresponser)   coder   r   r   put]   s"    


 
zLEDMFaxDevice.putc             C   s"   t | }tjd|  | jd|S )NzSetPhoneNum:xml Value:%sz/DevMgmt/FaxConfigDyn.xml)setPhoneNumXMLr!   debugr3   )r   Znumxmlr   r   r   setPhoneNumz   s    zLEDMFaxDevice.setPhoneNumc             C   s   | j ddS )Nz/DevMgmt/FaxConfigDyn.xmlz>faxcfgdyn:faxconfigdyn-faxcfgdyn:systemsettings-dd:phonenumber)readAttributeFromXml)r   r   r   r   getPhoneNum   s    zLEDMFaxDevice.getPhoneNumc             C   s<   yt | }W n" ttfk
r.   tjd Y nX | jd|S )NzUnicode Errorz/DevMgmt/FaxConfigDyn.xml)setStationNameXMLUnicodeEncodeErrorUnicodeDecodeErrorr!   errorr3   )r   namer6   r   r   r   setStationName   s
    zLEDMFaxDevice.setStationNamec             C   s   t | jddS )Nz/DevMgmt/FaxConfigDyn.xmlz>faxcfgdyn:faxconfigdyn-faxcfgdyn:systemsettings-dd:companyname)r   r8   )r   r   r   r   getStationName   s    zLEDMFaxDevice.getStationName c
       
      C   s>   | j  s6t| | j|||||||||	| _| jj  dS dS d S )NTF)ZisSendFaxActiveLEDMFaxSendThreadservicer   start)
r   phone_num_listfax_file_listcover_messagecover_re
cover_funcpreserve_formattingr   update_queueevent_queuer   r   r   	sendFaxes   s    
zLEDMFaxDevice.sendFaxesc             C   sl   t j }d|d |d |d |d |d |d f }t| }tjd|  | jd	|rZd
S tjd dS d S )Nz%4d-%02d-%02dT%02d:%02d:%02dr   r      r      r   zsetDateTimeXML Value:%sz/DevMgmt/ProductConfigDyn.xmlTzAFailed to set date and time. Set date and time using front panel.F)timeZ	localtimesetDateTimeXMLr!   r5   r3   )r   tZdate_bufr6   r   r   r   setDateAndTime   s    ,
zLEDMFaxDevice.setDateAndTime)rA   rA   NFrA   NN)__name__
__module____qualname__ZFAX_TYPE_NONEr   r3   r7   r9   property	phone_numr?   r@   station_namerM   rS   r   r   r   r   r   H   s   
	
  
r   c               @   sB   e Zd ZdddZdd Zdd	 Zd
d ZdddZdddZdS )rB   rA   NFc             C   sD   t j| |||||||||	|
| |jdkr:d| jj | _nd| _d S )Nr   z%s:8080zlocalhost:8080)FaxSendThreadr   r   devr   r   )r   r[   rC   rE   rF   rG   rH   rI   rJ   r   rK   rL   r   r   r   r      s    

zLEDMFaxSendThread.__init__c       F   4   C   s  d}d}d}d}d}d}d}d}d	}	d
}
d}d}
d}d}d}| j  }|}t}g | _d}x8||kr| j rp|}tjd|  ||krtjd | jtddf |}qZ||krtjd | jt	ddf |}qZ||krtjd | j|ddf |}qZ||kr tjd | jt
ddf |}qZ||krtjddZ  |}zy| jj  W n8 tk
r } ztjd|j  |}W Y d d }~X n`X y8| jj| _tjd| j  | jj| _tjd| j  W n$ tk
r   tjd |}Y nX W d | jj  X qZ||krtjdd[  | j|}qZ||kr>tjdd\  | j|}qZ||krtjdd]  |	}y2t|}tjd|d    | jtd|d  f W n& tk
r   |}tjd! wZY nX | jd d  }qZ||	krtjd"d^  | j|}qZ||
krtjd#d_  | j|}qZ||kr0tjd$d`  | j|}qZ||kr tjd%da  |}d}d}d}d}d}d}d}d}d	}d
}d&} d'}!|}"
x
|"|kr| j rtjd( |}"|!r| j }#|#tjtjfkrtjd)|#  |}"|}tjd*||"f  |"|krd'}!|}"|}q|"|kr,tjd+ d'}!| }"|}q|"|krPtjd, d'}!| }"|}q|"|krttjd- d'}!| }"|}q|"|krtjd.db  |}"y| jj  W n8 tk
r } ztjd|j  |}"W Y d d }~X nX | jj t!kr|}"q|"|krtjd/dc  yt| j"d0}$W n( t#k
r>   tjd1 |}"wY nX y|$j$t%}%W n( t#k
rv   tjd1 |}"wY nX | j&|%\
}&}'}(})}*}+},}-}.}/|&t'd2krtjd3 |}"ntjd4|&|'|(|)|*|+|,|-f  |d5 }0t(|0|(f }1| j)d6t*|1|1}2tj+|2 | jj,  | jj-t'|2 t. }3y x| jj/d7|3d8d9r>q&W W n& tk
rh   |}"| jj0  P Y nX | jj0  |3j1 }3tj+|3 | j2|3t3kr|}"nL| j2|3t4kr|t5kr|}"|d:7 }n$|t5krtjd; |}"tjd< P |3j6d=dt*|3}4|3j6d>dt*|3}5|3j6d?dt*|3}6|3|4|5 j7 }7|7j8d@dAj8dBdA}7|7dkr|3|4|6 j7 }7|7j8d@dAj8dBdA}7tjdC|7t9|7f  t9|7t:kr|7j;dD}7q|"|krtjdEdd  t. }8tjdF|(  xFt<|(D ]}9| j r|}"|"|krP y|$j$t=}%W n( t#k
r0   tjd1 |}"wY nX | j>|%\}:};}<}=}>}/tjdG|:|;|<|=|>f  |;t?krxtjdHt?  |8j@|$j$|= |$j$|>}?|8jAd y|8j$|=}2W n& t#k
r   tjd1 |}"P Y nX |2dAkrtjdI |}"P | jjB|7dJ}@tjdK|@  tC|:|)|*f }A| j)|@t*|A|A}Btj+|B | jj,  y| jj-|B W n& tk
	rr   |}"| jj0  P Y nX t. }3y x| jj/d7|3d8d9	r	q~W W n& tk
	r   |}"| jj0  P Y nX | jj0  |3j1 }3tj+|3 | j2|3tDk	r|}"tjdL P | jjB|7dJ}Cxx| j 
r|}"P | jE|7\}D}E|D|k
rt|EtFk
s^|EtGk
s^|EtHk
s^|EtIk
rttjdM |}"|E}P n|D|k
rP 
qW |"|k
s|"|k
rP | j)|Ct*|2ddN}BtjdO|B  | jj,  | jj-|B tjdP y| jj-|2 W n& tk
r   |}"| jj0  P Y nX t. }3y x| jj/d7|3dd9r8q W W n& tk
rb   |}"| jj0  P Y nX | jj0  |3j1 }3tj+|3 | j2|3tDkrtjdQ |}"P |8jJd |8jAd qW |}"q|"|kr|}"q|"|krtjdRde  tK|7 }B| jL|7t*|B|B}2tj+|2 | jj,  | jj-t'|2 t. }3y x| jj/d7|3dd9rLq4W W n& tk
rv   |}"| jj0  P Y nX | jj0  |3j1 }3tj+|3 | j2|3tMkr| }"n|}"tjdS n^|"| krtjdTdf  tjdU y|$j  W n tNk
r   Y nX | jj0  | jj  |}"qW qZ||krZtjdVdg  | jOrtjdW| j"  ytPjQ| j" tjdX W n  tRk
r   tjdY Y nX |}qZW d S )hNr   
            (   2   <   F   P   Z   d   n   x      zSTATE=(%d, 0, 0)zAborted by user.rA   zSuccess.zError, aborting.zDevice busy, aborting.z%s State: Get sender infor   zUnable to open device (%s).zSender name=%szSender fax=%szLEDM GET failed!z!%s State: Pre-render non-G4 filesz%s State: Get total page countz%s State: Next recipientzProcessing for recipient %sr>   zLast recipient.z%s State: Render cover pagez%s State: Handle single filez%s State: Merge multiple filesz%s State: Send fax   FzFax send aborted.zD/L error state=%dzSTATE=(%d, %d, 0)zFax send error.zFax device busy.zFax send success.z%s State: Open devicez%s State: BeginJobrbzUnable to read fax file.Zhplip_g3zInvalid file header. Bad magic.z>Magic=%s Ver=%d Pages=%d hDPI=%d vDPI=%d Size=%d Res=%d Enc=%dfaxz/FaxPCSend/Jobi   r   )r   r   z2HTTP ERROR CODE: 531, Server Temporary UnavailablezCreate Job request faileds   /Jobs/JobList/s   Content-Lengths   Cache-Control          
zjobListURI = [%s] type=%szutf-8z%s State: DownloadPageszTotal Number of pages are:%dz%Page=%d PPR=%d RPP=%d BPP=%d Thumb=%dz#Pixels per line (width) must be %d!zNo data!z!j:job-faxpcsendstatus-resourceurizpageConfigURI:[%s]z.Page config data is not accepted by the devicez%setting state to FAX_SEND_STATE_ERRORzapplication/octet-streamz.Sending Page Image XML Data [%s] to the devicez'Sending Raw Data to printer............z(Image Data is not accepted by the devicez%s State: CancelJobzJob Cancel Request Failedz%s State: Close sessionzClosing session...z%s State: CleanupzRemoving merged file: %sZRemovedz	Not foundz********************z********************z********************z********************z********************z********************z********************z********************z********************z********************z********************z********************z********************z********************)SZnext_recipient_genSTATUS_ERRORZrendered_file_listZcheck_for_cancelr!   r5   r=   Zwrite_queueZSTATUS_IDLEZSTATUS_COMPLETEDZSTATUS_BUSYr[   openErrormsgrY   Zsender_namerX   Z
sender_faxcloseZ
pre_renderZcount_pagesnextZSTATUS_SENDING_TO_RECIPIENTStopIterationZ
cover_pageZsingle_fileZmerge_filesZgetFaxDownloadStateZpmlZUPDN_STATE_XFERACTIVEZUPDN_STATE_XFERDONEZdevice_stateZDEVICE_STATE_NOT_FOUNDfIOErrorreadZFILE_HEADER_SIZEZdecode_fax_headerr   createJobXMLformat_http_postr    r"   ZopenLEDMr#   r   r%   r'   r&   get_error_codeHTTP_CREATEDHTTP_SERVICE_UNAVALIABLE	MAX_TRIESfindstripreplacetypestrdecoderangeZPAGE_HEADER_SIZEZdecode_page_headerPIXELS_PER_LINEwriteseekr8   pageConfigXMLHTTP_ACCEPTEDcheckForErrorSTATUS_ERROR_IN_TRANSMITTINGSTATUS_ERROR_IN_CONNECTINGSTATUS_ERROR_PROBLEM_IN_FAXLINESTATUS_JOB_CANCELtruncatecancelJobXMLformat_http_putr*   	NameErrorZremove_temp_fileosremoveOSError)Fr   Z
STATE_DONEZSTATE_ABORTEDZSTATE_SUCCESSZ
STATE_BUSYZSTATE_READ_SENDER_INFOZSTATE_PRERENDERZSTATE_COUNT_PAGESZSTATE_NEXT_RECIPIENTZSTATE_COVER_PAGEZSTATE_SINGLE_FILEZSTATE_MERGE_FILESZSTATE_SEND_FAXZSTATE_CLEANUPZSTATE_ERRORZnext_recipientstateZerror_stateZ	num_trieseZ	recipientZrecipient_file_listZFAX_SEND_STATE_DONEZFAX_SEND_STATE_ABORTFAX_SEND_STATE_ERRORZFAX_SEND_STATE_BUSYFAX_SEND_STATE_SUCCESSZFAX_SEND_STATE_DEVICE_OPENZFAX_SEND_STATE_BEGINJOBZFAX_SEND_STATE_DOWNLOADPAGESZFAX_SEND_STATE_ENDJOBZFAX_SEND_STATE_CANCELJOBZFAX_SEND_STATE_CLOSE_SESSIONZmonitor_stateZfax_send_stateZ	fax_stateZffheadermagicversionZtotal_pagesZhort_dpiZvert_dpiZ	page_sizeZ
resolutionencodingZ	reserved1Z	reserved2ZfaxnumZ	createJobr0   r1   posZpos1Zpos2Z
jobListURIZpagepZpage_numZpprZrppZbytes_to_readZthumbnail_bytesZ	thumbnailZpageConfigURIZ
pageConfigxmldataZpageImageURIZStatusZ	Fax_Stater   r   r   run   s   























































































zLEDMFaxSendThread.runc             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/   r(   r)   r*   r+   r,   r-   r.   )r   Zretr)   r2   r   r   r   r|     s     
 
z LEDMFaxSendThread.get_error_codec       	      C   s4  t  }| jj|}|s$tjd dS tj j|}tjd||f  d}d}|}t	}t
|d ddkrt
|d	 d
dkr|}t}nt
|d ddkrt
|d	 ddkr|}t}n|t
|d	 ddkrt
|d ddkr|}t}nNt
|d	 ddkrt
|d ddkr|}t}nt
|d ddkr,|}|}||fS )Nz'Unable To read the XML data from devicerA   z$Read Attribute:%s and it is value:%sr]   r_   z(j:job-faxpcsendstatus-faxtxmachinestatusZTransmittingr   z&j:job-faxpcsendstatus-faxtxerrorstatusZCommunicationErrorZ
ConnectingZNoAnswerZPcDisconnectz&j:job-faxpcsendstatus-pagestatus-staterr   ZStop)r   r[   ZFetchLEDMUrlr!   r=   r   ZXMLToDictParserZparseXMLr5   rp   Zcmpr   r   r   r   )	r   Zuristreamr0   ZxmlDictr   r   r   ZFax_send_stater   r   r   r     s>    
zLEDMFaxSendThread.checkForErrortext/xml; charset=utf-8c             C   s   | j }tjdS )NzPOST $requst HTTP/1.1
Host: $host
User-Agent: hplip/2.0
Content-Type: $content_type
Content-Length: $ledmlen
Connection: Keep-alive
SOAPAction: ""

$xmldata)r   r   cat)r   requstledmlenr   content_typer   r   r   r   r{     s    	z"LEDMFaxSendThread.format_http_postc             C   s   | j }tjdS )Nz{PUT $requst HTTP/1.1
Host: $host
User-Agent: hplip/2.0
Content-Type: $content_type
Content-Length: $ledmlen

$xmldata)r   r   r   )r   r   r   r   r   r   r   r   r   r     s    z!LEDMFaxSendThread.format_http_put)rA   rA   NFrA   NN)r   )r   )	rT   rU   rV   r   r   r|   r   r{   r   r   r   r   r   rB      s    
   G$
rB   )-Z
__future__r   sysr   rP   Zbase.sixextr   r   r   reZ	threadingZstructZxml.parsers.expatZparsersZexpatstatZbase.gZ
base.codesbaser   r   r	   r
   r   rl   compileIr(   r*   r   r}   r/   r~   r   r   rQ   r4   r:   rz   r   r   r   r   rZ   rB   r   r   r   r   <module>   s>   k