| 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 | { |
no test coverage detected