
    =	ḟ                    <   d dl 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
mZ ddlmZ d dlZd dlZd dlZddl ddl ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ dd
lmZ d dlmZmZmZ ddlmZmZmZmZ ddl ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&  ejN                  dejP                        Z)dZ*dZ+	  ejX                  d      Z-	 e-j\                  Z/da7da8	 d dl9Z9d dl9m:Z:m;Z; da7d dl=Z= e=j|                  de?       g dZ@dZAdZBdZCdZDdZE ejN                  d ej                        ZG ejN                  d!ej                        ZH ejN                  d"ej                        ZI ejN                  d#ej                        ZJ ej                         ZL ejN                  d$ej                        ZM ejN                  d%ej                        ZN ejN                  d&ej                        ZO G d' d(eP      ZQ G d) d*eQ      ZR G d+ d,eQ      ZSdvd-ZTdwd.ZUd/ ZVd0 ZWe@d1d2eCd3d4dfd5ZXd6geCfd7ZYd6geCfd8ZZd6geCfd9Z[dxd:Z\d; Z]dyd<Z^d= Z_d> Z`d? Zad@ ZbdydAZcdB Zdi eedCefdDegdDehdEeidFejdGekdHeldIemdJendKeodLepdMeqdNerdOesdPetdQeudRevdSewdMexdTeydUezdVe{dWe|dXiZ}e~dCedYedZed[ed\ed]ed^ed_ed`edaedbiZedceddedeedfedgedhediedbiZedjedjedkiZi Z G dl dmeP      Z G dn doej2                        Z G dp dqej2                        Z G dr dsej2                        Z G dt duej2                        Zy# e0$ r dZ/Y hw xY w# e1$ r8  ejd                  d      s"e3ji                  d       e5jm                  d       Y w xY w# e1$ r e3jy                  d       Y w xY w)z    N   )urllib_requesturllib_parseurllib_error)BytesIO)http_client)*)utils)services)os_utils)status)pml)pclldlcups)modelsmdnsslpavahi)PY3to_bytes_utf8
to_unicodeto_string_latinto_string_utf8	xStringIOzHTTP/\d.\d\s(\d+)   i  hpmudext    HPLIP_BUILDz>HPMUDEXT could not be loaded. Please check HPLIP installation.F)lowlevel
SessionBusTzpython-dbus not installed.ignore)usbparr   )r$   netr   r#   )r$   r%   r#   )printscanfaxpcardcopy)hpz(.*):/(.*?)/(\S*?)\?(?:serial=(\S*)|device=(\S*)|ip=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^&]*)|zc=(\S+)|hostname=(\S+))(?:&port=(\d))?z6/(.*?)/(\S*?)\?(?:serial=(\S*)|device=(\S*))&loc=(\S*)z$direct (.*?) "(.*?)" "(.*?)" "(.*?)"zCTR:\d*\s.*;z]\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\bz/dev/.+z(\d+):(\d+)c                   ^    e Zd Zej                  dddfdZd Zd ZddZddZ	d Z
d	 Zd
 Zy)Eventr    c                 8   t        |      | _        t        |      | _        t        |      | _        t        |      | _        t        |      | _        t        |      | _        |rt        |      | _	        nt        j                         | _	        d| _        d| _        y )N80s80sI32sI80sfssisisd)r   
device_uriprinter_nameint
event_codeusernamejob_idtitlefloattimedatetimepipe_fmtdbus_fmt)selfr2   r3   r5   r6   r7   r8   r:   s           /usr/share/hplip/base/device.py__init__zEvent.__init__j   st     %Z0&|4j/"8,&k&
!(ODM IIKDM)!    c                    t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d| j
                  z         t         j                  d| j                  z         t         j                  d| j                  z         t         j                  d| j                  z         y )Nz    device_uri=%sz    printer_name=%sz    event_code=%dz    username=%sz    job_id=%dz    title=%sz    timedate=%s)	logdebugr2   r3   r5   r6   r7   r8   r:   r>   s    r?   rD   zEvent.debug~   s    		%78		'$*;*;;<		%78		#dmm34		/DKK/0		.4::-.		#dmm34rA   c                 R   t        j                  | j                  | j                  j	                  d      | j
                  j	                  d      | j                  | j                  j	                  d      | j                  | j                  j	                  d      | j                        S )Nutf-8)structpackr<   r2   encoder3   r5   r6   r7   r8   r:   rE   s    r?   pack_for_pipezEvent.pack_for_pipe   su    {{4==$//*@*@*I4K\K\KcKcdkKl!5!5g!>TZZM^M^_fMg 	rA   c                     |Kt         j                  d| j                  ||fz         	 t        j                  || j                                yy # t        $ r t         j                  d       Y yw xY w)Nz'Sending event %d to %s (via pipe %d)...TzFailed.F)rC   rD   r5   oswriterK   OSError)r>   fd	recipients      r?   send_via_pipezEvent.send_via_pipe   sj    >II?4??T]_aBbbcT//12	 
  		)$s   $A A0/A0c                    |~t         rwt        j                  d| j                  |fz         t	        j
                  d|d      } |j                  | j                         d| j                  i |j                  |       y y y )Nz$Sending event %d to %s (via dbus).../r-   	signature)

dbus_availrC   rD   r5   r    SignalMessageappendas_tupler=   send_message)r>   session_bus	interfacemsgs       r?   send_via_dbuszEvent.send_via_dbus   sm    "zII<QZ?[[\((iACCJJAA$$S)	 (2"rA   c                 .    t        | j                          S N)r-   rY   rE   s    r?   r*   z
Event.copy   s    dmmo&&rA   c                 (    d| j                         z  S )Nz+<Event('%s', '%s', %d, '%s', %d, '%s', %f)>rY   rE   s    r?   __str__zEvent.__str__   s    <t}}NNrA   c                     | j                   | j                  | j                  | j                  | j                  | j
                  | j                  fS r`   )r2   r3   r5   r6   r7   r8   r:   rE   s    r?   rY   zEvent.as_tuple   s<    !2!2DOO]]DKKT]]D 	DrA   N)hpssd)com.hplip.StatusService)__name__
__module____qualname__propr6   r@   rD   rK   rR   r^   r*   rc   rY    rA   r?   r-   r-   i   s:    --"(5*'ODrA   r-   c                   $    e Zd Zd Zd Zd Zd Zy)FaxEventc                 v    t        j                  | g|j                           || _        d| _        d| _        y )N80s80sI32sI80sfsssisisfs)r-   r@   rY   	temp_filer<   r=   )r>   rq   events      r?   r@   zFaxEvent.__init__   s/    t/enn./"*"rA   c                     t         j                  d       t        j                  |        t         j                  d| j                  z         y )NzFAX:z    temp_file=%s)rC   rD   r-   rq   rE   s    r?   rD   zFaxEvent.debug   s0    		&D		$t~~56rA   c                 (    d| j                         z  S )Nz4<FaxEvent('%s', '%s', %d, '%s', %d, '%s', %f, '%s')>rb   rE   s    r?   rc   zFaxEvent.__str__   s    EWWrA   c                     | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  fS r`   )r2   r3   r5   r6   r7   r8   r:   rq   rE   s    r?   rY   zFaxEvent.as_tuple   sA    !2!2DOO]]DKKT]]^^ 	rA   Nrg   rh   ri   r@   rD   rc   rY   rk   rA   r?   rm   rm      s    #7XrA   rm   c                   $    e Zd Zd Zd Zd Zd Zy)DeviceIOEventc                 v    t        j                  | g|j                           || _        d| _        d| _        y )N80s80sI32sI80sfIssisisfi)r-   r@   rY   bytes_writtenr<   r=   )r>   r|   rr   s      r?   r@   zDeviceIOEvent.__init__   s0    t/enn./**"rA   c                     t         j                  d       t        j                  |        t         j                  d| j                  z         y )NzDEVIO:z    bytes_written=%d)rC   rD   r-   r|   rE   s    r?   rD   zDeviceIOEvent.debug   s2    		(D		(4+=+==>rA   c                 (    d| j                         z  S )Nz9<DeviceIOEvent('%s', '%s', %d, '%s', %d, '%s', %f, '%d')>rb   rE   s    r?   rc   zDeviceIOEvent.__str__   s    JT]]_\\rA   c                     | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  fS r`   )r2   r3   r5   r6   r7   r8   r:   r|   rE   s    r?   rY   zDeviceIOEvent.as_tuple   sC    !2!2DOO]]DKKT]]! 	!rA   Nrv   rk   rA   r?   rx   rx      s    #?]!rA   rx   c                    d }d }t         j                  sdat        d d fS t        rt        st	        j
                         dk(  r t        j                  d       dat        d d fS 	 | t        j                         }nt        j                  |       }	 t        j                  d       |j                  dd      }d	at        ||fS # t        j                  j                  $ r]}t	        j
                         dk7  rt        j                  d|z         nt        j                  d|z         dat        d d fcY d }~S d }~ww xY w# t        j                  j                  $ r
}	 t	        j                  d
t        j                         n# t         $ r Y nw xY wt#        j$                  d      }|r!t        j&                  j)                  |d      }ngt        j&                  j)                  t         j*                  d      }t        j&                  j-                  |      st        j/                  d       Y d }~yt        j                  d|z         t	        j0                  t        j2                  |dd       t        j                  d       t5        j6                  d       d}	 	 t        j                  d|z         |j                  dd      }t        j                  d       d	an}# t        j                  j                  $ r\}t        j                  d       |dz  }|dkD  rt        j/                  d       Y d }~Y d }~yt5        j6                  d       Y d }~nd }~ww xY wY d }~d }~ww xY w)NFr   z#Not starting dbus: running as root.z*Unable to connect to dbus session bus. %s z=Unable to connect to dbus session bus (running as root?). %s z1Connecting to com.hplip.StatusService (try #1)...rf   z/com/hplip/StatusServiceTz
hp-systrayz
systray.pyzUnable to start hp-systray)FNNz&Running hp-systray: %s --force-startupz--force-startupz"Waiting for hp-systray to start...r      z2Connecting to com.hplip.StatusService (try #%d)...z
Connected.z1Unable to connect to dbus. Is hp-systray running?   )rj   	gui_buildrV   dbus_disabledrM   getuidrC   rD   dbusr!   
exceptionsDBusExceptionerror
get_objectwaitpidWNOHANGrO   r
   whichpathjoinhome_direxistswarnspawnlpP_NOWAITr;   sleep)	dbus_loopservicer[   er   ts         r?   	init_dbusr      s   GK>>
4$&&-99;!II;<Jtd**	+ "oo/"ooi8-	IIIJ!,,-FHbcGJX w,,q ,, 	+yy{a		FqHI		YZ[[\Jtd**	+ ,, )	

2rzz*  ;;|,Dww||D,7ww||DMM<@ww~~d+HH9:-II>EFJJr{{D,8IJII:;JJqMAIIRUVVW)445NPjkG IIl+!%J 44 "IIQRFA1u!TU11JJqMM" $ S)	s   $,C )E  D= AD82D=8D= M($FM#	FM#FBM#2A+M#*K M# M=4M1M#:MM#MM##M(c           
      
   d\  }}}d}t         j                  |       t        j                  d| z         t        j                  |       \  }}|t        j                  k(  r+|r)t        |      }t        j                  d|z         d}|}nt        j                  d       nt        j                  |       t        j                  |       }|j                  d      }	|j                  d      }
