-ν
Ϋ?c       sN  d  Z  d k Z d k Z y d k Z Wn e j
 o d k Z n Xd 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 h  d e i <d e i <d e i <Z e e i    Z h  d e i <d e i <d e i <d e i <Z e e i    Z [ d Z d Z 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   t  Z e i i Z e i i Z d Z e	 Z
 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»   | |  _  | t j	 o | |  _ n t |  d  o t |  _ n t i   |  _	 t |  _
 d |  _ d |  _ d |  _ t i   |  _ g  |  _ d |  _ t |  _ 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__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    sB   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   zΎy |  i d  } Wn4 t i j
 o% } | d t j o d  Sn   n X| o d  Sn |  i	 t
 |  } |  i } |  i }	 |  i } | | j og | t j o | |  _ n= t |  i  t j o |  i | g |  _ n |  i i |  | |  _	 d  Sn t | t  o | | } n4 | t j o
 | } n | i |  d i |  } d } d } x2| | | j o | | | | !} | | } |	 oc t i d |  d } | t @} | o | t N} | d 7} n |  i o t d   n d }	 n d } d }	 | ov | d  } | d } |  i! oJ |  i! i" |  |  i! i#   }
 | |
 j o t d	 |
 | f   n n t% d
  n |  i& |  ql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    s&   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    s  |  i i   zό |  i } xμ | oδ d } x@ t t |   D], } | t | |  7} | t	 j o Pn q< W| d 7} d i
 | |   } | | 4y |  i |  } Wn1 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$  |  i o t d   n |  i i   zθ |  i oS |  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 |  n? x; t d t
 |  t  D]! } |  i i | | | t ! qι WWd  |  i i   Xd  S(   Ns*   This action is temporarily unavailable.<p>s   >Ii    (   s   selfs$   _SizedMessageAsyncConnection__closeds   DisconnectedErrors)   _SizedMessageAsyncConnection__output_locks   acquires'   _SizedMessageAsyncConnection__hmac_sends$   _SizedMessageAsyncConnection__outputs   appends   structs   packs   lens   messages   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"     

&" # c    s&   |  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,   							*6