-í
Û„?c       s–    d  Z    d k Z  d k Z  y  d k Z Wn"   e j
 o ! d k Z n X" d k Z # d k Z $ d k Z % d k	 Z	 & d k
 l Z ( d k l Z l Z ) d k l Z * d k Z 1 h  d e i <d e i <d e i <Z 5 e e i ƒ  ƒ Z 7 h  d e i <d e i <d e i <d e i <Z < e e i ƒ  ƒ Z = [ A d Z C d Z E d e i f d	 „  ƒ  YZ d S(
   sd  Sized Message Async Connections.

This class extends the basic asyncore layer with a record-marking
layer.  The message_output() method accepts an arbitrary sized string
as its argument.  It sends over the wire the length of the string
encoded using struct.pack('>i') and the string itself.  The receiver
passes the original string to message_input().

This layer also supports an optional message authentication code
(MAC).  If a session key is present, it uses HMAC-SHA-1 to generate a
20-byte MAC.  If a MAC is present, the high-order bit of the length
is set to 1 and the MAC immediately follows the length.
N(   s
   StringType(   s   logs
   short_repr(   s   DisconnectedErrori    i`ê  l        s   SizedMessageAsyncConnectionc      sÅ   E t  Z F e i i Z G e i i Z I d Z K e	 Z
 M e	 e	 d „ Z z d „  Z  d „  Z … d „  Z ˆ d „  Z Ü d „  Z ß d „  Z å d	 „  Z 	d
 „  Z d „  Z (d „  Z RS(   Ni   c    sî   M N | |  _  O | t j	 o P | |  _ n% Q t |  d ƒ o R t |  _ n T t i ƒ  |  _	 U t |  _
 V d |  _ ^ d |  _ _ d |  _ ` t i ƒ  |  _ a g  |  _ b d |  _ u t |  _ v t |  _ x |  i | | ƒ d  S(   Ns   _debugi    i   (   s   addrs   selfs   debugs   Nones   _debugs   hasattrs	   __debug__s	   threadings   Locks(   _SizedMessageAsyncConnection__input_locks!   _SizedMessageAsyncConnection__inps'   _SizedMessageAsyncConnection__input_lens#   _SizedMessageAsyncConnection__states&   _SizedMessageAsyncConnection__msg_sizes)   _SizedMessageAsyncConnection__output_locks$   _SizedMessageAsyncConnection__outputs$   _SizedMessageAsyncConnection__closeds'   _SizedMessageAsyncConnection__hmac_sends'   _SizedMessageAsyncConnection__hmac_recvs(   _SizedMessageAsyncConnection__super_inits   socks   map(   s   selfs   socks   addrs   maps   debug(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   __init__M s    c    sN   z { t  d | ƒ | t i | d t ƒ|  _ } t i | d t ƒ|  _ d  S(   Ns   set session key %rs	   digestmod(   s   logs   sesskeys   hmacs   HMACs   shas   selfs'   _SizedMessageAsyncConnection__hmac_sends'   _SizedMessageAsyncConnection__hmac_recv(   s   selfs   sesskey(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   setSessionKeyz s   c    s    € |  i Sd  S(   N(   s   selfs   addr(   s   self(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   get_addr s   c    s   … † d Sd  S(   Ni   (    (   s   self(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   __nonzero__… s   c    sš  ˆ ‰ |  i i ƒ  Š ziŒ y  |  i d ƒ } Wn@ Ž t i j
 o. }  | d t j o  d  Sn ‘ ‚  n X’ | o “ d  Sn • |  i	 t
 | ƒ } – |  i } — |  i }	 ™ |  i } š | | j o| › | t j o œ | |  _ nF  t |  i ƒ t j o ž |  i | g |  _ n   |  i i | ƒ ¡ | |  _	 ¢ d  Sn ¥ t | t ƒ o ¦ | | } n@ § | t j o ¨ | } n# ª | i | ƒ « d i | ƒ } ­ d } ® d } ¯ xz¯ | | | j oe° | | | | !} ± | | } ² |	 o{ ³ t i d | ƒ d } ´ | t @} µ | o ¶ | t N} · | d 7} n! ¸ |  i o ¹ t d ƒ ‚ n º d }	 n» ¼ d } ½ d }	 È | oŽ É | d  } Ê | d } Ë |  i! oV Ì |  i! i" | ƒ Í |  i! i# ƒ  }
 Î | |
 j o Ï t d	 |
 | f ƒ ‚ n n Ò t% d
 ƒ n Ó |  i& | ƒ qÌWÕ |	 |  _ Ö | |  _ × | | |  _ Ø | | |  _	 Wd  Ù Ú |  i i' ƒ  Xd  S(   Ni    i    s    s   >Ii   s   Received message without MACi   i   s   MAC failed: %r != %rs#   Received MAC but no session key set((   s   selfs(   _SizedMessageAsyncConnection__input_locks   acquires   recvs   ds   sockets   errors   errs   expected_socket_read_errorss'   _SizedMessageAsyncConnection__input_lens   lens	   input_lens&   _SizedMessageAsyncConnection__msg_sizes   msg_sizes#   _SizedMessageAsyncConnection__states   states!   _SizedMessageAsyncConnection__inps   inps   Nones   types
   StringTypes   appends
   isinstances   joins   offsets   has_macs   msgs   structs   unpacks   MAC_BITs'   _SizedMessageAsyncConnection__hmac_sends
   ValueErrors   macs'   _SizedMessageAsyncConnection__hmac_recvs   updates   digests   _macs   logs   message_inputs   release(   s   selfs	   input_lens   inps   has_macs   macs   offsets   msg_sizes   ds   errs   states   _macs   msg(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   handle_readˆ sz   		 
		
!c    s   Ü Ý d Sd  S(   Ni   (    (   s   self(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   readableÜ s   c    s2   ß à t  |  i ƒ d j o á d Sn ã d Sd  S(   Ni    i   (   s   lens   selfs$   _SizedMessageAsyncConnection__output(   s   self(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   writableß s   c    sl  å æ |  i i ƒ  ç z;è |  i } é x%é | oò d } ó xL t t | ƒ ƒ Dó ]5 } ô | t | | ƒ 7} õ | t	 j o ö Pn qT Wø | d 7} ú d i
 | |  ƒ } û | | 4ý y þ |  i | ƒ } Wn= ÿ t i j
 o+ }  | d t j o Pn ‚  n X| t | ƒ j  o | i d | | ƒ Pn q+ WWd  |  i i ƒ  Xd  S(   Ni    i   s    (   s   selfs)   _SizedMessageAsyncConnection__output_locks   acquires$   _SizedMessageAsyncConnection__outputs   outputs   ls   ranges   lens   is	   SEND_SIZEs   joins   vs   sends   ns   sockets   errors   errs   expected_socket_write_errorss   inserts   release(   s   selfs   errs   is   ls   ns   vs   output(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   handle_writeå s2    
		 	
c    s   	
|  i ƒ  d  S(   N(   s   selfs   close(   s   self(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   handle_close	s   c    s¹  t  oX |  i oG t d t | ƒ t | ƒ |  i o d p d f d t i	 ƒn n |  i
 o t d ƒ ‚ n |  i i ƒ  z|  i o\ |  i i t i d t | ƒ t Bƒ ƒ |  i i | ƒ |  i i |  i i ƒ  ƒ n& |  i i t i d t | ƒ ƒ ƒ  t | ƒ t j o !|  i i | ƒ nH #xA t d t | ƒ t ƒ D#]$ } $|  i i | | | t !ƒ qrWWd  %&|  i i ƒ  Xd  S(   Ns#   message_output %d bytes: %s hmac=%di   i    s   levels*   This action is temporarily unavailable.<p>s   >I(   s	   __debug__s   selfs   _debugs   logs   lens   messages
   short_reprs'   _SizedMessageAsyncConnection__hmac_sends   zLOGs   TRACEs$   _SizedMessageAsyncConnection__closeds   DisconnectedErrors)   _SizedMessageAsyncConnection__output_locks   acquires$   _SizedMessageAsyncConnection__outputs   appends   structs   packs   MAC_BITs   updates   digests	   SEND_SIZEs   ranges   is   release(   s   selfs   messages   i(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   message_outputs(   
3) % 	&c    s2   ()|  i o *d |  _ +|  i ƒ  n d  S(   Ni   (   s   selfs$   _SizedMessageAsyncConnection__closeds)   _SizedMessageAsyncConnection__super_close(   s   self(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   close(s   (   s   __name__s
   __module__s   asyncores
   dispatchers   __init__s(   _SizedMessageAsyncConnection__super_inits   closes)   _SizedMessageAsyncConnection__super_closes$   _SizedMessageAsyncConnection__closeds   Nones   sockets   setSessionKeys   get_addrs   __nonzero__s   handle_reads   readables   writables   handle_writes   handle_closes   message_output(    (    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   SizedMessageAsyncConnectionE s   			-T$(   s   __doc__s   asyncores   errnos   hmacs   ImportErrors   _hmacs   shas   sockets   structs	   threadings   typess
   StringTypes   ZEO.zrpc.logs   logs
   short_reprs   ZEO.zrpc.errors   DisconnectedErrors   zLOGs   EWOULDBLOCKs   EAGAINs   EINTRs   tmp_dicts   tuples   keyss   expected_socket_read_errorss   ENOBUFSs   expected_socket_write_errorss	   SEND_SIZEs   MAC_BITs
   dispatchers   SizedMessageAsyncConnection(   s
   StringTypes
   short_reprs   asyncores   logs	   threadings   errnos   tmp_dicts   structs   DisconnectedErrors   shas   MAC_BITs   expected_socket_read_errorss   SizedMessageAsyncConnections   zLOGs	   SEND_SIZEs   hmacs   expected_socket_write_errorss   socket(    (    s5   /usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/smac.pys   ? s,   -9		