(self)
waiting for a reply to our request
waiting for a reply to our request
waiting for a reply to our request
def _parse_request_reply(self):
        "waiting for a reply to our request"
        # we need at least 6 bytes of data: 4 for the "header", such
        # as it is, and 2 more if it's DOMAINNAME (for the size) or 4
        # or 16 more if it's an IPv4/6 address reply. plus there's 2
        # bytes on the end for the bound port.
        if len(self._data) < 8:
            return
        msg = self._data[:4]

        # not changing self._data yet, in case we've not got
        # enough bytes so far.
        (version, reply, _, typ) = struct.unpack('BBBB', msg)

        if version != 5:
            self.reply_error(SocksError(
                "Expected version 5, got {}".format(version)))
            return

        if reply != self.SUCCEEDED:
            self.reply_error(_create_socks_error(reply))
            return

        reply_dispatcher = {
            self.REPLY_IPV4: self._parse_ipv4_reply,
            self.REPLY_HOST: self._parse_domain_name_reply,
            self.REPLY_IPV6: self._parse_ipv6_reply,
        }
        try:
            method = reply_dispatcher[typ]
        except KeyError:
            self.reply_error(SocksError(
                "Unexpected response type {}".format(typ)))
            return
        method()
def _parse_request_reply ( self ) : # we need at least 6 bytes of data: 4 for the "header", such # as it is, and 2 more if it's DOMAINNAME (for the size) or 4 # or 16 more if it's an IPv4/6 address reply. plus there's 2 # bytes on the end for the bound port. if len ( self . _data ) < 8 : return msg = self . _data [ : 4 ] # not changing self._data yet, in case we've not got # enough bytes so far. ( version , reply , _ , typ ) = struct . unpack ( 'BBBB' , msg ) if version != 5 : self . reply_error ( SocksError ( "Expected version 5, got {}" . format ( version ) ) ) return if reply != self . SUCCEEDED : self . reply_error ( _create_socks_error ( reply ) ) return reply_dispatcher = { self . REPLY_IPV4 : self . _parse_ipv4_reply , self . REPLY_HOST : self . _parse_domain_name_reply , self . REPLY_IPV6 : self . _parse_ipv6_reply , } try : method = reply_dispatcher [ typ ] except KeyError : self . reply_error ( SocksError ( "Unexpected response type {}" . format ( typ ) ) ) return method ( )