A Python port of the Invisible Internet Project (I2P)
at main 86 lines 3.5 kB view raw
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__