Browse Source
- addrthread is supposed to spread addresses as they appear. This was never finished during migration to asyncore - conservative to prevent flood and loops - randomises order - move protocol constants into a separate file - move addr packet creation into a separate file - see #1575v0.6
6 changed files with 88 additions and 52 deletions
@ -0,0 +1,32 @@ |
|||
""" |
|||
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): |
|||
peerList = (peerList) |
|||
if not peerList: |
|||
return b'' |
|||
retval = b'' |
|||
for i in range(0, len(peerList), MAX_ADDR_COUNT): |
|||
payload = addresses.encodeVarint( |
|||
len(peerList[i:i + MAX_ADDR_COUNT])) |
|||
for stream, peer, timestamp in peerList[i:i + MAX_ADDR_COUNT]: |
|||
payload += struct.pack( |
|||
'>Q', timestamp) # 64-bit time |
|||
payload += struct.pack('>I', stream) |
|||
payload += struct.pack( |
|||
'>q', 1) # service bit flags offered by this node |
|||
payload += encodeHost(peer.host) |
|||
payload += struct.pack('>H', peer.port) # remote port |
|||
retval += CreatePacket('addr', payload) |
|||
return retval |
@ -0,0 +1,11 @@ |
|||
""" |
|||
Network protocol constants |
|||
""" |
|||
|
|||
|
|||
ADDRESS_ALIVE = 10800 #: address is online if online less than this many seconds ago |
|||
MAX_ADDR_COUNT = 1000 #: protocol specification says max 1000 addresses in one addr command |
|||
MAX_MESSAGE_SIZE = 1600100 #: ~1.6 MB which is the maximum possible size of an inv message. |
|||
MAX_OBJECT_PAYLOAD_SIZE = 2**18 #: 2**18 = 256kB is the maximum size of an object payload |
|||
MAX_OBJECT_COUNT = 50000 #: protocol specification says max 50000 objects in one inv command |
|||
MAX_TIME_OFFSET = 3600 #: maximum time offset |
Loading…
Reference in new issue