t        j                  d	|	d
|
d       t        j                  |	|
      \  }}|t        k(  r+|r)t        |      }t        j                  d|z         d}|}nt        j                  d       nt        j                  |       t        j                  d| z         t        j                  | |      \  }}|t        j                  k(  r+|r)t        |      }t        j                  d|z         d}|}n:t        j                  d       n#t        j                  d| z         t        |       dk  rt        j                  | |      \  }}|t        j                  k(  r<|r:t        |      }|j!                  dd      }t        j                  d|z         d}|}nt        j                  d| z         t        j                  | |      \  }}|t        j                  k(  r<|r:t        |      }|j!                  dd      }t        j                  d|z         d}|}nt        j                  d       |sPt        j                  d| z         t#        ddg      }|D ]$  }t        j                  |       	 t%        |      \	  }}}}}}}}}|dk(  rt)        |      }t        j+                  ||j-                  dt        j.                              \  }}|t        j                  k(  rHt        j1                  |      \  }}t3        |      j-                  dd      }t        j5                  |       |j7                         | j7                         k(  rt        j                  d|z         d}|} nt        j                  d       ' |ry	 t)        |      }|j-                  dt8              t8        kD  rI|j-                  dd      r|j!                  dd      }|j-                  dd      r|j!                  dd      }nd\  }}}nd!\  }}|rt>        jA                  d"d#|       |||fS # t&        $ r Y w xY w# t&        $ r2}t        j;                  d |j<                  z         d\  }}}Y d }~dd }~ww xY w)$N)r.   r.   r.   FzTrying parallel with %sz	Found: %sT
Not found.r   r   zTrying USB with bus=z dev=z...zTrying IP address %szTrying ZC hostname %s   zip=z	hostname=zADevice not found using mDNS hostname. Trying with DNS hostname %szTrying serial number %sr#   r$   busio-modeSNr.   support-type	scan-typer   hp:hpaio:fax-typehpfax:z	Error: %sr.   r.   	last_usedr2   )!dev_patsearchrC   rD   r   make_par_uri
HPMUD_R_OKr   usb_patgroupmake_usb_uriERROR_SUCCESSip_patmake_net_urilenmake_zc_urireplaceprobeDevicesparseDeviceURIErrorqueryModelByURIopen_devicegetHPMUD_UNI_MODEget_device_idparseDeviceIDclose_devicelowerSUPPORT_TYPE_NONEr   r]   	user_confset)paramportcups_urisane_urifax_urifoundresult_codeuri	match_obj
usb_bus_id
usb_dev_iddevicesdback_endis_hpr   modelserialdev_filehostzcmq	device_iddatar   scan_uris                             r?   makeURIr   6  s   ",HhE~~e(		+e34#007S(---# %CIIkC'(EHIIl#			*NN5)	__Q'
__Q'
		
JOP#00ZHS-'C %CIIkC'(EHIIl#	u		)		(501#00=S(---# %CIIkC'(EHIIl# 			)E12%[3'33E4@Kh111c$S)kk%4		++, 		]`eef#+#8#8#E S("5"55#(-C++eK8CIIkC/0 E"HIIl+		+e34E5>2 	(AIIaL"1% N%eVXtR
 e|$Q' ((BFF9h>U>U,VW 'Y ("5"55(0(>(>y(I%K*4044T2>F)))4||~.		+/*		,'7	(: 	9 *B
 vvn&78;LL66+q)'//x@H66*a(&..uh?G /9+(G #'k<:Xw&&[  2  	5IIkAEE)**4'Hh	5s*   2TT. 	T+*T+.	U)7(U$$U)c                 Z    t        j                  |       j                         } t        |    S r`   )r   normalizeModelNamer   	model_dat)r   s    r?   queryModelByModelr     s&    %%e,224EUrA   c           	      |    	 t        |       \	  }}}}}}}}}	t        |      S # t        $ r t        t              w xY wr`   )r   r   r   ERROR_INVALID_DEVICE_URI)
r2   r   r   r   r   r   r   r   r   r   s
             r?   r   r     sS    ( :&	-%eHdB
 !''  .,--.s   " ;
      r.   r   c                    di }}|r%	 t        j                  |t         j                        }	| D ]  }
t        j                  d|
z         |
t        vrt        j	                  d|
z         =|
dk(  r|dk(  r	 t        j                  ||      }n4|d	k(  r	 t        j                  ||      }n	 t        j                  ||      }|D ]  }t                ||   j                  d
d      }||   j                  dd      }||   j                  dd      }|dkD  sSt!        |      D ]+  }||   j                  d|dz   z  d      }|"|dk7  s(t#        |      }t%        j&                  |j                  dd            }t(        j+                  ||      \  }}|t(        j,                  k(  r|rt/        |      }n|dk(  r	d|d|}nd|||dz   fz  }d}t1        |      }|st        j                  d       d}nNt3        |j                  dt4                    t4        k(  rt        j                  d       d}n|dvrt7        ||      }|s$|||f||<   .  (|
dv r|
dk(  rt(        j8                  }nt(        j:                  }t(        j=                  |      \  }}|t(        j,                  k(  s|j?                         D ]!  }t@        jC                  |      }|jE                  d      xs d}|jE                  d      xs d}|jE                  d      xs d}|jE                  d      xs d} t        j                  |       	 tG        |      \	  }!}"}#}}$}%}&}'}d}|s|s|"st1        |      }|st        j                  d       d}nNt3        |j                  dt4                    t4        k(  rt        j                  d       d}n|dvrt7        ||      }|s||| f||<   $ |
d k(  stI        jJ                         }(tM        |(      }|(D ]  })|)jN                  }t        j                  |d!|)jP                         |dk7  s9	 tG        |      \	  }!}"}*}}$}%}&}'}|"sRd}t1        |      }|sd}t        j                  d       nNt3        |j                  dt4                    t4        k(  rt        j                  d       d}n|dvrt7        ||      }|s||df||<     i }+|D ]c  }|dz  }||   \  }}},d}|rD	jS                  |d#|d#|,d#|      }-|-&t        j                  |d#|d#|,d#|d$|d%
       d}|s\||   |+|<   e tU                |+S #  t        j	                  d       d}Y JxY w# t        $ r.}|t        _        t        j	                  d|z         t        d }~ww xY w# t        $ r.}|t        _        t        j	                  d|z         t        d }~ww xY w# t        $ r.}|t        _        t        j	                  d|z         t        d }~ww xY w# t        $ r Y uw xY w# t        $ r t        j                  d"|z         Y Nw xY w)&Nr   z{Invalid search pattern. Search uses standard regular expressions. For more info, see: http://www.amk.ca/python/howto/regex/r.   zProbing bus: %szInvalid bus: %sr%   r   z*An error occured during network probe.[%s]r   hnz	?UNKNOWN?num_devices	num_portsr   zdevice%d0MDLzhp:/net/z?ip=zhp:/net/%s?ip=%s&port=%dTr   Fr   Not supported.Nr&   z
print-type)r#   r$   r$   r      r   r   z: zUnrecognized URI: %s z: Does not match search 'z'.)+recompile
IGNORECASErC   r   rD   VALID_BUSESr   detectNetworkDevicesr   socketERROR_INTERNALr   r   update_spinnerr   ranger   r   r   r   r   r   r   r   r4   r   __checkFilterHPMUD_BUS_PARALLELHPMUD_BUS_USBprobe_devices
splitlines
direct_patmatchr   r   r   getPrintersr   r2   namer   cleanup_spinner).r   timeoutttlfilterr   
net_searchback_end_filterr   ret_devices
search_patbdetected_devicessocket_erroripr   num_devices_on_jdnum_ports_on_jdr   devr   r   r   r   r2   includer   bnr   xmmdldescdevidr   r   bbr   r   r   r   cups_printerspbsprobed_devicesdevid_or_hnr   s.                                                 r?   r   r     sa     !"K	FBMM:J
  TE		#a'(KII'!+,:U")'*'?'?W'M$
 w&)','A'A#w'O$)'+'@'@g'N$ ' &M %b)--dK@$4R$8$<$<]A$N!"22"6":":;"J$q( %o 6 M.r266zT!V7LcR?scz(5c(:I$*$=$=immES^>_$`E/7/D/DR/X,K*h.A.AAc-;C-@
#2a#7GLb1QJ1KuVX[_bc[cNe1eJ&*G!25!9B#% #		, 7*/!$RVVN<M%N!OSd!d #		*: ;*/!'/L!L*7*C&;@%:LJ 7?M&MP . Ez00++ ( 6 6r :Kh111* #BA"((+A''!**C''!**C771:+DGGAJ,"EIIcN!*3/ U%UFHdBPT
 #Gsu.u5!IIl3&+G 8I!JKO``II&67&+G#+HH&3FB&?G"03T5/AK,G#BJ &[ ,,.MM"A" E\\
		j!&&9:#!*:6 U%UFHdBPT ! "G*51B"'		,/RVVN4EFGK\\		"23"''DD"/";38%2DJ/=EmTEl N 3q"-c"2UK"))3{TW*XYI 		UT_adflmn"-c"2N33 W	II  T  UF  )#/FLIIJ<WX(()  )#/FLIIJ<WX(()  )#/FLIIJ<WX(()H ! ! !D ! !		"8:"EF !sw   $U 7U9V3,W-X'X7U69	V0)V++V03	W*<)W%%W*-	X$6)XX$'	X43X47!YYr+   c           
         i }t        j                         }t        j                  |       |D ]  }	 t	        |j
                        \	  }}}}}	}
}}}| dk(  s|| v sd| v s2|dk(  s8|s;|s>d}t        |      }|st        j                  d       d}nNt        |j                  dt                    t        k(  rt        j                  d       d}n|d	vrt        ||      }|sd| v r|j
                  j                  d
d      }n|j
                  }	 ||    ||   j                  |j                         	 |S # t        $ r Y w xY w# t        $ r |j                  g||<   Y 8w xY w)Nr	   hpaior+   Tr   Fr   r   r   r   r   )r   r  rC   rD   r   r2   r   r   r4   r   r   r   r   rX   r  KeyError)r  r  r   printersr  r   r   r   r   r   r   r   r   r   r  r   r   s                    r?   getSupportedCUPSDevicesr#    sm   G!HIIh %.	q||, JHeS%4T s"h/&A'H,<eG"5)B		,'RVVN,=>?CTT		*+<<'3o-,,UH=AA.AJ AJ%%aff-K%.N NE  		:   *"#&&GAJ*s#   D:E
:	EE
E'&E'c           
         g }t        j                         }|D ]  }	 t        |j                        \	  }}}}}	}
}}}| dk(  s|| v s-|s0|s3d}t        |      }|st        j                  d       d}nNt        |j                  dt                    t        k(  rt        j                  d       d}n|dvrt        ||      }|s|j                  |        |S # t        $ r Y w xY w)Nr	   Tr   Fr   r   r   )r   r  r   r2   r   r   rC   rD   r4   r   r   r   rX   )r  r  printer_listr"  r  r   r   r   r   r   r   r   r   r   r  r   s                   r?   getSupportedCUPSPrintersr&    s    L!H '	q||, JHeS%4T s"h/&AuQVG"5)B		,'RVVN,=>?CTT		*+<<'3##A&1'6 -  		s   C	C%$C%c                 X    t        | |      }|D cg c]  }|j                   c}S c c}w r`   )r&  r  )r  r  r"  r  s       r?   getSupportedCUPSPrinterNamesr(    s&    '@H$%qAFF%%%s   'c           
      (   | y d }t        j                         }|D ]d  }	 t        |j                        \	  }}}}}	}
}}}|s&|j
                  | k(  s6|r|j                  j                  dd      } |S |j                  } |S  |S # t        $ r Y tw xY w)Nr   r   )r   r  r   r2   r   r  r   )r3   scan_uri_flagr2   r"  r  r   r   r   r   r   r   r   r   r   s                 r?   getDeviceURIByPrinterNamer+    s    J!H 	q||, JHeS%4T QVV|+\\11%B
  \\
   		s   B	BBc                 F   i }| j                         j                  d      D cg c]  }|s|j                          }}|D ]:  }|j                  d      }	 |j                  |d   j                         |d          < |j                  dd       |j                  dd       d|v r|d   |d<   |d= d	|v r|d	   |d<   |d	= nd
|v r|d
   |d<   |d
