in src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/SocketWire.cpp [243:299]
std::pair<int, sequence_number_t> SocketWire::Base::read_header() const
{
int32_t len = 0;
sequence_number_t seqn = 0;
while (true)
{
if (!read_integral_from_socket(len))
{
return INVALID_HEADER;
}
if (len == PING_MESSAGE_LENGTH)
{
int32_t received_timestamp = 0;
int32_t received_counterpart_timestamp = 0;
if (!read_integral_from_socket(received_timestamp))
{
return INVALID_HEADER;
}
if (!read_integral_from_socket(received_counterpart_timestamp))
{
return INVALID_HEADER;
}
counterpart_timestamp = received_timestamp;
counterpart_acknowledge_timestamp = received_counterpart_timestamp;
if ((connection_established(current_timestamp, counterpart_acknowledge_timestamp)))
{
if (!heartbeatAlive.get())
{ // only on change
logger->trace(
"Connection is alive after receiving PING {}: "
"received_timestamp: {}, "
"received_counterpart_timestamp: {}, "
"current_timestamp: {}, "
"counterpart_timestamp: {}, "
"counterpart_acknowledge_timestamp: {}, ",
id, received_timestamp, received_counterpart_timestamp, current_timestamp, counterpart_timestamp,
counterpart_acknowledge_timestamp);
}
heartbeatAlive.set(true);
}
continue;
}
if (!read_integral_from_socket(seqn))
{
return INVALID_HEADER;
}
if (len == ACK_MESSAGE_LENGTH)
{
async_send_buffer.acknowledge(seqn);
continue;
}
return std::make_pair(len, seqn);
}
}