
    =	fL                        d dl mZ d dlmZ d dl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mc mZ d dl d dl d dl d dlmZmZmZmZmZ d dlm
Z
 ddl d dlZd dlZd dlZd dlZd dl d dl Z d dl!Z!d d	lmZmZ d d
lm"Z"m
Z
mZm#Z#m$Z$m%Z% d dl&m'Z' d dl Z d dl!Z!d dlZd dlZd dl(m)Z) dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3 G d de4      Z5 G d de6      Z7y)    )division)NONEN)BytesIOto_bytes_utf8
to_unicode)*)deviceutilscodesdimestatus)r      )r	   r
   )PY3r   r   to_string_latinto_string_utf8	xStringIO)http_client)cupsz/cdm/oauth2/v1/tokenz/cdm/faxModem/v1/configurationz%s %s HTTP/1.1
Content-Type: application/json
User-Agent: hplip
Accept: */*
Cache-Control: no-cache
Host:%s
Connection: keep-alive
Content-Length: %s

z%s %s HTTP/1.1
Content-Type: application/json
User-Agent: hplip
Accept: */*
Cache-Control: no-cache
Host:%s
Connection: keep-alive
Content-Length: %s
Authorization: Bearer %s

i           i  i  c                       e Zd ZdddedfdZd Zd ZddZd ZddZ	dd	Z
d
 Zd Z eee      Zd Zd Z eee      Zd Z	 	 	 ddZy)CDMFaxDeviceNFc                     t         j                  | |||||       d| _        d | _        d | _        || _        || _        | j                  dk(  r| j                  | _	        y d| _	        y )N net	localhost)
	FaxDevice__init__tokensend_fax_threadupload_log_thread
device_uriprinter_namebushost	http_host)selfr#   r$   callbackfax_typedisable_dbuss         /usr/share/hplip/fax/cdmfax.pyr   zCDMFaxDevice.__init__R   sg    
 	4'#X'	) 
#!%$(88u!YYDN(DN    c                 2    | j                   d   t        k(  ryy)Nzwifi-configTF)mqWIFI_CONFIG_CDM_AUTH)r(   s    r,   isAuthRequiredzCDMFaxDevice.isAuthRequirede   s    77=!%99r-   c                     t        j                         }	 | j                  | j                  |d       | j                          y # t        $ r t
        j                  d       Y 1w xY w# | j                          w xY w)Nr   zUnable to read LEDM Channel)ior   readLEDMAllDatareadEWS_LEDMErrorlogdebug	closeLEDM)r(   responses     r,   __flushThePortzCDMFaxDevice.__flushThePortk   sa    ::<	  !2!2Ha@ NN  	5II34	5 NNs#   A A%"A( $A%%A( (A:c                    |d k(  rt        |      }nt        |      }|dk(  r2| j                  t        ||| j                  || j                  fz         n&| j                  t
        ||| j                  |fz         |d k7  r| j                  |       t               }	 | j                  | j                  |       |j                  d       t        j                  |      }|j                          |j                         }|j                         }	||	fS # t        $ r( | j!                          t"        j%                  d       Y y w xY w)NTr   zUnable to read EWS_LEDM Channel)lenwriteEWS_LEDMREQ_WITH_TOKENr'   r    REQ_NO_TOKENr   readLEDMDatar5   seekr   HTTPResponsebegingetcodereadr6   closeEWS_LEDMr7   r8   )
r(   request_typeurl	data_json	WithToken
contentLenreplyr:   respcodedatas
             r,   __usb_reqeustzCDMFaxDevice.__usb_reqeustw   s$   SJYJ~ ,c4>>:tzzZ [ \ | ,c4>>:N O P y)
	9d//7JJqM"//6HNN'')H==?DT>! 	9 II78	9s   A5D .EEc                 z   i }d|d<   ||d<   ||d<   t        j                  |      }| j                  dt        |      \  }}|t        k(  st
        j                  d|z         |dfS t        j                  |j                               }t        j                  t        j                  |            }|d   | _        |S )Npassword