= |d   j	                  d      rd|d<   |S c c}w # t        $ r& |j                  |d   j                         d        Y w xY w)N;:r   r   r   r.   r   MODELSERIALSERNX)stripsplit
setdefault
IndexError
startswith)r   r   yr  zs        r?   r   r     s.   	A%OO-33C8>qA>A> -GGCL	-LL1qt,- LLLL!|W:%gJ1}H+$hK	1F)$fIw#$H7 	?  	-LL1t,	-s   C,C,&C11,D D c                 &   | j                  d      \  }}	 t        t        j                  t	        |      d      xs d      }|r,t        t        j                  t	        |      d      xs d      }||fS # t
        $ r |rd\  }}nd\  }}Y ||fS w xY w)Nr   r   )r   r   )r   r.   )r4  r4   r
   xlstripstr
ValueError)	ctr_fieldconvert_to_intcountervalues       r?   parseDynamicCounterrB  "  s    __S)NGU	#emmCL#6=#>c%j#6=#>E E>  #!NGU"NGUE>#s   AA4 4BBc                 x   t         j                  |       }|'t        j                  d| z         t	        t
              |j                  d      j                         xs d}|dv }|j                  d      j                         xs d}|dvr't        j                  d| z         t	        t
              |j                  d      xs d}|j                  d      xs d}|j                  d	      xs d}|j                  d
      xs d}|j                  d      xs d}	|j                  d      xs d}
|
r|
}n|	r|	}|j                  d      xs d}|dk(  r	 t        |      }|dk(  rd}t        j                  | d|d|d|d|d|d|d|d|	d|       ||||||||	|f	S # t        t        f$ r d}Y Ww xY w)Nz Device URI %s is invalid/unknownr   r.   )r+   hpfaxr   r   )r#   r%   btfwr$   r   r   r            r%   r   z: back_end:z is_hp:z bus:z model:z serial:z
 dev_file:z host:z zc:z port:)pat_deviceurir   rC   rD   r   r   r   r   r4   r=  	TypeError)r2   r  r   r   r   r   r   r   r   r   hostnamer   s               r?   r   r   6  s   J'Ay		4zAB,--wwqz!'RH11E
''!*



"C
33		4zAB,--GGAJ"EWWQZ2FwwqzRH771:D	
	rBwwqzRH	771:?D
e|	t9D 19DII	Xuc5&(D"dT U UC$DHH I& 	D	s   F% %F98F9c                 
    | dv S )N)r$   r#   rF  rE  rk   r   s    r?   isLocalrN  a  s    ,,,rA   c                 
    | dv S )N)r%   rk   r   s    r?   	isNetworkrP  e  s    (?rA   c                 r    t        | j                               D ]  \  }}|	|\  }} |||   |      r y y)NFT)listitems)r  r   fr  opvals         r?   r   r   m  sC    V\\^$ 1=GBbeS>	 rA   c                 l    | D ]/  }|rt         }nt        }||vst        j                  d|z          y y)NzInvalid bus name: %sFT)r   VALID_BUSES_WO_CUPSrC   r   )r   
allow_cupsr  vbs       r?   validateBusListr[  w  s?     B$BB;II,a/0 rA   c                 \    | y| D ]$  }|t         vst        j                  d|z          y y)NTz Invalid term '%s' in filter listF)VALID_FILTERSrC   r   )r  rT  s     r?   validateFilterListr^    s;    ~ M!II81<=
 rA   invalidblackcmykcmcyanmagentayellow
photo_cyanphoto_magentaphoto_yellow
photo_gray
photo_bluekcmy_cmphoto_cyan_and_photo_magentalight_gray_and_photo_black
light_graymedium_graycyan_and_magentablack_and_yellowphoto_blackmatte_blackunspecifiedheadsupply	cartridgetoner	maint_kitadf_kitdrum_kittransfer_kitbatteryunknownokmisinstalled	incorrectfailedovertempchargingdischarginglowoutc                      e Zd Z	 	 dcdZdddZd Zd Zd Zded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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"d# Z#d$ Z$d% Z%d& Z&d' Z'd( Z(d) Z)d* Z*d+ Z+d, Z,d- Z-dfd.Z.d/ Z/dfd0Z0d1 Z1d2 Z2e3jh                  fd3Z5d4 Z6dgd6Z7de8jr                  dfd7Z:de8jr                  dfd8Z;de8jr                  dfd9Z<de8jr                  dfd:Z=de8jr                  d5fd;Z>de8jr                  d5fd<Z?de8jr                  d5fd=Z@de8jr                  d5fd>ZAde8jr                  d5fd?ZBde8jr                  d5fd@ZCde8jr                  d5fdAZDdhdBZEdhdCZFde8jr                  dfdDZGdE ZHdF ZIdG ZJdH ZKdI ZLdJ ZMdK ZNdL ZOdM ZPdN ZQdO ZRdP ZSdidQZTdR ZUdjdSZVdkdTZWdjdUZXdkdVZYdldWZZdX Z[dY Z\dZ Z]dmd[Z^dmd\Z_dmd]Z`dmd^Zadmd_Zbd` Zcda ZddndbZey)oDeviceNFc                 d   t         j                  d|z         t         j                  d|z         |a|s*|t               \  | _        | _        }nd| _        || _        nd| _        d | _        d | _        t        j                         }|i|g|D ]S  }|j                  j                         |j                         k(  s/|j                  }t         j                  d|z          n t        t              || _        || _        || _        t         | _        | j                  t        t              | j                  j%                  d      rt&        | _        nM| j                  j%                  d      rt(        | _        n&| j                  j%                  d      rt*        | _        	 t-        | j                        \	  | _        | _        | _        | _        | _        | _        | _        | _        | _        t         j                  d| j.                  | j0                  | j2                  | j4                  | j6                  | j8                  | j:                  | j>                  fz         tG        jH                  | j4                        | _%        tG        jL                  | j4                        | _        t         j                  d	| j4                  d
| jJ                         | j2                  dk(  r| j:                  | _'        nd| _'        i | _(        i | _)        d| _*        g | _+        i | _,        d| _-        d | _.        d| _/        d| _0        tb        | _!        te        | j2                        | _3        g | _4        d| _5        | jm                          | jj                  sIt         jo                  d| j4                  z         tp        | _9        | ju                  | jr                         nd| _5        | jP                  jw                  | j4                  | jJ                  d       tx        | _=        t|        | _?        t        | _A        | j                          | jP                  j                  dt              t        k7  rG| jR                  jw                  d| j                  j                  dd      j                  dd      i       | jP                  j                  dt              t        k7  rG| jR                  jw                  d| j                  j                  dd      j                  dd      i       | jR                  jw                  i d| j.                  d| j0                  d| j6                  d| j8                  d| j:                  d| j>                  d| jV                  d | j                  d!dd"dd#d$d%dd&dd'| j~                  d(| jz                  d)| j                  d*| j                  j                  dd      j                  dd             | j                  | j                  | j                  j                  dd      | j                  j                  dd      | j                  j                  dd      | j                  t        j                  d+| _J        y # t        $ r t@        | _!        t        tD              w xY w),NzDevice URI: %szPrinter: %sTFr   r   r   zPURI: backend=%s, is_hp=%s, bus=%s, model=%s, serial=%s, dev=%s, host=%s, port=%dzModel/UI model: rT   r%   	localhostdefault_printerr   r.   zUnsupported model: %s)r   zmodel-uir   zfax-urizhp:/zhpfax:/zhpaio:/r   zscan-urizback-endzis-hpr   zdev-filer   r   cups-printersstatus-codestatus-descdeviceidpanelr   panel-line1panel-line2device-stateerror-statez
device-urizcups-uri)URI
DEVICE_URISCAN_URISANE_URIFAX_URIPRINTERHOME)KrC   rD   r   r   rV   r   
last_eventr   r  r  r   r2   r   ERROR_DEVICE_NOT_FOUNDr3   callbackDEVICE_TYPE_UNKNOWNdevice_typer7  DEVICE_TYPE_PRINTERDEVICE_TYPE_SCANNERDEVICE_TYPE_FAXr   r   r   r   r   r   r   r   r   r   IO_STATE_NON_HPio_stater   r   normalizeModelUINamemodel_uir   	http_hostr   dqiconr  channelsr   r_valuesdeviceIDpanel_checkIO_STATE_HP_READYrN  is_localhist	supported
queryModelr   STATUS_DEVICE_UNSUPPORTED
error_code	sendEventupdateERROR_STATE_ERRORerror_stateDEVICE_STATE_NOT_FOUNDdevice_stateEVENT_ERROR_DEVICE_NOT_FOUNDstatus_codeupdateCUPSPrintersr   FAX_TYPE_NONEr   SCAN_TYPE_NONEfirst_cups_printerrj   r   device_vars)	r>   r2   r3   r   r  disable_dbusr[   r"  r  s	            r?   r@   zDevice.__init__  s    			"Z/0		-,./ %>Gk;"&&#DODL##%,": 466<<>\%7%7%99!"JII.;<	4 233$( .??".//??%%e,2D__''12D__''1.D	2 t/JDM4:txT]DItw	 			d]]DJJ$**dkk4==Z^ZcZceienenop 	q 33DJJ?..tzz:
		TZZGH88u!YYDN(DN
 %	))	~~II-

:;7DONN4??+!DN 	TZZ%)]]4 	5 -27!77;;z=1]BGGNNY)@)@)S)[)[\egp)qrs77;;{N3~EGGNNZ$//*A*A&)*T*\*\]fhq*rst   	
   !3!3 !1!1      !2!2 !1!1  !" !8!8F!K!S!ST]_e!f# 	*  ??????225(C??225(C??225(C22==_  	2+DM011	2s   #AZ $Z/c                 X   | j                   r_| j                  R	 t        j                  d|z         | j                  j	                  | j
                  ||t        j                  ||       y y y # t        j                  j                  $ r}t        j                  d       Y d }~y d }~ww xY w)NzSending event %d to hpssd...z dbus call to SendEvent() failed.)rV   r   rC   rD   	SendEventr2   rj   r6   r   r   r   )r>   r5   r3   r7   r8   r   s         r?   r  zDevice.sendEventd  s    ??t||7>		8:EF&&tjRVR_R_agino  8? ??00 >		<==>s   AA- -B)
B$$B)c                      y r`   rk   rE   s    r?   quitzDevice.quitm      rA   c                    | j                   st        | j                        | _         t        | j                         | _        | j                  r>| j                   D ].  }| j                   |   | j
                  |j                  dd      <   0 y y )N-_)r   r   r2   boolr  __dict__r   )r>   r  s     r?   r  zDevice.queryModelq  sh    ww%doo6DGdgg>>WW ?48GGAJaiiC01? rA   c                     t        |      S r`   )queryString)r>   	string_ids     r?   r  zDevice.queryString|  s    9%%rA   c                    | j                   rL| j                  t        t        fv r2| j                  }t        | _        t
        | _        t        | _        t        | _	        d| _
        || _        |rRt        j                  d| j                  z         | j                  j!                  dt"        j$                        | _        nQt        j                  d| j                  z         | j                  j!                  dt"        j$                        | _        t        j                  d| j&                  z         t"        j)                  | j                  | j&                        \  }| _
        |t"        j*                  k7  rt        | _        |t,        z   | _        | j1                  | j.                         |t"        j2                  k(  r#t        j5                  d| j                  z         n$t        j5                  d|| j                  fz         t7        | j                  d	t        t8        j:                  d
d	t=        j<                               | _        tA        tB              t        j                  d| j                  z         tD        | _        tF        | _        t        j                  d| jH                  | j                  | jJ                  | jL                  | jN                  | jP                  | jR                  | jT                  | jV                  f	z         |t
        k(  rtX        | _        ntZ        | _        | j]                          | j_                          | j                  S y y )Nr   z!Opening device: %s (for printing)r   z%Opening device: %s (not for printing)io-mfp-modezI/O mode=%dzDevice busy: %sz/Unable to communicate with device (code=%d): %sr.   r   zdevice-id=%dz_Opened device: %s (backend=%s, is_hp=%s, bus=%s, model=%s, dev=%s, serial=%s, host=%s, port=%d))0r  r  r  IO_STATE_HP_NOT_AVAILr  r  r  r  r  r  r   open_for_printingrC   rD   r2   r   r   r   r   io_moder   r   ERROR_CODE_BASEr  r  HPMUD_R_DEVICE_BUSYr   r-   rj   r6   r;   r  r   r  IO_STATE_HP_OPENERROR_STATE_CLEARr   r   r   r   r   r   r   r   DEVICE_STATE_JUST_FOUNDDEVICE_STATE_FOUNDgetDeviceIDgetSerialNumber)r>   r  prev_device_stater   s       r?   openzDevice.open  sc   >>dmm0ACX/YY $ 1 11DM 6D0D;DDN%6D" 		=OP#ww{{9h6M6MN		ADOOST#ww{{=(:Q:QRIImdll23$$T__dllC (K h111#4 "-o"=t/(">">>II/$//ABIIOS^`d`o`oRppq"'=Yq"diik#; 233 		.4>>9: 0#4 		{]]DOOTZZ4::]]DKKDIIGG H %(>>(?D%(:D%  "$$&~~%e Z>rA   c                    | j                   t        k(  rt        j                  d       t	        | j
                        dkD  r9t        | j
                  j                               D ]  }| j                  |        t        j                  | j                        }t        j                  d|z         | j
                  j                          t        | _         y y )NzClosing device...r   zResult-code = %d)r  r  rC   rD   r   r  rR  keys_Device__closeChannelr   r   r   clearr  )r>   cr   s      r?   closezDevice.close  s    ==,,II)*4==!A%dmm0023 +A''*+ #//?KII(;67MM!-DM -rA   c                    	 | j                   t        k(  r|t        j                  k(  r.| j                  s"| j                          | j                  d       nc|t        j                  k7  rP| j                  rD| j                          | j                  d       n"| j                  |t        j                  k(         | j                  d   t        k(  s|j                         }|| j                  vrdt        j                  d|z         t        j                  | j                  |      \  }}|| j                  |<   t        j                  d|z         |S | j                  |   S y#  t        j                  d       Y yxY w)NTFzunable to open channelr   r   zOpening %s channel...zchannel-id=%d)r  r  r   HPMUD_S_PRINT_CHANNELr  r  r  rC   r   r   IO_MODE_UNIupperr  rD   open_channelr   )r>   service_namer   
