This repository has been archived on 2025-02-19. You can view files and clone it, but cannot push or open issues or pull requests.

33 lines
1.0 KiB
Python
Raw Normal View History

"""
Create bitmessage protocol command packets
"""
import struct
import addresses
from network.constants import MAX_ADDR_COUNT
from network.node import Peer
from protocol import CreatePacket, encodeHost
def assemble_addr(peerList):
"""Create address command"""
if isinstance(peerList, Peer):
2019-12-31 18:22:56 +05:30
peerList = [peerList]
if not peerList:
2020-01-15 12:26:23 +05:30
return bytes()
retval = bytes()
for i in range(0, len(peerList), MAX_ADDR_COUNT):
2020-01-06 17:14:47 +05:30
payload = addresses.encodeVarint(len(peerList[i:i + MAX_ADDR_COUNT]))
for stream, peer, timestamp in peerList[i:i + MAX_ADDR_COUNT]:
payload += struct.pack(
2020-01-06 16:44:13 +05:30
'>Q', int(timestamp)) # 64-bit time
2020-01-15 12:26:23 +05:30
payload += struct.pack('>I', stream)
2020-01-06 17:14:47 +05:30
# service bit flags offered by this node
payload += struct.pack('>q', 1)
payload += encodeHost(peer.host)
2020-01-06 17:14:47 +05:30
# remote port
payload += struct.pack('>H', peer.port)
retval += CreatePacket('addr', payload)
return retval