MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / HandlePing

Method HandlePing

libi2pd/Streaming.cpp:668–688  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

666 }
667
668 void Stream::HandlePing (Packet * packet)
669 {
670 uint16_t flags = packet->GetFlags ();
671 if (ProcessOptions (flags, packet) && m_RemoteIdentity)
672 {
673 // send pong
674 Packet p;
675 memset (p.buf, 0, 22); // minimal header all zeroes
676 memcpy (p.buf + 4, packet->buf, 4); // but receiveStreamID is the sendStreamID from the ping
677 htobe16buf (p.buf + 18, PACKET_FLAG_ECHO); // and echo flag
678 auto payloadLen = int(packet->len) - (packet->GetPayload () - packet->buf);
679 if (payloadLen > 0)
680 memcpy (p.buf + 22, packet->GetPayload (), payloadLen);
681 else
682 payloadLen = 0;
683 p.len = payloadLen + 22;
684 SendPackets (std::vector<Packet *> { &p });
685 LogPrint (eLogDebug, "Streaming: Pong of ", p.len, " bytes sent");
686 }
687 m_LocalDestination.DeletePacket (packet);
688 }
689
690 void Stream::ProcessAck (Packet * packet)
691 {

Callers 1

HandleNextPacketMethod · 0.80

Calls 5

htobe16bufFunction · 0.85
LogPrintFunction · 0.85
GetFlagsMethod · 0.80
DeletePacketMethod · 0.80
GetPayloadMethod · 0.45

Tested by

no test coverage detected