channel_ids       r?   __openChannelzDevice.__openChannel  s)   	}} 008#A#AA$J`J`JJLIIdO!X%C%CCH^H^JJLIIe$		,(*H*HHI wwy![0'--/L4==0		1L@A*2*?*?P\*]'Z.8l+		/J67!!}}\22#	II./s   B7E! !E:c                 $    | j                  |      S r`   )_Device__openChannelr>   r  s     r?   openChannelzDevice.openChannel  s    !!,//rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   	openPrintzDevice.openPrint  s    !!("@"@AArA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_FAX_SEND_CHANNELrE   s    r?   openFaxzDevice.openFax      !!("C"CDDrA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_MEMORY_CARD_CHANNELrE   s    r?   	openPCardzDevice.openPCard      !!("F"FGGrA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_EWS_CHANNELrE   s    r?   openEWSzDevice.openEWS      !!(">">??rA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_EWS_LEDM_CHANNELrE   s    r?   openEWS_LEDMzDevice.openEWS_LEDM  r  rA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_LEDM_SCANrE   s    r?   openLEDMzDevice.openLEDM  s    !!("<"<==rA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_MARVELL_EWS_CHANNELrE   s    r?   openMarvell_EWSzDevice.openMarvell_EWS  r  rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   
closePrintzDevice.closePrint  s    ""8#A#ABBrA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   
closePCardzDevice.closePCard       ""8#G#GHHrA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   closeFaxzDevice.closeFax      ""8#D#DEErA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_PML_CHANNELrE   s    r?   openPMLzDevice.openPML  r   rA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_WIFI_CHANNELrE   s    r?   openWifiConfigzDevice.openWifiConfig	  s    !!("?"?@@rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   closePMLzDevice.closePML      ""8#?#?@@rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   closeEWSzDevice.closeEWS  r  rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   closeEWS_LEDMzDevice.closeEWS_LEDM  r  rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   	closeLEDMzDevice.closeLEDM  s    ""8#=#=>>rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   closeMarvell_EWSzDevice.closeMarvell_EWS  r  rA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_CONFIG_UPLOAD_CHANNELrE   s    r?   openCfgUploadzDevice.openCfgUpload  s    !!("H"HIIrA   c                 @    | j                  t        j                        S r`   )r  r   r$  rE   s    r?   closeCfgUploadzDevice.closeCfgUpload  s    ""8#I#IJJrA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_CONFIG_DOWNLOAD_CHANNELrE   s    r?   openCfgDownloadzDevice.openCfgDownload!  s    !!("J"JKKrA   c                 @    | j                  t        j                        S r`   )r  r   r)  rE   s    r?   closeCfgDownloadzDevice.closeCfgDownload$  s    ""8#K#KLLrA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_SOAP_FAXrE   s    r?   openSoapFaxzDevice.openSoapFax'  s    !!(";";<<rA   c                 @    | j                  t        j                        S r`   )r  r   HPMUD_S_MARVELL_FAX_CHANNELrE   s    r?   openMarvellFaxzDevice.openMarvellFax*  r  rA   c                 @    | j                  t        j                        S r`   )r  r   r.  rE   s    r?   closeSoapFaxzDevice.closeSoapFax-  s    ""8#<#<==rA   c                 @    | j                  t        j                        S r`   )r  r   r1  rE   s    r?   closeMarvellFaxzDevice.closeMarvellFax0  r  rA   c                 @    | j                  t        j                        S r`   )r  r   r  rE   s    r?   closeWifiConfigzDevice.closeWifiConfig3  s    ""8#@#@AArA   c                    | j                   t        k(  rr|j                         }|| j                  v rSt        j                  d|z         t        j                  | j                  | j                  |         }| j                  |= y y y )NzClosing %s channel...)	r  r  r  r  rC   rD   r   close_channelr   )r>   r  r   s      r?   __closeChannelzDevice.__closeChannel6  su    ==,,'--/Lt}},		1L@A&44T^^MM,/1 MM,/ -	 -rA   c                 $    | j                  |      S r`   )r  r  s     r?   closeChannelzDevice.closeChannelE  s    ""<00rA   c                 P   d}d| _         i | _        | j                  t        k7  r	 | j	                          d}t
        j                  | j                        \  }}|t
        j                  k(  r|| _         t        |      | _        |r| j                          | j                  S #  Y yxY w)NFr.   r   T)raw_deviceIDr  r  r  r  r   r   r   r   r   r  )r>   needs_closer   r   s       r?   r  zDevice.getDeviceIDI  s    ==,,yy{ ;$224>>BT(--- $D)$/DMJJL}}s   B! !B%c                    | j                   ry 	 | j                  d   | _         | j                   ry | j                  j	                  dt
              t
        k7  r9	 	 | j                  t        j                        \  }| _         | j                          | j                   d| _         y y # t        $ r Y w xY w# t        $ r
 d| _         Y Fw xY w# | j                          w xY w)Nr   status-typer.   )r   r  r!  r   r   STATUS_TYPE_NONEgetPMLr   OID_SERIAL_NUMBERr   r  )r>   r  s     r?   r  zDevice.getSerialNumbera  s    ;;	---DK {{77;;}&67;KK %.2kk#:O:O.P+J ;;DK #  		  %"$DK% s5   B% 'B4 %	B10B14CC
 CC
 
Cc                      y r`   rk   rE   s    r?   getThreeBitStatuszDevice.getThreeBitStatus|  r  rA   c                 r    | j                          t        j                  t        | j                              S r`   )r  r   parseStatusr   r?  rE   s    r?   getStatusFromDeviceIDzDevice.getStatusFromDeviceID  s*    !!-0A0A"BCCrA   c                     t        |      }dj                  ddt        |      z
  z  |g      }|d d |dd  }}t        |      }||||f| _        ||||fS )Nr.   r   	   r   )r<  r   r   r4   r  )r>   r_valuer_value_strrgrrs        r?   __parseRValueszDevice.__parseRValues  sj    'lggsAK(8$89;GHRa+ab/Bb'b"4R++rA   c                    d\  }}}}|dkD  r)|t         k7  r| j                  u| j                  r0	 t        | j                  j                  | j                  d            }|dk7  r4t        j                  d|z         | j                  |      \  }}}}||||fS | j                  |t        k(  r| j                  r|t        k7  r	 	 | j!                  d      }|ct        j                  d|z         | j                  |      \  }}}}| j                  r@	 | j                  j#                  | j                  d|       nt        j%                  d	       d}| j)                          n|t        k(  r|t*        k(  r| j                  r	|t        k(  r	 | j-                  t.        j0                        \  }	}|ct        j                  d|z         | j                  |      \  }}}}| j                  r+	 | j                  j#                  | j                  d|       nd}| j3                          n| j                  \  }}}}||||fS # t        j                  j                  $ r"}t        j                  d       d}Y d }~d }~ww xY w# t        j                  j                  $ r }t        j                  d       Y d }~dd }~ww xY w# t&        $ r t        j%                  d
       d}Y w xY w# | j)                          w xY w# t        j                  j                  $ r }t        j                  d       Y d }~d }~ww xY w# | j3                          w xY w)Nr   	000000000000000000r   rM  z(dbus call to GetCachedIntValue() failed.r   z
r_value=%d   z(dbus call to SetCachedIntValue() failed.z%Error attempting to read r-value (2).z%Error attempting to read r-value (1).)STATUS_DYNAMIC_COUNTERS_NONEr  rV   r4   r   GetCachedIntValuer2   r   r   r   rC   rD   _Device__parseRValuesSTATUS_TYPE_Sr   STATUS_DYNAMIC_COUNTERS_PML_SNMPgetDynamicCounterSetCachedIntValuer   r   r  STATUS_DYNAMIC_COUNTERS_PCLrD  r   OID_R_SETTINGr  )
r>   r_typestatus_typedynamic_countersrM  rN  rO  rP  r   r   s
             r?   
getRValueszDevice.getRValues  s   'F$b"A: <<}}$??%"%dll&D&DT__V_&`"a
 b=IIlW45373F3Fw3O0G["b"KR77}}$=0MM$(HH*(&*&<&<S&AG&2 #		,*@ A?C?R?RSZ?[ <b"#'??%^(,(F(FtXacj(k !$		*Q R*+
 ) "m3&*EE--&*JJ(/3{{3;L;L/M,W".IIlW&<=;?;N;Nw;W8G["b#!Z$(LL$B$B4??T]_f$g
 '(G  04}},b"R++E  ??88 %		"LM"$%6 ,0??+H+H %^(+		2\(](]%^
  % (II&MN&'G( )$ (,'D'D !Z$'II.X$Y$Y!Z s   /H= AJ? 'I? ;J? AL; +'K; L; =I<I77I<?J<J71J? 7J<<J? ? K#K& "K##K& &K8;L8L3-L; 3L88L; ;Mc                    | j                   j                  dt              }t        | _        |t        k7  r| j
                  t        k7  r| j                  t        t        fv r	 | j                          | j+                  | j                        }| j,                  j/                  | j0                  | j2                  | j                  || j4                  ddd| j
                  | j6                  d
       t        j9                  d       t;        j<                  |       \  }}|rt>        | _        n|rt@        | _        tB        j                  | j                  tD              | _        | j                  | _#        | jI                  | jF                         	 | j,                  j/                  | j+                  | j                        | j6                  d       | jL                  r*tO        | j                   j                  dd            | _&        | j                   j                  d	tP              }| jL                  r|tR        tT        tV        fv r|t        k7  rvt        j9                  d
       	 t;        jX                  |       \  | _&        }	}
