U v`@sdZddlmZddlZddlmZdZdZdZGdd d ej Z d d Z d d Z ddZ ddZddZddZddZddZddZdS)zPoint-to-Point Protocol.)absolute_importN)dpkt!Wc@sLeZdZdZddddeffZiZeddZedd Z d d Z d d Z dS)PPPzPoint-to-Point Protocol. TODO: Longer class information.... Attributes: __hdr__: Header fields of PPP. TODO. )addrB)cntrlr pr cCs||j|<dSN_protosw)clsr Zpktclassr`/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/ppp.pyset_p&sz PPP.set_pcCs |j|Srr)rr rrrget_p*sz PPP.get_pc Cstj|||jt@dkrhztd|ddd|_Wntjk rVtjYnX|jdd|_z0|j |j|j|_t ||jj j |jWnttjtjfk rYnXdS)Nrz>Hr)rPacketunpackr PFC_BITstructerrorNeedDatadatarsetattr __class____name__lowerKeyErrorZ UnpackError)selfbufrrrr.s z PPP.unpackc Cshz0|jdkr$td|j|j|jWStj|WStjk rb}zt t |W5d}~XYnXdS)Nr z>BBH) r rpackrr rrpack_hdrr PackErrorstr)r$errrr'<s  z PPP.pack_hdrN) r! __module__ __qualname____doc__PPP_IPZ__hdr__r classmethodrrrr'rrrrrs   rc Cs|t}|D]h\}}|dr|dd}|}z$t||dd}t|t||Wqtt fk rtYqYqXqdS)NZPPP_rr)level) globalsitems startswithr" __import__rrgetattr ImportErrorAttributeError)gkvnamemodnamemodrrr __load_protosEs  r>cCstjs tdS)zAPost-initialization called when all dpkt modules are fully loadedN)rrr>rrrr _mod_initRsr?cCs8d}t|}|jdkstd}t|}|jdks4tdS)N!rs!)rr AssertionError)sr rrrtest_pppXs rCcCs d}ddl}|tjt|dS)Nsr)pytestraisesrrr)rBrDrrrtest_ppp_shortcsrFcCs0t}|dkstd|_|dks,tdS)Nr@i!s!)rr'rAr )r rrr test_packingjsrGc Cshddl}Gdddtj}d}|tt|W5QRXt||t||ks\ttj |=dS)Nrc@s eZdZdS)z(test_ppp_classmethods..TestProtoN)r!r+r,rrrr TestProtousrH{) rDrrrEr#rrrrAr)rDrHZ proto_numberrrrtest_ppp_classmethodsrs  rJcCslddlm}ddlm}|d}|d}||}t|}t|dsFtt|j|j sXtt ||kshtdS)Nr)ip) unhexlifyZff0321Z(45000014000000008006d47e1111111122222222rK) rrKbinasciirLrhasattrrA isinstancerZIPbytes)rKrLZbuf_pppZbuf_ipr%ppprrrtest_unpacking_exceptionss   rRc Cs8ddl}tddd}|tj|W5QRXdS)Nrii)r r)rDrrErr(r')rDrQrrrtest_ppp_packing_errors rScCs8tj}it_tjrtdtd<ttj|ks4tdS)NFAILZPPP_NON_EXISTENT_PROTO)rrrAr1r?)Zstandard_protosrrrtest_proto_loadings   rU)r- __future__rrrr.ZPPP_IP6rrrr>r?rCrFrGrJrRrSrUrrrrs   1