-í
eLç?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 ~ 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 |  _ a d |  _ b d |  _ c d |  _ d t i ƒ  |  _ e g  |  _ f d |  _ y t |  _ z t |  _ | |  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__has_macs&   _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   ~  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   setSessionKey~ 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 ƒ  Ž z˜ y ‘ |  i d ƒ } Wn@ ’ t i j
 o. } “ | d t j o ” d  Sn • ‚  n X– | o — d  Sn ™ |  i	 t
 | ƒ } š |  i } › |  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 } ³ xš³ | | | j o…´ | | | | !} µ | | } ¶ |	 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 o Ø 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__has_macs   has_macs!   _SizedMessageAsyncConnection__inps   inps   Nones   types
   StringTypes   appends
   isinstances   joins   offsets   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Œ s€   	 
		
!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   /0|  i o 1d |  _ 2|  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   			1W$(   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		