31 : m_dataHandler(dataHandler)
41 std::unique_ptr<TcpSocket> pTransport(
new TcpSocket());
43 if (pTransport->connect(hostname, port) != 0)
65 std::vector<std::uint8_t> buffer;
73 if (0x02 == buffer[0])
93 std::vector<uint8_t> buffer;
96 if (
m_pTransport->read(buffer,
sizeof(uint32_t)) < (
int)
sizeof(uint32_t))
98 std::printf(
"Received less than the required 4 package length bytes.\n");
102 const uint32_t packageLength = readUnalignBigEndian<uint32_t>(buffer.data());
105 int remainingBytesToReceive = packageLength;
109 const uint16_t protocolVersion = readUnalignBigEndian<uint16_t>(buffer.data());
110 const uint8_t packetType = readUnalignBigEndian<uint8_t>(buffer.data() + 2);
111 if (protocolVersion != 0x001)
113 std::printf(
"Received unknown protocol version %d.\n", protocolVersion);
116 if (packetType != 0x62)
118 std::printf(
"Received unknown packet type %d\n.", packetType);
128 std::vector<uint8_t>::iterator itBufSegment = itBuf;
133 itBufSegment +=
sizeof(uint16_t);
134 const uint16_t numSegments = readUnalignBigEndian<uint16_t>(&*itBufSegment);
135 itBufSegment +=
sizeof(uint16_t);
138 std::vector<uint32_t> offset(numSegments);
139 std::vector<uint32_t> changeCounter(numSegments);
140 for (
int i = 0; i < numSegments; i++)
142 offset[i] = readUnalignBigEndian<uint32_t>(&*itBufSegment);
143 itBufSegment +=
sizeof(uint32_t);
144 changeCounter[i] = readUnalignBigEndian<uint32_t>(&*itBufSegment);
145 itBufSegment +=
sizeof(uint32_t);
150 std::string xmlSegment((itBuf + offset[0]), (itBuf + offset[1]));
155 size_t binarySegmentSize = offset[2] - offset[1];
156 result =
m_dataHandler->parseBinaryData((itBuf + offset[1]), binarySegmentSize);