;ò
íŒü?c           @   s`  d  Z  d d g 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 e ƒ  Z h  a  d „  Z! d Z" d  Z# d! d" „ Z$ d! d# „ Z% d$ „  Z& d% „  Z' d& „  Z( d' „  Z) d( „  Z* d) „  Z+ d* „  Z, d+ „  Z- e. d, j o e- ƒ  n d- S(.   s!   Gopher protocol client interface.s   send_selectors
   send_querys   1/s   gopher.micro.umn.eduiF   s   0s   1s   2s   3s   4s   5s   6s   7s   8s   9s   +s   ss   es   cs   hs   Ts   Ms   Is   ws   qs   gs   :s   ;s   <c         C   sq   t  h  j o> x; t D]/ } | d  d j o | d t  t | ƒ <q q Wn |  t  j o t  |  Sn d |  Sd S(   s=   Map all file types to strings; unknown types become TYPE='x'.i   s   A_s   TYPE=N(   s   _type_to_name_maps   _namess   names   evals   gtype(   s   gtypes   name(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   type_to_name)   s        s   
s   	i    c         C   sî   d k  } | oH | i d ƒ } | d j o( | |  t | | d ƒ f \ } } qY n | o
 t } n* t | ƒ t d ƒ j o t | ƒ } n | i  | i | i	 ƒ } | i | | f ƒ | i |  t ƒ | i d ƒ | i d ƒ Sd S(   sG   Send a selector to a given host and port, return a file with the reply.Ns   :i    i   s    s   rb(   s   sockets   ports   hosts   finds   is   ints   DEF_PORTs   types   AF_INETs   SOCK_STREAMs   ss   connects   sendalls   selectors   CRLFs   shutdowns   makefile(   s   selectors   hosts   ports   sockets   is   s(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   send_selector8   s     	,
c         C   s   t  |  d | | | ƒ Sd S(   s#   Send a selector and a query string.s   	N(   s   send_selectors   selectors   querys   hosts   port(   s   selectors   querys   hosts   port(    (    s&   /mit/python/lib/python2.3/gopherlib.pys
   send_queryI   s     c         C   s!   |  d j o d Sn	 |  d Sd S(   sJ   Takes a path as returned by urlparse and returns the appropriate selector.s   /i   N(   s   path(   s   path(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   path_to_selectorM   s     c         C   s'   |  d j o d Sn t |  d ƒ Sd S(   sj   Takes a path as returned by urlparse and maps it to a string.
    See section 3.4 of RFC 1738 for details.s   /s   TYPE='unknown'i   N(   s   paths   type_to_name(   s   path(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   path_to_datatype_nameT   s     c         C   sN  g  } x=n o5|  i ƒ  } | o
 d GHPn | d t j o | d  } n  | d t j o | d  } n | d j o Pn | o d GHq n | d } | d i t ƒ } t	 | ƒ d j  o d	 G| Gd
 GHq n t	 | ƒ d j o- | d d g j o d G| d Gd
 GHq$n | i
 d ƒ | i d | ƒ | i
 | ƒ q W| Sd S(   s1   Get a directory in the form of a list of entries.i   s   (Unexpected EOF from server)iþÿÿÿiÿÿÿÿs   .s   (Empty line from server)i    i   s   (Bad line from server:s   )s   +s   (Extra info from server:s    N(   s   entriess   fs   readlines   lines   CRLFs   gtypes   splits   TABs   partss   lens   appends   insert(   s   fs   partss   entriess   gtypes   line(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   get_directory`   s<      
