| 83 | } |
| 84 | |
| 85 | Stream::Stream (boost::asio::io_context& service, StreamingDestination& local, |
| 86 | std::shared_ptr<const i2p::data::LeaseSet> remote, int port): m_Service (service), |
| 87 | m_SendStreamID (0), m_SequenceNumber (0), m_DropWindowDelaySequenceNumber (INITIAL_WINDOW_SIZE), |
| 88 | m_TunnelsChangeSequenceNumber (0), m_LastReceivedSequenceNumber (-1), m_PreviousReceivedSequenceNumber (-1), |
| 89 | m_LastConfirmedReceivedSequenceNumber (0), // for limit inbound speed |
| 90 | m_Status (eStreamStatusNew), m_IsIncoming (false), m_IsAckSendScheduled (false), m_IsNAcked (false), m_IsFirstACK (false), |
| 91 | m_IsResendNeeded (false), m_IsFirstRttSample (false), m_IsSendTime (true), |
| 92 | m_IsWinDropped (true), m_IsChoking2 (false), m_IsChoking3 (false), m_IsClientChoked (false), m_IsClientChoked2 (false), |
| 93 | m_IsTimeOutResend (false), m_IsImmediateAckRequested (false), m_IsRemoteLeaseChangeInProgress (false), |
| 94 | m_IsBufferEmpty (false), m_IsJavaClient (false), m_DontSign (local.GetOwner ()->IsStreamingDontSign ()), |
| 95 | m_LocalDestination (local), m_RemoteLeaseSet (remote), m_ReceiveTimer (m_Service), |
| 96 | m_SendTimer (m_Service), m_ResendTimer (m_Service), m_AckSendTimer (m_Service), m_NumSentBytes (0), |
| 97 | m_NumReceivedBytes (0), m_Port (port), m_RTT (INITIAL_RTT), m_MinRTT (INITIAL_RTT), |
| 98 | m_SlowRTT (INITIAL_RTT), m_FastRTT (INITIAL_RTT), m_WindowSize (INITIAL_WINDOW_SIZE), |
| 99 | m_MaxWindowSize (local.GetOwner ()->GetStreamingMaxWindowSize ()), m_LastWindowDropSize (0), |
| 100 | m_WindowDropTargetSize (0), m_WindowIncCounter (0), m_RTO (INITIAL_RTO), |
| 101 | m_AckDelay (local.GetOwner ()->GetStreamingAckDelay ()), m_PrevRTTSample (INITIAL_RTT), |
| 102 | m_Jitter (0), m_MinPacingTime (0), m_PacingTime (INITIAL_PACING_TIME), m_PacingTimeRem (0), |
| 103 | m_LastSendTime (0), m_LastACKRecieveTime (0), m_ACKRecieveInterval (local.GetOwner ()->GetStreamingAckDelay ()), |
| 104 | m_RemoteLeaseChangeTime (0), m_LastWindowIncTime (0), m_LastACKRequestTime (0), m_LastACKSendTime (0), |
| 105 | m_PacketACKInterval (1), m_PacketACKIntervalRem (0), // for limit inbound speed |
| 106 | m_MaxNumResendAttempts (local.GetOwner ()->GetStreamingMaxResends ()), |
| 107 | m_NumResendAttempts (0), m_NumPacketsToSend (0), m_JitterAccum (0), m_JitterDiv (1), m_MTU (STREAMING_MTU) |
| 108 | { |
| 109 | RAND_bytes ((uint8_t *)&m_RecvStreamID, 4); |
| 110 | m_RemoteIdentity = remote->GetIdentity (); |
| 111 | auto outboundSpeed = local.GetOwner ()->GetStreamingOutboundSpeed (); |
| 112 | if (outboundSpeed) |
| 113 | m_MinPacingTime = (1000000LL*STREAMING_MTU)/outboundSpeed; |
| 114 | |
| 115 | auto inboundSpeed = local.GetOwner ()->GetStreamingInboundSpeed (); // for limit inbound speed |
| 116 | if (inboundSpeed) |
| 117 | m_PacketACKInterval = (1000000LL*STREAMING_MTU)/inboundSpeed; |
| 118 | } |
| 119 | |
| 120 | Stream::Stream (boost::asio::io_context& service, StreamingDestination& local): |
| 121 | m_Service (service), m_SendStreamID (0), m_SequenceNumber (0), m_DropWindowDelaySequenceNumber (INITIAL_WINDOW_SIZE), |
nothing calls this directly
no test coverage detected