ó V Qc@sdZddlZddlZddlZddlmZddlmZdZdd d„ƒYZddlm Z d ee fd „ƒYZ dS( sRPC Server module.iÿÿÿÿN(tfnmatch(trepritServercBs€eZdZed„Zd„Zd„Zd„Zd„Zd„Z ddd d gZ d „Z d „Z d „Z dd„ZRS(sDRPC Server class. Derive a class to implement a particular service.cCsŠt|ƒtdƒkr'd|f}n||_||_d|_tjtjtjƒ|_|jj|ƒ|jj dƒd|_ dS(Niti( ttypet_addresst_verbosetNonet_sockettsockettAF_INETt SOCK_STREAMtbindtlistent _listening(tselftaddresstverbose((s)/usr/lib64/python2.7/Demo/pdist/server.pyt__init__s   cCs ||_dS(N(R(RR((s)/usr/lib64/python2.7/Demo/pdist/server.pyt _setverbosescCs|jƒdS(N(t_close(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt__del__ scCs/d|_|jr"|jjƒnd|_dS(Ni(RRtcloseR(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyR#s  cCsx|jr|jƒqWdS(N(Rt_serve(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt _serverloop)s cCsØ|jrdGHn|jjƒ\}}|jrAdt|ƒGHn|j||ƒspdt|ƒGH|jƒdS|jdƒ}|jdƒ}d}x=|rÓ|jƒ|jdkr¾dGHn|j||ƒ}q—WdS(NsWait for connection ...sAccepted connection from %ss*** Connection from %s refusedtrtwisWait for next request ...( RRtacceptRt_verifyRtmakefiletflusht _dorequest(RtconnRtrftwftok((s)/usr/lib64/python2.7/Demo/pdist/server.pyR-s"     s 192.16.201.*s 192.16.197.*s 132.151.1.*s 129.6.64.*cCs7|\}}x$|jD]}t||ƒrdSqWdS(Nii(t_validR(RR Rthosttporttpat((s)/usr/lib64/python2.7/Demo/pdist/server.pyR?s  c Csvtj|ƒ}y|jƒ}Wntk r3dSX|jdkrUdt|ƒGHnyŠ|\}}}d|kr‘d|j||ƒ|f}nM|ddkr·tdt|ƒ‚n't ||ƒ} dt | |ƒ|f}Wnt j t j |f}nX|dkr5|d d kr5|jdkr1dGHndS|jdkrVd t|ƒGHntj|ƒ} | j|ƒdS( NiisGot request: %st.t_sillegal method name %sisSuppress replysSend reply: %s(NN(tpicklet UnpicklertloadtEOFErrorRRRt_specialt NameErrortgetattrtapplytsystexc_typet exc_valuetPicklertdump( RR!R"trptrequestt methodnametargstidtreplytmethodtwp((s)/usr/lib64/python2.7/Demo/pdist/server.pyREs4   cCsQ|dkr:t|dƒs3t|jƒƒ|_n|jStdt|ƒ‚dS(Ns.methodst_methodss#unrecognized special method name %s(thasattrttuplet _listmethodsR?R/R(RR9R:((s)/usr/lib64/python2.7/Demo/pdist/server.pyR._s  cCs‰|s|j}n|jjƒ}td„|ƒ}|jƒxE|jD]:}|j|ƒ}t|d„|ƒ}||t|ƒ)qGW|S(NcSs|ddkS(NiR)((tx((s)/usr/lib64/python2.7/Demo/pdist/server.pytiscSs ||kS(N((RCtnames((s)/usr/lib64/python2.7/Demo/pdist/server.pyRDms(t __class__t__dict__tkeystfiltertsortt __bases__RBtlen(RtclREtbaset basenames((s)/usr/lib64/python2.7/Demo/pdist/server.pyRBfs  N(t__name__t __module__t__doc__tVERBOSERRRRRRR$RRR.RRB(((s)/usr/lib64/python2.7/Demo/pdist/server.pyRs        (tSecurityt SecureServercBseZd„Zd„ZRS(cGs(ttj|f|ƒtj|ƒdS(N(R1RRRT(RR:((s)/usr/lib64/python2.7/Demo/pdist/server.pyRwscCsddl}|jƒ}|jd|ƒd}xEd|krvt|ƒdkrv|jdƒ}|siPn||}q2Wy|j|j|ƒƒ}Wn6|jk rË|jdkrÇdGt |ƒGHndSX|j ||ƒs|jdkrÿdGt |ƒGHndS|jd krd GHnd S( Niÿÿÿÿs%d Rs idisInvalid response syntaxsInvalid response valueis&Response matches challenge. Go ahead!( tstringt_generate_challengetsendRLtrecvtatoltstript atol_errorRRt_compare_challenge_response(RR RRVt challengetresponsetdata((s)/usr/lib64/python2.7/Demo/pdist/server.pyR{s,  !(RPRQRR(((s)/usr/lib64/python2.7/Demo/pdist/server.pyRUus (( RRR2R R*RRRSRtsecurityRTRU(((s)/usr/lib64/python2.7/Demo/pdist/server.pyts   d