| j[                          | j,                  j/                  t]        | jL                        |	|
d       |s|r| j_                          | j,                  D ].  }| j,                  |   | j`                  |jc                  dd      <   0 t        | j                  d| j                  t"        j$                  ddt'        j&                               | _        t        j9                  | j,                         y # t        $ rm}t        j                  d       t        | j                  dt         t"        j$                  ddt'        j&                               | _        t        t               d }~ww xY w# tJ        t        f$ r& | j,                  j/                  dtD        d       Y \w xY w# | j[                          w xY w)Nr   Error getting device ID.r.   r   
r   r  r  r  r  r  r  r  r  r  zFax activity check...r  r  panel-check-typerB  Panel check...r  r  r  r  r  )2r   r   r  STATUS_PRINTER_IDLEr  r  r  	tech_typeTECH_TYPE_MONO_INKTECH_TYPE_COLOR_INKr  r   rC   r   r-   r2   ERROR_DEVICE_IO_ERRORrj   r6   r;   r  r  r  r  r   r  r?  r  rD   r   getFaxStatusSTATUS_FAX_TX_ACTIVESTATUS_FAX_RX_ACTIVESTATUS_TO_ERROR_STATE_MAPr  r  r  r!  r  r  rC  STATUS_TYPE_LJr[  STATUS_TYPE_VSTATUS
PanelCheckr  r4   r  r  r   )r>   quickreread_cups_printersr  r   status_desc	tx_active	rx_activerb  line1line2r   s               r?   
__queryFaxzDevice.__queryFax  sJ   ''++i5.k!  $::>>&8:M%NN;((* #..t/?/?@)-)-););)-)9)9)4)-):):)*)+)+)-):):)-)9)9   II-.#)#6#6t#< Iy#7 #7 8<<T=M=MO`aD"..DONN4??+#0@0@AQAQ0R040@0@ " # #'4F(J#K ''++m5EFK?RSS;&		*+$5;5F5Ft5L2D$eUMMOT-=-=)>1616 9 : 1'') 	;A04
DMM!))C,-	;  T5E5Et}}VWY[]a]f]f]hi		$''S ! ;		"<=*/EZ MM1b$))++? $$9::;R e$ #0A " ##$ MMOs8   "M= AO6 "P. =	O3A(O..O361P+*P+.Q c                 $   g | _         t        j                  d       t        j                         }|D ]  }| j
                  |j
                  k(  s| j                   j                  |j                         |j                  | _        | j                  t        k(  sg|j                  j                  d      d   | _         | j                  j                  d| j                   i       	 | j                   d   | _        y # t"        $ r
 d| _        Y y w xY w)Nz*Re-reading CUPS printer queue information.,r   r  r.   )r  rC   rD   r   r  r2   rX   r  stater  r  	makemodelr4  r   r  r  r  r6  )r>   r"  r  s      r?   r  zDevice.updateCUPSPrinters4  s    		>?##% 	;A!,,.""))!&&1WW
==O3!"!2!23!7!:DJ	; 	$*<*<=>	)&*&8&8&;D# 	)&(D#	)s   'C< <DDc                 D   | j                   sLi | _        t        | j                  dt        t
        j                  ddt        j                               | _        y | j                  t        k(  r| j                  ||      S | j                  j                  dd      }| j                  j                  dt              }| j                  j                  dt              }| j                  j                  dt               }| j                  j                  dt"              }| j                  j                  dt$              }| j                  j                  d	t$              }	t&        }
g }| j(                  t*        k7  
r<| j,                  t.        t0        fv r	 | j3                          | j=                  | j>                        }| j                  jA                  | jB                  | jD                  | j>                  || jF                  ddd| j(                  | jH                  d
       i }|t        k(  rt6        jK                  d       dt&        i}n|tL        tN        fv r6t6        jQ                  d       tS        jT                  | jV                        }nC|tX        tZ        fv r7t6        jQ                  d       tS        j\                  | | jV                        }n|t^        k(  r,t6        jQ                  d       tS        j`                  |       }n|tb        k(  r,t6        jQ                  d       tS        jd                  |       }n|tf        k(  r6t6        jQ                  d       tS        jh                  | jj                        }nU|tl        k(  r6t6        jQ                  d       tS        jh                  | jn                        }n|tp        k(  r@t6        jQ                  d       tS        jr                  | j                  | jt                        }n|tv        k(  rt6        jQ                  d       | jx                  r tS        jz                  | j|                        }nd| j~                  z  }| j                  r:t        j                  | j                        \  }}|t        j                  k(  rd|z  }tS        j                  |      }nt6        j9                  d|z         |r5|t$        k7  r,t6        jQ                  d       tS        j                  | ||       |rHt6        jQ                  |       | j                  jA                  |       	 |d    |d   }| j                  d= | j                  j                  dt&              }
t        j                  |
t              | _$        |
| _I        | j                  | j                         	 | j                  jA                  | j=                  |
      | jH                  d       d}|s0|t        k7  r&| j                  r*t        | j                  j                  dd            | _K        | j                  r|tX        tN        tL        fv r|t$        k7  rvt6        jQ                  d       	 tS        j                  |       \  | _K        }}| j                          | j                  jA                  t        | j                        ||d       |t"        k7  r"|t$        k7  r| j                  |||      \  }}}}nd\  }}}}| j                  jA                  ||||d       |s|r| j                          |s|dkD  rD| j                  j                  d |z  d      dk(  r"d}| j                  jA                  |d       d!}|D ]  }	 |d"   dk7  rd#} n d$\  }}	 |r*|t        |      kD  rn}||d%z
     }|d"   }|d&   }|d'   }d#}n| j                  j                  d(||fz  d)      } | d)k(  rn;| j                  j                  d*||fz  d      }!| j                  j                  d+||fz  d      }d!}t6        jQ                  d,| |!fz         |D ]  }|d&   }|d'   }|| k(  s||!k(  sd#} n |r&t6        jQ                  d-|fz         j                  d.t              }"|j                  d/d0      }#|j                  d1t              }$t6        jQ                  d2|"|#|$|
fz         d3t        j                  |d4      d5t        j                  |d4      }%| j=                  |%      }&d6}%|
t        k(  s|
t        k(  s
|
t        k(  r|"t        k(  s|"t        k(  r|t        k(  r|$t        k\  rd7t        j                  |$d4      z  }%|t.        t0        fv r
|t        z   }'n	|t        z   }'|'| j                  d<   | j=                  |'      | j                  d8<   t        j                  |'t              | j                  d9<   |'| _I        | j                  | j                         |$t        t        fv rd:}%nd;}%| j=                  |%      }(| j                  jA                  d<|z  |d=|z  |d>|z  |j                  d?d!      d@|z  |dA|z  |#dB|z  |$dC|z  |j                  dDd!      dE|z  |j                  dFd!      dG|z  |"dH|z  |j                  dId      dJ|z  |j                  dKd!      dL|z  |&dM|z  |j                  dNd      dO|z  |(i       ndPt        j                  |"t              z  }%| j=                  |%      }(| j                  jA                  d<|z  |d=|z  |d>|z  d!d@|z  |dA|z  |#dB|z  |$dC|z  d!dE|z  d!dG|z  |"dH|z  ddJ|z  d!dL|z  |&dM|z  ddO|z  |(i       |d%z  }nt6        jQ                  dQ|z         |d%z  }d}|dkD  r| j                  | j                  d   }|dkD  r!| j                  j                  d d      dk(  rd}d%}	 | j                  j                  d(||fz  d      } | dk(  rn| j                  j                  d*||fz  d      }!| j                  j                  d+||fz  d      }d3t        j                  |!d4      d5t        j                  | d4      }%| j=                  |%      }&| j                  jA                  d<|z  | d=|z  |!d>|z  d!d@|z  |dA|z  ddB|z  t        dC|z  d!dE|z  d!dG|z  t        dH|z  ddJ|z  d!dO|z  | j=                  dR      dL|z  |&dM|z  di       |d%z  }*| j                  D ].  })| j                  |)   | j                  |)j                  dSd5      <   0 t        | j                  d|
t
        j                  ddt        j                               | _        t6        jQ                  | j                         y # t4        $ rm}t6        j9                  d
       t        | j                  dt:        t
        j                  ddt        j                               | _        t5        t:              d }~ww xY w# t        $ r Y w xY w# t        t4        f$ r& | j                  jA                  dt        d       Y w xY w# | j                          w xY w#  Y xY w)TNr.   r   zr-typez	tech-typerB  zstatus-battery-checkstatus-dynamic-countersr   r  rf  rg  zNo status available for device.r  z Type 1/2 (S: or VSTATUS:) statusz"Type 3/9 LaserJet PML(+PJL) statuszType 6: LJ XMLzType 8: LJ PJLzType 10: LEDMzType 11: LEDM_FF_CC_0zType 12: IPPzType 13: CDMz&http://%s/cdm/supply/v1/suppliesPubliczUnimplemented status type: %dzBattery check...agentsrh  ri  rj  rk  rS  )rrsrO  rP  zr%d-agent1-kindFz	agent-skuT)r   r   r   kindtypezr%d-agent%d-kindr   zr%d-agent%d-typezr%d-agent%d-skuzLooking for kind=%d, type=%d...zfound: r%d-kind%d-type%dhealthleveld   zlevel-triggerz5health=%d, level=%d, level_trigger=%d, status_code=%dagent_r~  r  agent_health_okzagent_level_%sr  r  agent_level_outagent_level_lowzagent%d-kindzagent%d-typezagent%d-knownknownzagent%d-skuzagent%d-levelzagent%d-level-triggerzagent%d-ackackzagent%d-hp-inkzhp-inkzagent%d-healthzagent%d-dvcdvczagent%d-virginvirginzagent%d-descz
agent%d-ididzagent%d-health-desczagent_health_%szNot found: %dagent_health_unknownr  )hr  r  r-   r2   r  rj   r6   r;   r  r  r  _Device__queryFaxr   r   TECH_TYPE_NONErC  STATUS_BATTERY_CHECK_NONErX  r  STATUS_UNKNOWNr  r  rm  rn  ro  r  r   rC   r   rp  r  r  r  r   r  r?  r  r   rv  r[  rD   r   rI  r  ru  STATUS_TYPE_PML_AND_PJLStatusType3STATUS_TYPE_LJ_XMLStatusType6STATUS_TYPE_PJLStatusType8STATUS_TYPE_LEDMStatusType10getEWSUrl_LEDMSTATUS_TYPE_LEDM_FF_CC_0getUrl_LEDMSTATUS_TYPE_IPPStatusTypeIPPr3   STATUS_TYPE_CDMr  StatusTypeCDM_USB
getUrl_CDMr   r   r   get_zc_ip_addressr   StatusTypeCDM_NetBatteryCheckr!  rt  r  r  r  r  r  rw  r  r4   rd  r  r   AGENT_HEALTH_OK AGENT_LEVEL_TRIGGER_SUFFICIENT_0AGENT_typesAGENT_kindsSTATUS_PRINTER_POWER_SAVErl  STATUS_PRINTER_OUT_OF_INKAGENT_HEALTH_FAIR_MODERATEAGENT_KIND_HEADAGENT_LEVEL_TRIGGER_MAY_BE_LOWAGENT_levelsSTATUS_PRINTER_LOW_INK_BASESTATUS_PRINTER_LOW_TONER_BASEERROR_STATE_LOW_SUPPLIES AGENT_LEVEL_TRIGGER_PROBABLY_OUT)AGENT_LEVEL_TRIGGER_ALMOST_DEFINITELY_OUTAGENT_healthsr  AGENT_HEALTH_MISINSTALLEDr  r   )*r>   rx  ry  ra  rm  rb  battery_checkrc  r  io_mfp_moder  r  r   rz  status_blockresource_urlretnr  rM  r}  r~  rN  rO  rP  dynamic_sku_dataagentaaamq_agent_sku
agent_kind
agent_typer   mq_agent_kindmq_agent_typeagent_healthagent_levelagent_level_triggerquery
agent_desccodeagent_health_descr   s*                                             r?   queryDevicezDevice.queryDeviceJ  s   ~~DG#DOOR9Rq"diik3DO .??5*>??Xq)GGKK^<	ggkk-1AB$:<UV77;;'@B^_''++i5ggkk-=$  66~~"46I!JJ7$$& **4+;+;<KGGNN%)[[%)%7%7%)%5%5%0%)%6%6%&%'%'%)%6%6%)%5%5  L..:; -?!4m DD		<=%11$--@1H II		>?%11$F 22		*+%11$7/		*+%11$7 00		/*%2243F3FG 88		12%2243C3CD/		.)%33DOODDUDUV/		.)==#)#;#;DOO#LL#Ktyy#YLww#+#=#=dgg#Fb8#6#66*RVX*Y<#)#;#;L#IL 		9KGH;&		,-##D,F		,'|,* * *(3F) ''++m^DK8<<[J[\D)DONN4??+#0@0@0M040@0@ " # G[,<<##'+DGGKK8JA,N'OD$##NMCV#WW{*II./(9?9J9J49P6(%GGNNS1A1A-B5:5:$= >
 $'CC{*37??6;Xh3i0G["b3R0G["bw'2')')   ! 1'') Q;477;;/@7/JA#NRS#SGGGNN7+6+-+-$$ % $) # E -3/3,! 4 2's6{?! &qs',['9%*6]
%*6]
 $(,4F'ST4UWY(Z(B.!(,4F'ST4UWX(Y'+ww{{3DQR|3SUW'X %		"C}VcFd"de%+ )E).vJ).vJ)]:)]:+/5#() 		"<U_?`"`a',yy?'K&+ii&=.3ii</>+ 		"Y);8K[Y#Z [ 2=Y1W1<Y1W!Y &*%5%5e%<
 1 (+DDWjHjny  ~W  oW)_<*.HHZ[jMj/3QQ$4|7G7GH[]f7g$gE(-?AT,UU'14O'O'14Q'Q59DGGM2595E5Ed5KDGGM25N5R5RSWYq5rDGGM2.2DO NN4??;2!ACl m n ):(9040@0@0G- GGNN . 3z . 3z /" 4uyyRW?X - 2| /" 4{ 7" <?R - 2uyyPU?V 02 5uyySX?Y 02 5| - 2uyyPQ?R 02 5uyySX?Y . 3z ,r 1uyyq?Q 5 :?P& %68I8I,Xg8h$hE040@0@0G- GGNN . 3z . 3z /" 4u - 2| /" 4{ 7" <?R - 2u 02 5u 02 5| - 2q 02 5u . 3z ,r 1q 5 :?P$ a 		/A"56FAs z Gzdmm7--* {tww{{+<a@AEA $,>'1,Mq Q A% $,>'1,Mq Q#ww{{+<|+KRP)4	)R)4	)RT "--e4
"Q&-"Q&-#a'%!A%,#a'!+a/2[!A%%$q(%$q(2K!A%!$q(%)A-$2B2BCY2Z"Q&* 1$!$ Q? B  	;A04
DMM!))C,-	;  [$--QRTVX\XaXaXcd		$''c
  7II89&+DOORAVq"diik';DO   5667d   $ e$ #0A " ##& TsU   w 7x= 07y *z 
z	x:A(x55x:=	y
	y
1zzzzc                 v    	 | j                  d       | j                  t        t        fv S # t        $ r Y yw xY w)NTrx  r  r   r  r  ERROR_STATE_BUSYrE   s    r?   isBusyOrInErrorStatezDevice.isBusyOrInErrorState  sF    	4( $57G#HHH  		   , 	88c                 v    	 | j                  d       | j                  t        t        fvS # t        $ r Y yw xY w)NTr  Fr  rE   s    r?   isIdleAndNoErrorzDevice.isIdleAndNoError  sF    	4( (9;K'LLL  		r  c                 r   | j                         }t        j                  | j                  |t	        j
                  |d         |d         \  }}}}|t        j                  kD  r!t        j                  d|d   |fz         |d fS t	        j                  ||d   |      }t        j                         r|d   t        j                  t        j                  fv r6t        j                  d|d   |fz         t        j                  |       ||fS t        j                  d|d   |t        |      fz         ||fS )Nr   r   z+PML/SNMP GET %s failed (result code = 0x%x)z.PML/SNMP GET %s (result code = 0x%x) returned:z1PML/SNMP GET %s (result code = 0x%x) returned: %s)r  r   get_pmlr   r   	PMLToSNMPERROR_MAX_OKrC   rD   ConvertFromPMLDataFormatis_debugTYPE_STRINGTYPE_BINARYlog_datarepr)	r>   oiddesired_int_sizer  r   r   typpml_result_codeconverted_datas	            r?   rD  zDevice.getPML  s$   \\^
