- ;csdkZdkZdkZ2deifdYZdfdYZdfdYZ%dkZ'hZ)dZ 4dZ dS( Ns async_chatcs2dZ48dZ9dZ;edZAdZEdZMdZdZdZ dZ d Z d Z d Z d Zd ZdZdZRS(sThis is an abstract class. You must derive from this class, and add the two methods collect_incoming_data() and found_terminator()icsD;<d|_=d|_>t|_?tii||dS(Ns( sselfs ac_in_buffers ac_out_buffersfifos producer_fifosasyncores dispatchers__init__sconn(sselfsconn((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys__init__;s  csABC||_dS(sRSet the input delimiter. Can be a fixed string of any length, an integer, or NoneN(stermsselfs terminator(sselfsterm((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysset_terminatorAscsEF|iSdS(N(sselfs terminator(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysget_terminatorEscsMOyP|i|i}Wn/Qtij o}R|iSdSnXU|i||_\x(\|io]t |i}^|i }_|t jo#a|i|ibd|_nct|tdjoe|}f||jo6g|i|ihd|_i|i ||_ nDk|i|i| l|i||_md|_ n|inwt |}xti|i|}y|djoS{|djo}|i|i| n~|i|||_|int|i|}|oH||jo0|i|i| |i| |_nPn |i|id|_qjWdS(Nsii(sselfsrecvsac_in_buffer_sizesdatassocketserrorswhys handle_errors ac_in_bufferslenslbsget_terminators terminatorsNonescollect_incoming_datastypesnsfound_terminatorsterminator_lensstringsfindsindexsfind_prefix_at_end(sselfsindexslbsdatasnsterminator_lens terminatorswhy((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys handle_readMsL        cs|idS(N(sselfs initiate_send(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys handle_writescs|idS(N(sselfsclose(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys handle_closescs-|iit||idS(N(sselfs producer_fifospushssimple_producersdatas initiate_send(sselfsdata((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pyspushscs'|ii||idS(N(sselfs producer_fifospushsproducers initiate_send(sselfsproducer((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pyspush_with_producerscs#t|i|ijSdS(s4predicate for inclusion in the readable for select()N(slensselfs ac_in_buffersac_in_buffer_size(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysreadablescs5|idjo|iio|i SdS(s4predicate for inclusion in the writable for select()sN(sselfs ac_out_buffers producer_fifosis_emptys connected(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pyswritablescs|iitdS(sAautomatically close this channel once the outgoing queue is emptyN(sselfs producer_fifospushsNone(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysclose_when_donescs0td}xdo t|io|ii}|tjo:|i o!|ii |i ndSnEt||jo.|ii |i||_dSn|i }|o|i||_dSn|ii ndSqWdS(Nsi( stypes _string_typeslensselfs producer_fifosfirstspsNones ac_out_bufferspopsclosesmoresdata(sselfspsdatas _string_type((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys refill_buffers(     cs|i}t|i|jo|in|io|iowy>|i|i| }|o|i||_nWn/t i j o}|i dSnXndS(N( sselfsac_out_buffer_sizesobsslens ac_out_buffers refill_buffers connectedssendsnum_sentssocketserrorswhys handle_error(sselfsnum_sentswhysobs((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys initiate_sends   csGd|_d|_x"|io|iiq!WdS(Ns(sselfs ac_in_buffers ac_out_buffers producer_fifospop(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysdiscard_bufferss    (s__doc__sac_in_buffer_sizesac_out_buffer_sizesNones__init__sset_terminatorsget_terminators handle_reads handle_writes handle_closespushspush_with_producersreadableswritablesclose_when_dones refill_buffers initiate_sendsdiscard_buffers(((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys async_chat2s"      B        ssimple_producercs ddZdZRS(Nics||_||_dS(N(sdatasselfs buffer_size(sselfsdatas buffer_size((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys__init__s csvt|i|ijo4|i|i }|i|i|_|Sn |i}d|_|SdS(Ns(slensselfsdatas buffer_sizesresult(sselfsresult((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysmores   (s__init__smore(((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pyssimple_producerssfifocsPedZdZdZdZdZdZRS(Ncs.| og|_n ||_dS(N(slistsself(sselfslist((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys__init__s cst|iSdS(N(slensselfslist(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys__len__scs|igjSdS(N(sselfslist(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysis_emptyscs|idSdS(Ni(sselfslist(sself((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysfirstscs|ii|dS(N(sselfslistsappendsdata(sselfsdata((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pyspushscsO|io.|id} |id= d|fSn dtfSdS(Nii(sselfslistsresultsNone(sselfsresult((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pyspops   (sNones__init__s__len__sis_emptysfirstspushspop(((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysfifos     cs)*ti|o+t|Sn-|d}.x<tdt|D.]"}/d||d |f}qKW0ti|d}1|t|ft|<2|t|fSdS(Niis %c\(%s\)?s$( s prefix_cacheshas_keysneedlesregsrangeslensisregexscompile(sneedlesisreg((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys prefix_regex)s   css45t|\}}6t|}7|i|td||}8|djo9||Sn;dSdS(Ni( s prefix_regexsneedlesregslengthslenshaystackslhssearchsmaxsresult(shaystacksneedleslengthsregslhsresult((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pysfind_prefix_at_end4s "( ssocketsasyncoresstrings dispatchers async_chatssimple_producersfifosregexs prefix_caches prefix_regexsfind_prefix_at_end( sregexsasyncoressockets prefix_regexsstringsfind_prefix_at_ends prefix_cachessimple_producersfifos async_chat((sG/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/asynchat.pys?s  2