grant_typeusernamePOSTz?Request Failed With Response Code %d, enter correct credentialsr   access_token)jsondumps_CDMFaxDevice__do_requestCDM_AUTH_REQHTTP_OKr7   r8   loadsstripastliteral_evalr    )r(   unamerR   rO   rN   s        r,   getCDMTokenzCDMFaxDevice.getCDMToken   s     '\ Z#Zzz$**6<F$7"IIQT\\^R<::djjl+D##DJJt$45Dn-DJOr-   c                     	 | j                   dk(  r| j                  ||||      \  }}||fS | j                  ||||      \  }}||fS #  t        j	                  d       Y yxY w)Nr   zIO Errori  r   )r%   _CDMFaxDevice__network_reqeust_CDMFaxDevice__usb_reqeustr7   r8   )r(   rH   rI   rO   rK   rN   s         r,   __do_requestzCDMFaxDevice.__do_request   sw    
	"xx5 !%!7!7 #tY"8$~%!%!3!3 #tY"8$~%	"IIj!s   )A A A c                    dd l }dd l}ddddd}| j                  |d<   |dk(  rd	| j                  z  |d
<   	 |j                  j                  | j                  |j                               }|d k7  r|j                  ||||       n|j                  |||       |j                         }	|	j                  }
|	j                         }|
|fS #  t        j                  d       Y yxY w)Nr   zapplication/jsonhplipzno-cachez
keep-alive)zContent-Typez
User-AgentzCache-Control
ConnectionHostTz	Bearer %sAuthorization)context)methodrI   bodyheaders)rm   rI   ro   z!Error while connecting the devicerc   )http.clientsslr&   r    clientHTTPSConnection_create_unverified_contextrequestr7   r8   getresponser   rF   )r(   rH   rI   rO   rK   httprq   header
connectionr:   rN   s              r,   __network_reqeustzCDMFaxDevice.__network_reqeust   s    "4G#-\Kv&1DJJ&>F?#	44		3#A#A#C 5 EJt|"",'*v # G "",'*F # < ))+??}}~	II9:s   A$C C$c                    d}i }i }t        |      |d<   ||d<   t        j                  |      }t        j	                  |       	 | j                  dt        |d      \  }}d}|S #  t        j	                  d       Y |S xY w)NF	faxNumberanalogFaxSetupPATCHTrK   zSetPhoneNum response is )strrW   rX   r7   r8   rY   CDM_FAX_MODEM_CONF)r(   numrtnrO   
dataFaxNumrN   s         r,   setPhoneNumzCDMFaxDevice.setPhoneNum   s    
"%c(
;!+zz$		$	<!..+TT / CNHdC 
	<II0(;
s   A% %B c                     	 t        j                  | j                  | j                        }t        j                  |       |j                  d      j                  dd      S #  Y yxY w)Nr   zprinter-fax-modem-numberztel:)cupsextgetFaxModemAttributesr#   r$   r7   dbggetreplacer(   fax_modem_detailss     r,   getPhoneNumzCDMFaxDevice.getPhoneNum   s`    	 ' = =!2!2!4GG%& "%%&@AJJ6SUVV	s   ?A" "A&c                     d}i }i }t        |      |d<   ||d<   t        j                  |      }	 | j                  dt        |d      \  }}d}|S #  t
        j                  d       Y |S xY w)NFcompanyNamer}   r~   Tr   zsetStationName response is )r   rW   rX   rY   r   r7   r8   )r(   namer   rO   dataComNamerN   s         r,   setStationNamezCDMFaxDevice.setStationName   s    %(YM"!,zz$	?!..+TT / CNHdC 
	?II3X>
s   A A+c                     	 t        j                  | j                  | j                        }t        j                  |       |j                  d      S #  Y yxY w)Nr   zprinter-fax-modem-name)r   r   r#   r$   r7   r   r   r   s     r,   getStationNamezCDMFaxDevice.getStationName   sR    	 ' = =!2!2!4GG%& !$$%=>>	s   ?A Ac                 f    t        j                         }d|d   |d   |d   |d   |d   |d   fz  }y)	Nz%4d-%02d-%02dT%02d:%02d:%02dr   r               T)time	localtime)r(   tdate_bufs      r,   setDateAndTimezCDMFaxDevice.setDateAndTime  sE    NN1aD!A$!adAaD!A$50 0r-   c
                     | j                         sTt        | | j                  | j                  | j                  ||||||||	      | _        | j
                  j                          yy)NTF)isSendFaxActiveCDMFaxSendThreadservicer#   r$   r!   start)