T^^Zs1v9NPSTUPVW 	0T3S---IICs1vF__`"D((55dCFDTU<<>1v#//3??;;		JV_-. /T" .. 		MV_d>.BCD E..rA   c           
         | j                         }t        j                  ||d         }t        j	                  | j
                  |t        j                  |d         |d   |      \  }}t        j                         rz|d   t        j                  t        j                  fv rt        j                  d|d   |fz         |S t        j                  d|d   |t        |j                  d            fz         |S )Nr   r   z(PML/SNMP SET %s (result code = 0x%x) to:z+PML/SNMP SET %s (result code = 0x%x) to: %srG   )r  r   ConvertToPMLDataFormatr   set_pmlr   r  rC   r  r  r  rD   r  decode)r>   r  rA  r  r   r  s         r?   setPMLzDevice.setPML  s    \\^
**5#a&9T^^Zs1v9NPSTUPVX]^ 	%_ <<>1v#//3??;;		DV_-. /  		GV_d5<<3H.IJK L rA   Tc                 Z   | j                   j                  dt              }t        j	                  d|z         |t        k7  r[|t
        k(  rL| j                  t        j                         d       | j                  t        j                  |      d       n&| j                  t        j                  |      d       d\  }}}}}t        j                  d       	 | j                  r| j                          |dz  }|dz  }t        j                  |       | j                          d| j                   v rot"        j%                  | j&                        Pt)        | j                   d   |      \  }	}||	k(  r/| j                  t        j                  d	      d       |sd
|z   }|S ||kD  rz|t
        k(  rJ| j                  t        j                                | j                  t        j                  |      d       y | j                  t        j                  d	      d       y |t
        k(  rJ| j                  t        j                                | j                  t        j                  |      d       n&| j                  t        j                  |      d       t+        t,              )Nr  zDynamic counters: %dT)direct)r   r   r   皙?r   r  r   CTRr   #)r   r   rX  rC   rD   #STATUS_DYNAMIC_COUNTERS_LIDIL_0_5_4	printDatar   buildResetPacketbuildDynamicCountersPacketr   buildDynamicCounterr;   r   r  r  r  pat_dynamic_ctrr   r?  rB  r   'ERROR_DEVICE_DOES_NOT_SUPPORT_OPERATION)
r>   r@  r?  rc  rA  tries
times_seensleepy_time	max_triesdev_counters
             r?   r]  zDevice.getDynamicCounter  s)   77;;'@B^_		(+;;<;;#FFs335dCs==gFtTs66w?M?N<E5*k9JJsO==MMOs"


;'  "DMM)#**4+<+<=I)<T]]5=QSa)b&K+-s'>'>q'A$O-$'%KE$9$'+NNs';';'=>s'E'Eg'NW[\   s'>'>q'A$O#'JJNN3#7#7#9:NN3#A#A'#JSWNXNN3#:#:7#CDNQI N ?@@rA   c                 @    | j                  | j                  ||||      S r`   )_Device__readChannelr  r>   bytes_to_readstreamr  allow_short_reads        r?   	readPrintzDevice.readPrint-       !!$..-RbccrA   c                 @    | j                  | j                  ||||      S r`   )r  r  r  s        r?   	readPCardzDevice.readPCard0  r
  rA   c                 @    | j                  | j                  ||||      S r`   )r  r  r  s        r?   readFaxzDevice.readFax3       !!$,,vwP`aarA   c                 @    | j                  | j                  ||||      S r`   )r  r%  r  s        r?   readCfgUploadzDevice.readCfgUpload6  s"    !!$"4"4mVWVfggrA   c                 @    | j                  | j                  ||||      S r`   )r  r  r  s        r?   readEWSzDevice.readEWS9  r  rA   c                 @    | j                  | j                  ||||      S r`   )r  r  r  s        r?   readEWS_LEDMzDevice.readEWS_LEDM<  s"    !!$"3"3]FGUeffrA   c                 @    | j                  | j                  ||||      S r`   )r  r  r  s        r?   readLEDMzDevice.readLEDM?  s     !!$--QabbrA   c                 @    | j                  | j                  ||||      S r`   )r  r	  r  s        r?   readMarvell_EWSzDevice.readMarvell_EWSB  s"    !!$"6"6vwXhiirA   c                 @    | j                  | j                  ||||      S r`   )r  r/  r  s        r?   readSoapFaxzDevice.readSoapFaxE  s"    !!$"2"2M67TdeerA   c                 @    | j                  | j                  ||||      S r`   )r  r2  r  s        r?   readMarvellFaxzDevice.readMarvellFaxH  "    !!$"5"5}fgWghhrA   c                 @    | j                  | j                  ||||      S r`   )r  r  r  s        r?   readWifiConfigzDevice.readWifiConfigK  r  rA   c                    t        d      }d}d}d} ||||      }|j                         j                         D ]W  }	|	j                         j	                  t        d            dk7  s/t        |	j                  t        d            d         }d	} n |j                         j	                  t        d
            }
|
dk7  r|t        |j                               |
z
  z
  }|dkD  r[t               } ||||      }|j                  |j                                |s||z
  }|dk  ry ||j                         k(  ry |dkD  rZy y )Nz0

   r   Tzcontent-lengthr   r.  r   Fz<?xml)
r   getvaluer   r   findr4   r4  r   r   rN   )r  funcreplyr  END_OF_DATAbytes_requestedbytes_remainingchunkedFlag
bytes_readlinexml_data_starttemp_bufs               r?   readLEDMDatazDevice.readLEDMDataO  s3   !+./5':
NN$//1 	Dzz|  /?!@ARG#&tzz-2D'Ea'H#I$		 )..}W/EFb -U^^5E1F.1XYO1n {HoxAJKK))+,"1J">"a' 1 1 33 1nrA   c                 &    	  |d||      }|dk(  ry)z
        Read any leftover response data from the previous session.
        We read and disregard all such leftover data here to have a clean new session.
        If we are getting a blank responses that means there is no more junk data. 
        r"  r   Nrk   )r  r%  r&  r  r+  s        r?   readLEDMAllDatazDevice.readLEDMAllDatao  s$     dE73JQ rA   c                     |       }t         j                  d|| j                  |||fz         d}|t        d      }	 t        j                  | j                  |||      \  }	}
t         j                  d|	z         t        |
      }|	t        j                  k(  rt         j                  d       n|	t        j                  k7  r$t         j                  d       t        t              |st         j                  d       n|t        d      j                  |
g      }n|j                  |
       ||z  }| j                  | j                          ||k(  rt         j                  d       n$|r ||k  rt         j                  d	||fz         nP|t         j                  d
|z         S t         j                  d|z         |S )NzRReading channel %d (device-id=%d, bytes_to_read=%d, allow_short=%s, timeout=%d)...r   r.   Result code=%dzI/O timeoutzChannel read errorzEnd of datazFull read complete.z.Allowed short read of %d of %d bytes complete.z"Returned %d total bytes in buffer.zSaved %d total bytes to stream.)rC   rD   r   r   r   read_channelr   HPMUD_R_IO_TIMEOUTr   r   r   rp  r   rN   r  )r>   openerr  r  r  r  r  	num_bytesbufferr   r   ls               r?   __readChannelzDevice.__readChannel{  s    X
		f8H'RS 	T 	>"2&F%%dnnj-QXY K II&45D	Ah999		-(h111		./122		-(~&r*//?T"NI}}(M)		/0I$=		JiYfMgghI L >II:YFGMII7)CDrA   c                 :    | j                  | j                  |      S r`   )_Device__writeChannelr  r>   r   s     r?   
