def _acquaint_(self, peer_location, peer_signature, addrinfo, task=None):
"""
Internal use only.
"""
if peer_signature in _Peer._sign_locations:
raise StopIteration
sock = AsyncSocket(socket.socket(addrinfo.family, socket.SOCK_STREAM),
keyfile=self._keyfile, certfile=self._certfile)
sock.settimeout(MsgTimeout)
req = _NetRequest('peer', kwargs={'signature': self._signature, 'name': self._name,
'from': addrinfo.location, 'version': __version__},
dst=peer_location)
req.auth = hashlib.sha1((peer_signature + self._secret).encode()).hexdigest()
try:
yield sock.connect((peer_location.addr, peer_location.port))
yield sock.send_msg(serialize(req))
peer_info = yield sock.recv_msg()
peer_info = deserialize(peer_info)
assert peer_info['version'] == __version__
if peer_signature not in _Peer._sign_locations:
_Peer(peer_info['name'], peer_location, peer_signature,
self._keyfile, self._certfile, addrinfo)
reply = 0
except:
logger.debug(traceback.format_exc())
reply = -1
sock.close()
raise StopIteration(0)
评论列表
文章目录