diff --git a/Destination.cpp b/Destination.cpp index 73423b4a..c2a8913f 100644 --- a/Destination.cpp +++ b/Destination.cpp @@ -121,7 +121,7 @@ namespace stream Stream * StreamingDestination::CreateNewOutgoingStream (const i2p::data::LeaseSet& remote) { - Stream * s = new Stream (m_Service, this, remote); + Stream * s = new Stream (m_Service, *this, remote); std::unique_lock l(m_StreamsMutex); m_Streams[s->GetRecvStreamID ()] = s; return s; @@ -129,7 +129,7 @@ namespace stream Stream * StreamingDestination::CreateNewIncomingStream () { - Stream * s = new Stream (m_Service, this); + Stream * s = new Stream (m_Service, *this); std::unique_lock l(m_StreamsMutex); m_Streams[s->GetRecvStreamID ()] = s; return s; @@ -320,7 +320,7 @@ namespace stream void StreamingDestinations::DeleteStream (Stream * stream) { if (stream) - stream->GetLocalDestination ()->DeleteStream (stream); + stream->GetLocalDestination ().DeleteStream (stream); } StreamingDestination * StreamingDestinations::FindLocalDestination (const i2p::data::IdentHash& destination) const diff --git a/Streaming.cpp b/Streaming.cpp index 64ce8d16..0c43220e 100644 --- a/Streaming.cpp +++ b/Streaming.cpp @@ -10,7 +10,7 @@ namespace i2p { namespace stream { - Stream::Stream (boost::asio::io_service& service, StreamingDestination * local, + Stream::Stream (boost::asio::io_service& service, StreamingDestination& local, const i2p::data::LeaseSet& remote): m_Service (service), m_SendStreamID (0), m_SequenceNumber (0), m_LastReceivedSequenceNumber (-1), m_IsOpen (false), m_LeaseSetUpdated (true), m_LocalDestination (local), m_RemoteLeaseSet (&remote), @@ -20,7 +20,7 @@ namespace stream UpdateCurrentRemoteLease (); } - Stream::Stream (boost::asio::io_service& service, StreamingDestination * local): + Stream::Stream (boost::asio::io_service& service, StreamingDestination& local): m_Service (service), m_SendStreamID (0), m_SequenceNumber (0), m_LastReceivedSequenceNumber (-1), m_IsOpen (false), m_LeaseSetUpdated (true), m_LocalDestination (local), m_RemoteLeaseSet (nullptr), m_RoutingSession (nullptr), @@ -102,7 +102,7 @@ namespace stream { // we have received duplicate. Most likely our outbound tunnel is dead LogPrint ("Duplicate message ", receivedSeqn, " received"); - m_LocalDestination->ResetCurrentOutboundTunnel (); // pick another outbound tunnel + m_LocalDestination.ResetCurrentOutboundTunnel (); // pick another outbound tunnel UpdateCurrentRemoteLease (); // pick another lease SendQuickAck (); // resend ack for previous message again delete packet; // packet dropped @@ -259,11 +259,11 @@ namespace stream if (isNoAck) flags |= PACKET_FLAG_NO_ACK; *(uint16_t *)(packet + size) = htobe16 (flags); size += 2; // flags - size_t identityLen = m_LocalDestination->GetIdentity ().GetFullLen (); - size_t signatureLen = m_LocalDestination->GetIdentity ().GetSignatureLen (); + size_t identityLen = m_LocalDestination.GetIdentity ().GetFullLen (); + size_t signatureLen = m_LocalDestination.GetIdentity ().GetSignatureLen (); *(uint16_t *)(packet + size) = htobe16 (identityLen + signatureLen + 2); // identity + signature + packet size size += 2; // options size - m_LocalDestination->GetIdentity ().ToBuffer (packet + size, identityLen); + m_LocalDestination.GetIdentity ().ToBuffer (packet + size, identityLen); size += identityLen; // from *(uint16_t *)(packet + size) = htobe16 (STREAMING_MTU); size += 2; // max packet size @@ -276,7 +276,7 @@ namespace stream buf += sentLen; len -= sentLen; size += sentLen; // payload - m_LocalDestination->Sign (packet, size, signature); + m_LocalDestination.Sign (packet, size, signature); } else { @@ -347,13 +347,13 @@ namespace stream size++; // resend delay *(uint16_t *)(packet + size) = htobe16 (PACKET_FLAG_CLOSE | PACKET_FLAG_SIGNATURE_INCLUDED); size += 2; // flags - size_t signatureLen = m_LocalDestination->GetIdentity ().GetSignatureLen (); + size_t signatureLen = m_LocalDestination.GetIdentity ().GetSignatureLen (); *(uint16_t *)(packet + size) = htobe16 (signatureLen); // signature only size += 2; // options size uint8_t * signature = packet + size; memset (packet + size, 0, signatureLen); size += signatureLen; // signature - m_LocalDestination->Sign (packet, size, signature); + m_LocalDestination.Sign (packet, size, signature); p->len = size; SendPacket (p); @@ -413,7 +413,7 @@ namespace stream const i2p::data::LeaseSet * leaseSet = nullptr; if (m_LeaseSetUpdated) { - leaseSet = m_LocalDestination->GetLeaseSet (); + leaseSet = m_LocalDestination.GetLeaseSet (); m_LeaseSetUpdated = false; } @@ -436,7 +436,7 @@ namespace stream }); leaseSet = nullptr; // send leaseSet only one time } - m_LocalDestination->SendTunnelDataMsgs (msgs); + m_LocalDestination.SendTunnelDataMsgs (msgs); } else LogPrint ("All leases are expired"); @@ -469,7 +469,7 @@ namespace stream } if (packets.size () > 0) { - m_LocalDestination->ResetCurrentOutboundTunnel (); // pick another outbound tunnel + m_LocalDestination.ResetCurrentOutboundTunnel (); // pick another outbound tunnel UpdateCurrentRemoteLease (); // pick another lease SendPackets (packets); } diff --git a/Streaming.h b/Streaming.h index 8c570260..fbb39659 100644 --- a/Streaming.h +++ b/Streaming.h @@ -77,8 +77,8 @@ namespace stream { public: - Stream (boost::asio::io_service& service, StreamingDestination * local, const i2p::data::LeaseSet& remote); // outgoing - Stream (boost::asio::io_service& service, StreamingDestination * local); // incoming + Stream (boost::asio::io_service& service, StreamingDestination& local, const i2p::data::LeaseSet& remote); // outgoing + Stream (boost::asio::io_service& service, StreamingDestination& local); // incoming ~Stream (); uint32_t GetSendStreamID () const { return m_SendStreamID; }; @@ -87,7 +87,7 @@ namespace stream const i2p::data::IdentityEx& GetRemoteIdentity () const { return m_RemoteIdentity; }; bool IsOpen () const { return m_IsOpen; }; bool IsEstablished () const { return m_SendStreamID; }; - StreamingDestination * GetLocalDestination () { return m_LocalDestination; }; + StreamingDestination& GetLocalDestination () { return m_LocalDestination; }; void HandleNextPacket (Packet * packet); size_t Send (const uint8_t * buf, size_t len); @@ -124,7 +124,7 @@ namespace stream uint32_t m_SendStreamID, m_RecvStreamID, m_SequenceNumber; int32_t m_LastReceivedSequenceNumber; bool m_IsOpen, m_LeaseSetUpdated; - StreamingDestination * m_LocalDestination; + StreamingDestination& m_LocalDestination; i2p::data::IdentityEx m_RemoteIdentity; const i2p::data::LeaseSet * m_RemoteLeaseSet; i2p::garlic::GarlicRoutingSession * m_RoutingSession;