U •v«`§ ã@sªdZddlmZddlmZddlZddlmZdZdZdZ d Z d Z d Z dZ d Zd Zd ZdZdZdZdZdZdZdZGdd„dejƒZdd„Zdd„Zdd„Zdd„ZdS)z$Simple Traversal of UDP through NAT.é)Úprint_function)Úabsolute_importNé)Údpktiiéiiééééééé é é c@seZdZdZdZdS)ÚSTUNz÷Simple Traversal of UDP through NAT. STUN - RFC 3489 http://tools.ietf.org/html/rfc3489 Each packet has a 20 byte header followed by 0 or more attribute TLVs. Attributes: __hdr__: Header fields of STUN. TODO. ))ÚtypeÚHr)Úlenrr)ÚxidZ16srN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Z__hdr__©rrúa/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/stun.pyr%s rcCs\d}t d|d|…¡\}}||||…}||||}||||d…}||||fS)Nrz>HH)ÚstructÚunpack)ÚbufÚnÚtZl_ÚvÚpadrrrÚtlv8s r"cCs,g}|r(t|ƒ\}}}}| ||f¡q|S)z?Parse STUN.data buffer into a list of (attribute, data) tuples.)r"Úappend)rÚattrsrÚ_r rrrÚ parse_attrsAs r&cCsHd}t|ƒ}|jtkst‚|jdks(t‚t|jƒ}|tdfgksDt‚dS)Ns  !¤BSOpCii5Jfc1z"3DUfé s"3DUf)rrÚBINDING_RESPONSEÚAssertionErrorrr&ÚdataÚMAPPED_ADDRESS©ÚsÚmr$rrrÚtest_stun_responseJs  r/cCsnd}t|ƒ}|jtkst‚|jdks(t‚t|jƒ}t|ƒdksBt‚|dtdfksVt‚|ddtksjt‚dS)NshT!¤B5YSnBqpVwa9OpLyZHR:GwL3AHBovubLvCqn€*‹Li{ö[%$nÿ`+Çü cªÅ8Ë–©ssš– €(ÑbêeéTr rspLyZHR:GwL3AHBovubLvCqnr) rrÚBINDING_REQUESTr)rr&r*ÚUSERNAMEÚMESSAGE_INTEGRITYr,rrrÚtest_stun_paddedUs r4)rÚ __future__rrrÚrr1r(ZBINDING_ERROR_RESPONSEZSHARED_SECRET_REQUESTZSHARED_SECRET_RESPONSEZSHARED_SECRET_ERROR_RESPONSEr+ZRESPONSE_ADDRESSZCHANGE_REQUESTZSOURCE_ADDRESSZCHANGED_ADDRESSr2ZPASSWORDr3Z ERROR_CODEZUNKNOWN_ATTRIBUTESZREFLECTED_FROMZPacketrr"r&r/r4rrrrÚs4