forked from Tribler/dispersy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpayload.py
109 lines (79 loc) · 3.82 KB
/
payload.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from ..payload import Payload, IntroductionRequestPayload
class SimilarityRequestPayload(Payload):
class Implementation(Payload.Implementation):
def __init__(self, meta, identifier, lan_address, wan_address, connection_type, preference_list):
assert isinstance(identifier, int), type(identifier)
assert not preference_list or isinstance(preference_list, (list, tuple)), type(preference_list)
for preference in preference_list:
assert isinstance(preference, str), type(preference)
assert len(preference) == 20, len(preference)
self._identifier = identifier
self._preference_list = preference_list
self._lan_address = lan_address
self._wan_address = wan_address
self._connection_type = connection_type
@property
def identifier(self):
return self._identifier
@property
def lan_address(self):
return self._lan_address
@property
def wan_address(self):
return self._wan_address
@property
def connection_type(self):
return self._connection_type
@property
def preference_list(self):
return self._preference_list
class SimilarityResponsePayload(Payload):
class Implementation(Payload.Implementation):
def __init__(self, meta, identifier, preference_list, tb_overlap):
assert isinstance(identifier, int), type(identifier)
assert not preference_list or isinstance(preference_list, (list, tuple)), type(preference_list)
assert not tb_overlap or isinstance(tb_overlap, list), type(tb_overlap)
for preference in preference_list:
assert isinstance(preference, str), type(preference)
assert len(preference) == 20, len(preference)
for bitfield in tb_overlap:
assert isinstance(bitfield, tuple), type(bitfield)
assert isinstance(bitfield[0], str), type(bitfield[0])
assert isinstance(bitfield[1], int), type(bitfield[1])
self._identifier = identifier
self._preference_list = preference_list
self._tb_overlap = tb_overlap
@property
def identifier(self):
return self._identifier
@property
def preference_list(self):
return self._preference_list
@property
def tb_overlap(self):
return self._tb_overlap
class ExtendedIntroPayload(IntroductionRequestPayload):
class Implementation(IntroductionRequestPayload.Implementation):
def __init__(self, meta, destination_address, source_lan_address, source_wan_address, advice, connection_type, sync, identifier, introduce_me_to=None):
IntroductionRequestPayload.Implementation.__init__(
self, meta, destination_address, source_lan_address, source_wan_address, advice, connection_type, sync, identifier)
if introduce_me_to:
assert isinstance(introduce_me_to, str), 'introduce_me_to should be str'
assert len(introduce_me_to) == 20, len(introduce_me_to)
self._introduce_me_to = introduce_me_to
def set_introduce_me_to(self, introduce_me_to):
self._introduce_me_to = introduce_me_to
@property
def introduce_me_to(self):
return self._introduce_me_to
class PingPayload(Payload):
class Implementation(Payload.Implementation):
def __init__(self, meta, identifier):
assert isinstance(identifier, int), type(identifier)
super(PingPayload.Implementation, self).__init__(meta)
self._identifier = identifier
@property
def identifier(self):
return self._identifier
class PongPayload(PingPayload):
pass