writePrintzDevice.writePrint      ""4>>488rA   c                 :    | j                  | j                  |      S r`   )r<  r  r=  s     r?   
writePCardzDevice.writePCard  r?  rA   c                 :    | j                  | j                  |      S r`   )r<  r  r=  s     r?   writeFaxzDevice.writeFax      ""4<<66rA   c                 :    | j                  | j                  |      S r`   )r<  r  r=  s     r?   writeEWSzDevice.writeEWS  rD  rA   c                 :    | j                  | j                  |      S r`   )r<  r  r=  s     r?   writeEWS_LEDMzDevice.writeEWS_LEDM  s    ""4#4#4d;;rA   c                 :    | j                  | j                  |      S r`   )r<  r  r=  s     r?   	writeLEDMzDevice.writeLEDM  s    ""4==$77rA   c                 :    | j                  | j                  |      S r`   )r<  r	  r=  s     r?   writeMarvell_EWSzDevice.writeMarvell_EWS      ""4#7#7>>rA   c                 :    | j                  | j                  |      S r`   )r<  r*  r=  s     r?   writeCfgDownloadzDevice.writeCfgDownload  rM  rA   c                 :    | j                  | j                  |      S r`   )r<  r/  r=  s     r?   writeSoapFaxzDevice.writeSoapFax  s    ""4#3#3T::rA   c                     t        |t              st        |d      r|j                         }| j	                  | j
                  |      S )Ntobytes)
isinstancebyteshasattrrS  r<  r2  r=  s     r?   writeMarvellFaxzDevice.writeMarvellFax  s9    $&74+C<<>D""4#6#6==rA   c                 :    | j                  | j                  |      S r`   )r<  r  r=  s     r?   writeWifiConfigzDevice.writeWifiConfig  s    ""4#6#6==rA   c                 N    |       }|dt        |      }}}t        j                  d||| j                  fz         t        |      dkD  rt        j                  | j                  ||d t        j                         \  }}t        j                  d|z         |t        j                  k7  r$t        j                  d       t        t              |t        j                  d  }||z  }| j                  | j                          t        |      dkD  r||k7  rt        t              |S )Nr   z0Writing %d bytes to channel %d (device-id=%d)...r3  zChannel write error)r   rC   rD   r   r   write_channelrj   max_message_lenr   r   r   rp  r  )	r>   r6  r   r  r8  	bytes_outtotal_bytes_to_writer   r|   s	            r?   __writeChannelzDevice.__writeChannel  s   X
263t9/			DH\^hjnjxjxGyyz&kAo&&t~~z0D0013 'K II&45h111		/0122D0012F&I}}( &kAo"  9,-..rA   c                     |dk(  rt         j                  }nt         j                  } |t        j                  dddt	        j
                  |d   ||d                     }| j                  ||d       y )Nr   &r  Wr   T)r  raw)r   buildEmbeddedPML2buildEmbeddedPMLbuildPCLCmdr   buildEmbeddedPMLSetPacketr  )r>   r  rA  styler  r%  r   s          r?   writeEmbeddedPMLzDevice.writeEmbeddedPML  sl    A:((D''DCOOCc223q64947F<= > 	tF5rA   c                    | j                   j                  dt              }d|| j                  t	        |      |fz  }t
        j                  |       |t        k(  rt
        j                  d|z         | j                  |       t               }| j                  | j                  |       |j                         }t
        j                  |       | j                          n|t        k(  rt
        j                  d|z         | j!                  |       t               }| j                  | j"                  |       |j                         }t
        j                  |       | j%                          nt
        j'                  d|z         t(        j+                  t-                    }|t.        S 	 t1        |j3                  d            }|t.        k(  S # t4        t6        f$ r t8        }Y |t.        k(  S w xY w)NrB  z{POST %s HTTP/1.1
Connection: Keep-alive
User-agent: hplip/2.0
Host: %s
Content-type: text/xml
Content-length: %d

%szstatus-type: %dzNot an LEDM status-type: %dr   )r   r   rC  r  r   rC   r  r  rD   rH  r   r/  r  r#  r  r  rJ  r  r   r   http_result_patr   r   HTTP_OKr4   r   r=  rK  
HTTP_ERROR)r>   urlpostrb  r   responser   r  s           r?   ro  zDevice.post	  s   ggkk-1AB 
dnnc$i./ 	T**II'+56t$yHd//:((*HLL" 44II'+56NN4 yHdmmX6((*HLL"NN II3kAB%%nX&>?=.	u{{1~&D w I& 	Dw	s   -G G0/G0c                 ,    | j                  |||||      S r`   )	printFile)r>   	file_namer3   r  rc  removes         r?   printGzipFilezDevice.printGzipFile1	  s    ~~ivsFKKrA   c           	         	 t        j                  |       t        j                         \  }}t        j                  |d      }|j                         }|j                  t        d            sAt        j                  ||       |j                         }|j                  t        d            sAg }|j                         }|j                  t        d            s<|j                  |       |j                         }|j                  t        d            s<t        j                  | j                   | j"                  | j$                  | j&                  | j(                  | j*                  | j,                  d}| j$                  dk(  rd|d<   n
d|d	<   d|d
<   t.        r|D 	cg c]  }	|	j1                  d       }}	|D ]$  }	t        j                  |t        |	|z               & t        j                  ||j3                                |j5                          t        j4                  |       | j7                  ||ddd       y # t        $ r t        j	                  d|z         Y y w xY wc c}	w )NzFile not found: %sr  z	%PY_BEGINz%PY_END)VERSIONr/  r  BUSr0  IPPORTDEVNODEr%   zn/ar{  ry  rz  rG   FT)r  rc  rt  )rM   statrO   rC   r   r
   make_temp_filegzipr  readliner7  r   rN   rX   rj   versionr  r2   r   r   r   r   r   r   r  readr  rr  )
r>   
print_filer3   temp_file_fdtemp_file_namerT  r  	sub_linesSUBSss
             r?   printParsedGzipPostscriptz Device.printParsedGzipPostscript4	  s   	GGJ
 (-';';'=$nIIj#&JJL,,}[9:HH\1%

A ,,}[9: 	JJL,,}Y78Q

A ,,}Y78 !LL!]]!__!XX![[!YY!YY!]] 88u#DODJ DL4=>q'*>I>  	>AHH\=!d(#<=	> 	qvvx(		
~|EuUYZ]  	II*Z78	F ?s   I I)!I&%I&c                 x   t         j                  j                  |      d   j                         dk(  }|| j                  }|st        t              t        j                  d|d|d|d|d|d|d	       |r`|r4| j                  t        j                  |d
      j                                y | j                  t        |d
      j                                y t        j                  d      sjd}|rd}|rd|d|d|}nd|d|d|}t        j                   |      }	|	dk7  rt        j#                  d|	z         |rt        j$                  |       y y d\  }
}|rd}
|rd}|rd|d|
d|d|}nd|d|
d|d|}t        j                   |      }	|	dk7  rt        j#                  d|	z         y y )Nr   z.gzzPrinting file 'z' to queue 'z' (gzip=z	, direct=z, raw=z	, remove=)r  lprr.   z-orawz
gunzip -c z | lp -c -dr   zlp -c -dr   z'Print command failed with exit code %d!r   z-o rawz-rz | lpr z -Pzlpr -P)rM   r   splitextr   r  r   $ERROR_NO_CUPS_QUEUE_FOUND_FOR_DEVICErC   rD   r>  r~  r  r  r
   r   r   executer   rt  )r>   rs  r3   r  rc  rt  is_gziplp_optr  	exit_coderaw_strrem_strs               r?   rr  zDevice.printFileh	  s   ''""9-b1779UB22L@AA		|Wfc6K 	L 		)S 9 > > @AY 4 9 9 ;< ;;u%$F:C\SYZA  /;FINA$,,Q/	>IIG)STIIi(  $* (T7;DgwXdeA  0<WgyYA$,,Q/	>IIG)ST "rA   c                     | j                  t        j                  j                  t        j
                  ddd      |      S )Nr   psztestpage.ps.gz)r  rM   r   r   rj   r   )r>   r3   s     r?   printTestPagezDevice.printTestPage	  s8    --bggllDMM6.24D/GHTV 	VrA   c                     |r| j                  |       y t        j                         \  }}t        j                  ||       t        j
                  |       | j                  ||d|d       y )NFT)rt  )r>  r
   r}  rM   rN   r  rr  )r>   r   r3   r  rc  r  r  s          r?   r  zDevice.printData	  sT    OOD!+0+?+?+A(L.HH\4(HH\"NN><DNQrA   c                 z    t        j                  |       t        | _        | j	                  | j                         y r`   )r   	cancelJobSTATUS_PRINTER_CANCELINGr  r  )r>   jobids     r?   r  zDevice.cancelJob	  s%    u2t'rA   c                 P   g }| j                   r	 | j                  j                  | j                        \  }}|j                          |D ]"  }|j                  t        t        |              $ 	 |d   j                  | _        t"        j%                  | j                  t&              | _        nt         | _        t&        | _        || _        |S # t        j
                  j                  $ r!}t        j                  d       g cY d }~S d }~ww xY w# t        $ r t         | _        Y w xY w)Nz!dbus call to GetHistory() failed.r   )rV   r   
GetHistoryr2   r   r   r   rC   r   reverserX   r-   tupler5   r  r6  r  rt  r   r  r  r  )r>   resultr2   historyr   hs         r?   queryHistoryzDevice.queryHistory	  s    ??&*ll&=&=doo&N#
G
 OO 0eU1X./01"()"6"6  9<<T__N_`D -DO0D	+ ??00 		=>	  1"01s/   (C 0D D*D DDD%$D%c                     	 | j                   r$| j                  j                  dd      d|}| }n[d| j                  |}| j                  r<t
        j                  | j                        \  }}|t
        j                  k(  rd||}d }t        j                  d|z         t        i       }	 |j                  ||      }	 |j                  |j                  j                                |j                          | j)                          y # |j                          w xY w# t         $ r< t        j#                  d|z         |j%                  d       |j'                          Y jw xY w# | j)                          w xY w)Nr   r   &loc=zhttp://zOpening: %sStatus read failed: %sr   )r  r2   r   r   r   r   r  r   rC   rD   LocalOpenerr  rN   fpr  r  r   r   seektruncater  )	r>   rn  r  url2r   r   r  r6  rT  s	            r?   	getEWSUrlzDevice.getEWSUrl	  s0   	}}&*oo&=&=h&NPST  )-		3777!)!;!;DGG!DJFB!4!4402C8IImd*+ _FKKd+LL- GGI MMO GGI  "		2T9:A!" MMOsC   B.E+ 1D# )D -E+ D  E+ #AE(%E+ 'E((E+ +E=c                    	 | j                   j                  dd      d|}| }t        i       }	 |r#|j                  |||      | j	                          S |j                  ||      | j	                          S # t
        $ r t        j                  d|z         Y nw xY w	 | j	                          y # | j	                          w xY wNr   r   r  r  )r2   r   LocalOpenerEWS_LEDMopen_hpr  r   rC   rD   r>   rn  r  footerr  r   r6  s          r?   r  zDevice.getEWSUrl_LEDM	  s    	!"&//"9"9(E"JCPDD(,F;!>>$f=  	 ">>$5    ;		2T9:;: D .   .B1 A8 A8 8!BB1 BB1 1Cc                    	 | j                   j                  dd      d|}| }t        i       }	 |r#|j                  |||      | j	                          S |j                  ||      | j	                          S # t
        $ r t        j                  d|z         Y nw xY w	 | j	                          y # | j	                          w xY wr  )r2   r   LocalOpener_LEDMr  r   r   rC   rD   r  s          r?   r  zDevice.getUrl_LEDM 
  s    	"&//"9"9(E"JCPDD%b)F;!>>$f= NN ">>$5
 NN	  ;		2T9:;: NNDNNr  c                    	 d}| j                   j                  dd      d|}| }t        i       }	 |r#|j                  |||      | j	                          S |j                  ||      | j	                          S # t
        $ r t        j                  d|z         Y nw xY w	 | j	                          y # | j	                          w xY w)Nz/cdm/supply/v1/suppliesPublicr   r   r  r  )r2   r   LocalOpener_CDMr  r   r   rC   rD   r  s          r?   r  zDevice.getUrl_CDM
  s    	/C"&//"9"9(E"JCPDD$R(F;!>>$f= NN	 ">>$5 NN  ;		2T9:;:NNDNNs.   0B3 A: A: :!BB3 BB3 3Cc                     t               }|r| j                  |||      }n| j                  ||      }|r5|j                  t        d      d      d   }|rt	        j
                  |      }|S N

