35 std::vector<uint8_t> request;
40 request.insert( request.end(), payload.begin(), payload.end());
42 std::stringstream request_str;
43 for (
size_t i = 0; i < request.size(); ++i) {
44 request_str << std::setfill(
'0') << std::setw(2) << std::hex << +request[i] <<
" ";
46 TLOG() <<
"sending request to AMC: " << request_str.str();
50 std::vector<uint8_t> reply(516);
52 boost::asio::ip::udp::endpoint sender_endpoint;
53 boost::system::error_code ec;
57 std::this_thread::sleep_for(std::chrono::milliseconds(100));
58 len =
m_socket.receive_from(boost::asio::buffer(reply), sender_endpoint, 0, ec);
70 throw std::runtime_error(
"Packet too short to be valid");
73 boost::endian::big_uint16_t rpl_opcode_be;
74 std::memcpy(&rpl_opcode_be, reply.data(),
sizeof(rpl_opcode_be));
85 std::memcpy(&header, reply.data(),
sizeof(header));
87 TLOG() <<
"Received DATA packet:\n" <<
88 " Block #: "<<
static_cast<uint16_t
>(header.
block) <<
"\n" <<
89 " Payload size: "<< reply.size() -
sizeof(header) <<
" bytes\n";
94 reply.erase(reply.begin(), reply.begin() + 2);
101 std::memcpy(&header, reply.data(),
sizeof(header));
109 std::memcpy(&header, reply.data(),
sizeof(header));
111 std::string error_msg(
reinterpret_cast<const char*
>(reply.data() +
sizeof(header)),
112 reply.size() -
sizeof(header));