std::pair SocketWire::Base::read_header()

in rd-cpp/src/rd_framework_cpp/src/main/wire/SocketWire.cpp [250:306]


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);
	}
}