r   )r   r  r4  r   r   ExtractXMLDatar>   rn  r  data_fpr   s        r?   FetchLEDMUrlzDevice.FetchLEDMUrl 
  sg    )##C&9D##C1D::mJ7;A>D,,T2rA   c                     t               }|r| j                  |||      }n| j                  ||      }|r5|j                  t        d      d      d   }|rt	        j
                  |      }|S r  )r   r  r4  r   r   r  r  s        r?   FetchEWS_LEDMUrlzDevice.FetchEWS_LEDMUrl.
  sg    )&&sGV<D&&sG4D::mJ7;A>D,,T2rA   c                     t               }| j                  |      }|st        j                  d       yt	        j
                         j                  |      }	 ||   S #  t        d      cY S xY wNz'Unable To read the XML data from devicer.   )r   r  rC   r   r
   XMLToDictParserparseXMLr<  r>   r   	attributer  r   xmlDicts         r?   readAttributeFromXml_EWSzDevice.readAttributeFromXml_EWS:
  se    $$S)II?@'')2248	9%%	r7N   A A,c                     t               }| j                  |      }|st        j                  d       yt	        j
                         j                  |      }	 ||   S #  t        d      cY S xY wr  )r   r  rC   r   r
   r  r  r<  r  s         r?   readAttributeFromXmlzDevice.readAttributeFromXmlI
  se      %II?@'')2249	9%%	r7Nr  c                    d}t         j                  j                  t        j                  d| j
                  j                         dz         }t        j                  |       t         j                  j                  |      rt        j                  d|z         	 	 | j'                          | j)                  t        j                  |      j                               }	t        j                  dt+        j,                  |	      z         | j/                          d}t        j                  d       |S t        j%                  d	|z         |S # t0        $ r-}t        j%                  d|j2                  z         Y d }~|S d }~ww xY w)
NFfirmwarez.fw.gzz!Downloading firmware file '%s'...TOKzAn error occured: %sz%s bytes downloaded.zFirmware file '%s' not found.)rM   r   r   rj   data_dirr   r   rC   rD   r   r  O_RDWRr~  r  rN   r  rO   IOErrorr   r  r>  r
   commafyr  r   r]   )
r>   r   usb_device_idr  filenamer  rT  r  r   r|   s
             r?   downloadFirmwarezDevice.downloadFirmwareV
  s   77<<z4::;K;K;MPX;XY		(77>>(#II9HDE >NN$$(OODIIh4G4L4L4N$OMII4u}}]7SSTOO%BIIdO 	 II5@A	  >II4quu<== 	>s   BE 	F"E<<F)NNNF)r.   r   r.   F)FFT)rG  )r   T)NFTFr`   )NTTr.   )NN)frg   rh   ri   r@   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r   r"  r%  r'  r*  r,  r/  r2  r4  r6  r8  r  r=  r  r  rG  rJ  rZ  rd  r  r  r  r  r  r   INT_SIZE_INTrD  r  r]  rj   read_timeoutr	  r  r  r  r  r  r  r  r  r  r   r/  r1  r  r>  rA  rC  rF  rH  rJ  rL  rO  rQ  rW  rY  r<  ri  ro  ru  r  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  rk   rA   r?   r  r    s   04;@Lb>?&3&l. >0BEH@E>HCIF@AAAF?IJKLM=H>IB0106D
,L,^Sn),pfIM ,/+;+; /,$5Ap /3D<M<M`e d /3D<M<M`e d -1$:K:K^c b 37@Q@Qdi h -1$:K:K^b b 26t?P?Pcg g .24;L;L_c c 59$BSBSfj j 15d>O>Obf f 48ARARei i 48ARARei i@	 ;?"//%8v9977<8??;>
>86+ZL2[h3UlV
R(:@!  


#rA   r  c                       e Zd Zd Zy)r  c                    t         j                  d|z         t        j                  |      }|j	                  d      xs d}|j	                  d      xs d}|j	                  d      xs d}|j	                  d      xs d}|j	                  d      xs d}|j                          |j                  d|z         t               }	|j                  d	|	d
      r	 |j                  d	|	d
      r|	j                  d       t         j                  |	j                                t        j                  |	      }
|
j                          |
j                  t        j                   k7  rt#        t$              |
S )Nopen_hp(%s)r   r.   r   r   r   r   zBGET %s HTTP/1.0
Content-Length:0
Host:localhost
User-Agent:hplip

r   )r  r   )rC   rD   http_pat_urlr   r   r  rF  r   r  r  r  r#  r   HTTPResponsebeginr   r  r   !ERROR_DEVICE_STATUS_NOT_AVAILABLE)r>   rn  r  r   r   r   r   devicelocr&  rp  s              r?   r  zLocalOpener.open_hp
  s)   		-#%& '',	ooa &B"(b#)r#)rooa &Bbehhikk$qk1 kk$qk1 	

1U^^%&++E2??knn,9::OrA   Nrg   rh   ri   r  rk   rA   r?   r  r  
  s    rA   r  c                       e Zd ZddZy)r  c                    t         j                  d|z         t        j                  |      }|j	                  d      |j                  d         }|j                          |rOd|v r|j                  d|z         nJ|j                  d|dt        |      d       |j                  d|z         n|j                  d|z         t               }|j                  |j                  |       |j                  d	       |j                         S 
Nr  =PUTz%szPOST z1 HTTP/1.1
Content-Type:text/xml
Content-Length:z?
Accept-Encoding: UTF-8
Host:localhost
User-Agent:hplip

 zIGET %s HTTP/1.1
Accept: text/plain
Host:localhost
User-Agent:hplip

r   )rC   rD   r  r   r4  countr  rH  r   r   r/  r  r  r#  r>   rn  r  footr   r  r&  s          r?   r  zLocalOpenerEWS_LEDM.open_hp
  s    		-#%& '',	iinSYYs^,}!!(T/2!!  tw  y|  }A  yB  #C  D!!(T/2wz}}~))%0

1~~rA   Nr  r  rk   rA   r?   r  r  
  s     rA   r  c                       e Zd ZddZy)r  c                    t         j                  d|z         t        j                  |      }|j	                  d      |j                  d         }|j                          |rOd|v r|j                  d|z         nJ|j                  d|dt        |      d       |j                  d|z         n|j                  d|z         t               }|j                  |j                  |       |j                  d	       |j                         S r  )rC   rD   r  r   r4  r  r  rJ  r   r   r/  r  r  r#  r  s          r?   r  zLocalOpener_LEDM.open_hp
  s    		-#%& '',	iinSYYs^,}ho.  ps  ux  y}  u~    @ho.MMsvyyz 	e,

1~~rA   Nr  r  rk   rA   r?   r  r  
  s     rA   r  c                       e Zd ZddZy)r  c                     t         j                  d|z         t        j                  |      }|j	                  d      |j                  d         }|j                          |j                  d|dt        |      d       t               }|j                  |j                  |       |j                  d       t        j                  |      }|j                          |j!                         }|j#                         }	|	S )Nr  r  zGET z HTTP/1.1
Content-Type: application/json
User-Agent: hplip
Accept: */*
Cache-Control: no-cache
Host:localhost
Connection: keep-alive
Content-Length: r  r   )rC   rD   r  r   r4  r  r  rH  r   r   r/  r  r  r   r  r  getcoder  )
r>   rn  r  r  r   r  r&  rp  respcoder   s
             r?   r  zLocalOpener_CDM.open_hp
  s    		-#%& '',	iinSYYs^,  ]`  ad  eh  ai  j  	k))%0

1++E2##%}}rA   Nr  r  rk   rA   r?   r  r  
  s    rA   r  r`   )r   r  r  )r   r   r~  os.pathrM   r;   sixext.movesr   r   r   ior   r   rH   stringgcodesr.   r
   r   r   r   r   prntr   r   r   r   r   r   r   stringssixextr   r   r   r   r   r   r   Irk  rl  rm  
import_extr   HPMUD_BUFFER_SIZE
MAX_BUFFERAttributeErrorImportErrorgetenvrC   r   sysexitrV   r   r   r    r!   r   warningssimplefilterDeprecationWarningDEFAULT_PROBE_BUSr   rX  DEFAULT_FILTERr]  DEFAULT_BE_FILTERr   rJ  r  r   r  	ModelDatar   r   r   r   objectr-   rm   rx   r   r   r   r   r   r#  r&  r(  r+  r   rB  r   rN  rP  r   r[  r^  AGENT_TYPE_NONEAGENT_TYPE_BLACKAGENT_TYPE_BLACK_B8800AGENT_TYPE_CMYAGENT_TYPE_KCMAGENT_TYPE_CYANAGENT_TYPE_MAGENTAAGENT_TYPE_YELLOWAGENT_TYPE_CYAN_LOWAGENT_TYPE_MAGENTA_LOWAGENT_TYPE_YELLOW_LOWAGENT_TYPE_GGKAGENT_TYPE_BLUEAGENT_TYPE_KCMY_CMAGENT_TYPE_LC_LMAGENT_TYPE_LG_PKAGENT_TYPE_LGAGENT_TYPE_GAGENT_TYPE_PGAGENT_TYPE_C_MAGENT_TYPE_K_YAGENT_TYPE_PHOTO_BLACKAGENT_TYPE_MATTE_BLACKAGENT_TYPE_UNSPECIFIEDr  AGENT_KIND_NONEr  AGENT_KIND_SUPPLYAGENT_KIND_HEAD_AND_SUPPLYAGENT_KIND_TONER_CARTRIDGEAGENT_KIND_MAINT_KITAGENT_KIND_ADF_KITAGENT_KIND_DRUM_KITAGENT_KIND_TRANSFER_KITAGENT_KIND_INT_BATTERYAGENT_KIND_UNKNOWNr  r  r  AGENT_HEALTH_INCORRECTAGENT_HEALTH_FAILEDAGENT_HEALTH_OVERTEMPAGENT_HEALTH_CHARGINGAGENT_HEALTH_DISCHARGINGAGENT_HEALTH_UNKNOWNr  r  r  r  r  string_cacher  	URLopenerr  r  r  r  rk   rA   r?   <module>r7     s  .  	    D D 	  %              & &  ^ ^"**5rtt<

Uj)H//
 
+)J    h 2 3 + ++ 9 

  h  jl  jw  jw  xrzzWY[YfYfgRZZ?O
 "**0"--@ F		xz|  {H  {H  
I
"**^R]]
3
"**'
7BDF BDJu 2!E !8L-fB'R
( '~re!(tt .2F> ,^ /3VN D 37 &
8F((IV-	  &  	
   # " $ ' &    # !)G" !)E#$ %& ););&&&38 IV!X*[*W$["Y#Z'^&Y"Y !T+n(k%h'j'j*m&i	 /1E:U gV g^5.** < .22  4 ~//  6n.. iT  
  299]#		RS"  +HH)*+s6   6M 	L3 N 3L>=L>9M>=M>NN