c         C   s   g  } t |  | i ƒ | Sd S(   s@   Get a text file as a list of lines, with trailing CRLF stripped.N(   s   liness   get_alt_textfiles   fs   append(   s   fs   lines(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   get_textfile€   s     c         C   sª   x£ n o› |  i ƒ  } | o
 d GHPn | d t j o | d  } n  | d t j o | d  } n | d j o Pn | d  d j o | d } n | | ƒ q
 Wd S(	   sN   Get a text file and pass each line to a function, with trailing CRLF stripped.i   s   (Unexpected EOF from server)iþÿÿÿiÿÿÿÿs   .i   s   ..N(   s   fs   readlines   lines   CRLFs   func(   s   fs   funcs   line(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   get_alt_textfile†   s       c         C   s   |  i ƒ  } | Sd S(   s*   Get a binary file as one solid data block.N(   s   fs   reads   data(   s   fs   data(    (    s&   /mit/python/lib/python2.3/gopherlib.pys
   get_binary—   s     c         C   s9   x2 n o* |  i | ƒ } | o Pn | | ƒ q
 Wd S(   s4   Get a binary file and pass each block to a function.i   N(   s   fs   reads	   blocksizes   datas   func(   s   fs   funcs	   blocksizes   data(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   get_alt_binaryœ   s      c          C   sÊ  d k  } d k } | i | i d d ƒ \ } } t } | d } t } | o | d } | d } n | o | d } | d } t
 | ƒ d j o | d | f \ } } n& d } | o | d } | d } n d } | o | d } | d } qü n | t j o t | | | ƒ }	 n t | | ƒ }	 | t j o& t |	 ƒ }
 x| |
 D] } | GHqNWnf | t t f j o& t |	 ƒ }  xC |  D] } | GHq‡Wn- t |	 ƒ } d Gt
 | ƒ Gd G| d  d  GHd S(	   s   Trivial test program.Ni   s    i    s   binary data:s   bytes:id   i(   (   s   syss   getopts   argvs   optss   argss   DEF_SELECTORs   selectors   types   DEF_HOSTs   hosts   lens   querys   A_INDEXs
   send_querys   fs   send_selectors   A_TEXTs   get_textfiles   liness   items   A_MENUs   get_directorys   entriess
   get_binarys   data(   s   entriess   querys   getopts   types   argss   selectors   syss   hosts   datas   fs   liness   items   opts(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   test¤   sL     		





    s   __main__N(/   s   __doc__s   __all__s   DEF_SELECTORs   DEF_HOSTs   DEF_PORTs   A_TEXTs   A_MENUs   A_CSOs   A_ERRORs   A_MACBINHEXs
   A_PCBINHEXs   A_UUENCODEDs   A_INDEXs   A_TELNETs   A_BINARYs   A_DUPLICATEs   A_SOUNDs   A_EVENTs
   A_CALENDARs   A_HTMLs   A_TN3270s   A_MIMEs   A_IMAGEs   A_WHOISs   A_QUERYs   A_GIFs   A_WWWs   A_PLUS_IMAGEs   A_PLUS_MOVIEs   A_PLUS_SOUNDs   dirs   _namess   _type_to_name_maps   type_to_names   CRLFs   TABs   send_selectors
   send_querys   path_to_selectors   path_to_datatype_names   get_directorys   get_textfiles   get_alt_textfiles
   get_binarys   get_alt_binarys   tests   __name__(+   s   A_ERRORs   A_CSOs   A_PLUS_IMAGEs   A_GIFs
   send_querys   A_WHOISs   DEF_HOSTs   A_UUENCODEDs   A_PLUS_MOVIEs   __all__s   get_alt_binarys   send_selectors   A_TN3270s   A_HTMLs   A_MACBINHEXs   get_directorys   type_to_names   TABs   tests   A_IMAGEs   get_textfiles   A_EVENTs   A_QUERYs   A_WWWs   get_alt_textfiles   _namess   A_PLUS_SOUNDs   CRLFs   A_TEXTs   DEF_PORTs   A_SOUNDs
   A_PCBINHEXs   path_to_datatype_names   A_MIMEs   DEF_SELECTORs
   A_CALENDARs   path_to_selectors   A_INDEXs   A_TELNETs
   get_binarys   A_BINARYs   A_DUPLICATEs   A_MENU(    (    s&   /mit/python/lib/python2.3/gopherlib.pys   ?   s^   					 					(