Exemple #1
0
    async def _verify_peer(self, session, peer):
        if not peer.is_tor:
            address = session.peer_address()
            if address:
                peer.ip_addr = address[0]

        # server.version goes first
        message = 'server.version'
        result = await session.send_request(message, self.server_version_args)
        assert_good(message, result, list)

        # Protocol version 1.1 returns a pair with the version first
        if len(result) != 2 or not all(isinstance(x, str) for x in result):
            raise BadPeerError(f'bad server.version result: {result}')
        server_version, protocol_version = result
        peer.server_version = server_version
        peer.features['server_version'] = server_version
        ptuple = protocol_tuple(protocol_version)

        async with TaskGroup() as g:
            await g.spawn(self._send_headers_subscribe(session, peer, ptuple))
            await g.spawn(self._send_server_features(session, peer))
            await g.spawn(self._send_peers_subscribe(session, peer))
Exemple #2
0
 def _protocol_version_string(self, key):
     version_str = self.features.get(key)
     ptuple = util.protocol_tuple(version_str)
     return util.version_string(ptuple)