r(   phone_num_listfax_file_listcover_messagecover_re
cover_funcpreserve_formattingr$   update_queueevent_queues
             r,   	sendFaxeszCDMFaxDevice.sendFaxes  sd     ##%#3D$,,Y]YjYj4BM4A8Z4G4@4?$AD    &&(r-   )NF)r   r   NFr   NN)__name__
__module____qualname__FAX_TYPE_NONEr   r1   _CDMFaxDevice__flushThePortre   ra   rY   rd   r   r   property	phone_numr   r   station_namer   r    r-   r,   r   r   P   s{    "&T'#)&	9<&6 W k2I ? NN;L SUKM15r-   r   c                       e Zd Z	 	 ddZd Zy)r   Nc                     t         j                  | |||||||	|
|||       || _        || _        |j                  dk(  rd| j
                  j                  z  | _        nd| _        t        |       y )Nr   z%s:8080zlocalhost:8080)	FaxSendThreadr   r#   r$   r%   devr&   r'   print)r(   r   r   r#   r$   r   r   r   r   r   r   r   r   s                r,   r   zCDMFaxSendThread.__init__#  sn     	tS'>=,h
DW+\;	H %(77e&6DN-DNmr-   c                    d}d}d}d}d}d}d}d}d	}	d
}
d}d}
d}d}d}| j                         }|}t        }g | _        d}||k7  r| j                         r|}t        j                  d|z         ||k(  r1t        j                  d       | j                  t        ddf       |}n/||k(  r1t        j                  d       | j                  t        ddf       |}n||k(  r-t        j                  d       | j                  |ddf       |}n||k(  r1t        j                  d       | j                  t        ddf       |}n||k(  rt        j                  ddz         	 | j                  j                  | _        t        j                  d| j                  z         | j                  j                  | _        t        j                  d| j                  z         |}n||k(  r+t        j                  ddz         | j#                  |      }n||k(  rJt        j                  ddz         | j                  d d  | _        t'        | j(                        | _        |}nv||k(  rmt        j                  ddz         |	}	 t-        |      }t        j                  d|d   z         | j                  t.        d|d   f       | j                  d d  }n||	k(  r+t        j                  d!dz         | j3                        }n||
k(  rJt        j                  d"dz         | j5                  |      }t        j                  | j6                         n||k(  r+t        j                  d#dz         | j5                  |      }nU||k(  rt        j                  d$dz         |}d}d}d}d}d}d}d}d}d	}d
}d%}d&} |}!|!|k7  r| j                         rt        j                  d'       |}!t        j                  d(||!fz         |!|k(  rd&} |}!|}n=|!|k(  rt        j                  d)       d&} |}!|}n|!|k(  rt        j                  d*       d&} |}!|}n|!|k(  rt        j                  d+       d&} |}!|}n|!|k(  rt        j                  d,dz         |}!n|!|k(  r>d-   }"t9        j:                  | j<                  | j>                  | j6                  |"      }#|}!nv|!|k(  r|}!nn|!|k(  r5t        j                  d.dz         #dkD  rtA        jB                  |#       |}!n4|!|k(  r/t        j                  d/dz         t        j                  d0       |}!|!|k7  rn||k(  r}t        j                  d1dz         | jD                  rWt        j                  d2| j6                  z         	 tG        jH                  | j6                         t        j                  d3       |}||k7  ry y # t         $ r t        j                  d       |}Y %w xY w# t0        $ r |}t        j                  d        Y w xY w# tJ        $ r t        j                  d4       Y yw xY w)5Nr   
            (   2   <   F   P   Z   d   n   x      zSTATE=(%d, 0, 0)zAborted by user.r   zSuccess.zError, aborting.zDevice busy, aborting.z%s State: Get sender infoz********************zSender name=%szSender fax=%szCDM ipp request 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STATE=(%d, %d, 0)zFax send error.zFax device busy.zFax send success.z%s State: Open devicefaxz%s State: CancelJobz%s State: Close sessionzClosing session...z%s State: CleanupzRemoving merged file: %sRemovedz	Not found)&next_recipient_genSTATUS_ERRORrendered_file_listcheck_for_cancelr7   r8   errorwrite_queueSTATUS_IDLESTATUS_COMPLETEDSTATUS_BUSYr   r   sender_namer   
