"""Stream connection options. Ported from net.i2p.client.streaming.impl.ConnectionOptions. """ class StreamOptions: """Configuration for streaming connections. Extends the basic options with all Java ConnectionOptions fields. """ def __init__(self, *, initial_window_size: int = 6, max_window_size: int = 128, connect_timeout: int = 60000, read_timeout: int = -1, write_timeout: int = -1, max_message_size: int = 1730, inactivity_timeout: int = 90000, max_resends: int = 8, initial_rtt: int = 10000, initial_rto: int = 9000, max_concurrent_streams: int = 50, accept_backlog: int = 5, connect_delay: int = -1, inactivity_action: str = "disconnect", buffer_size: int = 64 * 1024, recv_buffer_size: int = 64 * 1024, slow_start_threshold: int = 14, disable_nagle: bool = False, profile: str = "bulk", congestion_avoidance: bool = True, answer_pings: bool = True, enforce_proto: bool = False, max_conns_per_minute: int = 0, max_conns_per_hour: int = 0, max_total_conns_per_minute: int = 0, max_total_conns_per_hour: int = 0, max_conns_per_day: int = 0, tag_slowness_threshold: int = 0, max_initial_window: int = 0, rtt_dampening: float = 0.75, rto_min: int = 1000, ): self.initial_window_size = initial_window_size self.max_window_size = max_window_size self.connect_timeout = connect_timeout self.read_timeout = read_timeout self.write_timeout = write_timeout self.max_message_size = max_message_size self.inactivity_timeout = inactivity_timeout self.max_resends = max_resends self.initial_rtt = initial_rtt self.initial_rto = initial_rto self.max_concurrent_streams = max_concurrent_streams self.accept_backlog = accept_backlog self.connect_delay = connect_delay self.inactivity_action = inactivity_action self.buffer_size = buffer_size self.recv_buffer_size = recv_buffer_size self.slow_start_threshold = slow_start_threshold self.disable_nagle = disable_nagle self.profile = profile self.congestion_avoidance = congestion_avoidance self.answer_pings = answer_pings self.enforce_proto = enforce_proto self.max_conns_per_minute = max_conns_per_minute self.max_conns_per_hour = max_conns_per_hour self.max_total_conns_per_minute = max_total_conns_per_minute self.max_total_conns_per_hour = max_total_conns_per_hour self.max_conns_per_day = max_conns_per_day self.tag_slowness_threshold = tag_slowness_threshold self.max_initial_window = max_initial_window self.rtt_dampening = rtt_dampening self.rto_min = rto_min def merge(self, **kwargs): for k, v in kwargs.items(): if hasattr(self, k): setattr(self, k, v) def __eq__(self, other) -> bool: if not isinstance(other, StreamOptions): return NotImplemented return self.__dict__ == other.__dict__