A Python port of the Invisible Internet Project (I2P)
1"""Stream connection options.
2
3Ported from net.i2p.client.streaming.impl.ConnectionOptions.
4"""
5
6
7class StreamOptions:
8 """Configuration for streaming connections.
9
10 Extends the basic options with all Java ConnectionOptions fields.
11 """
12
13 def __init__(self, *,
14 initial_window_size: int = 6,
15 max_window_size: int = 128,
16 connect_timeout: int = 60000,
17 read_timeout: int = -1,
18 write_timeout: int = -1,
19 max_message_size: int = 1730,
20 inactivity_timeout: int = 90000,
21 max_resends: int = 8,
22 initial_rtt: int = 10000,
23 initial_rto: int = 9000,
24 max_concurrent_streams: int = 50,
25 accept_backlog: int = 5,
26 connect_delay: int = -1,
27 inactivity_action: str = "disconnect",
28 buffer_size: int = 64 * 1024,
29 recv_buffer_size: int = 64 * 1024,
30 slow_start_threshold: int = 14,
31 disable_nagle: bool = False,
32 profile: str = "bulk",
33 congestion_avoidance: bool = True,
34 answer_pings: bool = True,
35 enforce_proto: bool = False,
36 max_conns_per_minute: int = 0,
37 max_conns_per_hour: int = 0,
38 max_total_conns_per_minute: int = 0,
39 max_total_conns_per_hour: int = 0,
40 max_conns_per_day: int = 0,
41 tag_slowness_threshold: int = 0,
42 max_initial_window: int = 0,
43 rtt_dampening: float = 0.75,
44 rto_min: int = 1000,
45 ):
46 self.initial_window_size = initial_window_size
47 self.max_window_size = max_window_size
48 self.connect_timeout = connect_timeout
49 self.read_timeout = read_timeout
50 self.write_timeout = write_timeout
51 self.max_message_size = max_message_size
52 self.inactivity_timeout = inactivity_timeout
53 self.max_resends = max_resends
54 self.initial_rtt = initial_rtt
55 self.initial_rto = initial_rto
56 self.max_concurrent_streams = max_concurrent_streams
57 self.accept_backlog = accept_backlog
58 self.connect_delay = connect_delay
59 self.inactivity_action = inactivity_action
60 self.buffer_size = buffer_size
61 self.recv_buffer_size = recv_buffer_size
62 self.slow_start_threshold = slow_start_threshold
63 self.disable_nagle = disable_nagle
64 self.profile = profile
65 self.congestion_avoidance = congestion_avoidance
66 self.answer_pings = answer_pings
67 self.enforce_proto = enforce_proto
68 self.max_conns_per_minute = max_conns_per_minute
69 self.max_conns_per_hour = max_conns_per_hour
70 self.max_total_conns_per_minute = max_total_conns_per_minute
71 self.max_total_conns_per_hour = max_total_conns_per_hour
72 self.max_conns_per_day = max_conns_per_day
73 self.tag_slowness_threshold = tag_slowness_threshold
74 self.max_initial_window = max_initial_window
75 self.rtt_dampening = rtt_dampening
76 self.rto_min = rto_min
77
78 def merge(self, **kwargs):
79 for k, v in kwargs.items():
80 if hasattr(self, k):
81 setattr(self, k, v)
82
83 def __eq__(self, other) -> bool:
84 if not isinstance(other, StreamOptions):
85 return NotImplemented
86 return self.__dict__ == other.__dict__