sender_faxr6   
pre_renderrecipient_file_listr=   r   job_total_pagesnextSTATUS_SENDING_TO_RECIPIENTStopIteration
cover_pagemerge_cdm_fax_filesfr   sendFaxOutJobr#   r$   r   	cancelJobremove_temp_fileosremoveOSError)$r(   
STATE_DONESTATE_ABORTEDSTATE_SUCCESS
STATE_BUSYSTATE_READ_SENDER_INFOSTATE_PRERENDERSTATE_COUNT_PAGESSTATE_NEXT_RECIPIENTSTATE_COVER_PAGESTATE_SINGLE_FILESTATE_MERGE_FILESSTATE_SEND_FAXSTATE_CLEANUPSTATE_ERRORnext_recipientstateerror_state	num_tries	recipientr   FAX_SEND_STATE_DONEFAX_SEND_STATE_ABORTFAX_SEND_STATE_ERRORFAX_SEND_STATE_BUSYFAX_SEND_STATE_SUCCESSFAX_SEND_STATE_DEVICE_OPENFAX_SEND_STATE_BEGINJOBFAX_SEND_STATE_DOWNLOADPAGESFAX_SEND_STATE_ENDJOBFAX_SEND_STATE_CANCELJOBFAX_SEND_STATE_CLOSE_SESSIONmonitor_statefax_send_statefaxnumaJobIDs$                                       r,   runzCDMFaxSendThread.run3  s5   

!#!002&""$	z!$$&%II(501 %		,-  +q"!56% -'		*%  "2Ar!:;% +%		,-  +q"!56% *$		23  +q"!56% 00		5@A('+xx'<'<D$II.1A1AAB&*hh&8&8DOIIo?@ (/)		=HI(9:++		:fEF+/+B+B1+E('*4+=+='>$,..		4?@( $^ 4III;i>OOP$$&A1iPVFW%XY '+&=&=a&@#**		76BC	2++		8FCD00@		$&&! ++		:fEF00@.(		.&9:,&'#')$')$&(#)+&-/**,'/1,(*%+-(/2, %!;$(;;,,.		"56)=II1^^4TTU%)==(-)A -'+??		"34(-)E +'+>>		"45(-)E *'+AA		"56(-)E 4'+EE		"9V"DE)@'+BB!*5!1!(!6!6ttGXGXY]Y_Y_`f!g)>'+@@)?'+CC		"76"BC!A:>>&1)E'+GG		";v"FG		"67)<k %(;;n -'		-89((II8466AB/		$&&)		), #U z!L  (II78'E(0 % )EII/0R # /		+./s8   "A:W ?AX 4X,  XX X)(X),YY)r   r   NFNN)r   r   r   r   r
  r   r-   r,   r   r   "  s    UZ04 C#r-   r   )8
__future__r   pickler   r   sysr   r   base.sixextr   r   r   re	threadingstructxml.parsers.expatparsersexpatstatbase.g
base.codesbaser	   r
   r   r   r   r   r3   binasciixmlstringrW   r^   r   r   r   r   base.sixext.movesr   prntr   rZ   r   r@   r?   HTTP_UNAUTHORIZEDr[   HTTP_ACCEPTEDHTTP_CREATED
HTTP_ERRORHTTP_SERVICE_UNAVALIABLEr   r   r   r   r   r-   r,   <module>r#     s   ,      	  : : 	    ! !    3 3 %   	     
  b b )  
 
   &5  H f 

 M9 MdT#} T#r-   