V Qc@sdZddlZddlZddlZddlmZddlmZdZdd dYZddlm Z d ee fd YZ dS( sRPC Server module.iN(tfnmatch(trepritServercBseZdZedZdZdZdZdZdZ ddd d gZ d Z d Z d Z ddZRS(sDRPC Server class. Derive a class to implement a particular service.cCst|tdkr'd|f}n||_||_d|_tjtjtj|_|jj||jj dd|_ 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|jdS(N(t_close(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt__del__ scCs/d|_|jr"|jjnd|_dS(Ni(RRtcloseR(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyR#s  cCsx|jr|jqWdS(N(Rt_serve(R((s)/usr/lib64/python2.7/Demo/pdist/server.pyt _serverloop)s cCs|jrdGHn|jj\}}|jrAdt|GHn|j||spdt|GH|jdS|jd}|jd}d}x=|r|j|jdkrdGHn|j||}qWdS(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|krd|j|||f}nM|ddkrtdt|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|ds3t|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|}|jxE|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 SecureServercBseZdZdZRS(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|jdkrdGt |GHndSX|j ||s|jdkrdGt |GHndS|jd krd GHnd S( Nis%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