40 for(
size_t iWord = 0; iWord < size;iWord++){
41 ss <<
"0x" << std::hex << std::setfill(
'0') << std::setw(4) << iWord;
42 ss <<
": 0x" << std::hex << std::setfill(
'0') << std::setw(2) << int(data[iWord]);
45 ss << std::hex << std::setfill(
'0') << std::setw(2) << int(data[iWord]);
104 if(port_offset > 128){
105 BUException::BNL_UDP_PORT_OUT_OF_RANGE e;
116 struct addrinfo * res;
117 if(getaddrinfo(address.c_str(),NULL,NULL,&res)){
119 if(address.size() <= 5 && 1 == std::count(address.begin(),address.end(),
'.')){
120 std::string strCrate = address.substr(0,address.find(
'.'));
121 std::string strSlot = address.substr(address.find(
'.')+1);
122 if(strCrate.size() != 0 && strSlot.size() != 0){
123 uint8_t crate = strtoul(strCrate.c_str(),NULL,0);
124 uint8_t slot = strtoul(strSlot.c_str(), NULL,0);
125 if( (((crate > 0) && (crate < 7)) || 0xF == crate) &&
126 (((slot > 0) && (slot < 7)) || 0xF == slot)){
147 if(getaddrinfo(address.c_str(),NULL,NULL,&res)){
148 BUException::BAD_REMOTE_IP e;
150 e.Append(address.c_str());
151 e.Append(
" could not be resolved.\n");
160 BUException::BAD_SOCKET e;
161 e.Append(
"read socket\n");
165 BUException::BAD_SOCKET e;
166 e.Append(
"write socket\n");
171 setsockopt(
readSocketFD, SOL_SOCKET, SO_RCVTIMEO, (
const char*)&tv,
sizeof(
struct timeval));
172 setsockopt(
writeSocketFD, SOL_SOCKET, SO_RCVTIMEO, (
const char*)&tv,
sizeof(
struct timeval));
175 readAddr = *((
struct sockaddr_in *) res->ai_addr);
178 BUException::CONNECTION_FAILED e;
179 e.Append(
"read socket connect\n");
180 e.Append(strerror(errno));
184 writeAddr = *((
struct sockaddr_in *) res->ai_addr);
187 BUException::CONNECTION_FAILED e;
188 e.Append(
"write socket connect\n");
189 e.Append(strerror(errno));
227 packet.
data_MSW = htons(uint16_t((value >> 16) & 0xFFFF));
228 packet.
data_LSW = htons(uint16_t((value >> 0) & 0xFFFF));
232 ssize_t send_size =
sizeof(packet);
233 ssize_t sent_size = 0;
235 &packet,send_size,0))){
237 BUException::SEND_FAILED e;
239 e.Append(
"BNL_UDP::Write(uint16_t,uint32_t)\n");
240 e.Append(
"Errnum: ");
241 e.Append(strerror(errno));
251 if(-1 == reply_size){
252 BUException::BAD_REPLY e;
253 std::stringstream ss;
254 e.Append(
"BNL_UDP::Write(uint16_t,uint32_t)\n");
255 ss <<
"Errnum(" << errno <<
"): " << strerror(errno) <<
"\n";
256 e.Append(ss.str().c_str());
257 e.Append(
dump_packet((uint8_t*) &packet,send_size).c_str());
260 BUException::BAD_REPLY e;
261 std::stringstream ss;
262 ss <<
"Bad Size: " << reply_size <<
"\n";
263 e.Append(
"BNL_UDP::Write(uint16_t,uint32_t)\n");
264 e.Append(ss.str().c_str());
268 uint16_t reply_address = uint16_t(
buffer[0] << 8 |
buffer[1]);
269 if( reply_address != address){
270 BUException::BAD_REPLY e;
271 std::stringstream ss;
272 ss <<
"Bad address: " << uint32_t(address) <<
" != " << uint32_t(reply_address) <<
"\n";
273 e.Append(
"BNL_UDP::Write(uint16_t,uint32_t)\n");
274 e.Append(ss.str().c_str());
403 ssize_t send_size =
sizeof(packet);
404 ssize_t sent_size = 0;
406 &packet,send_size,0))){
408 BUException::SEND_FAILED e;
410 e.Append(
"BNL_UDP::Read(uint16_t)\n");
411 e.Append(
"Errnum: ");
412 e.Append(strerror(errno));
421 if(ssize_t(-1) == reply_size){
422 BUException::BAD_REPLY e;
423 std::stringstream ss;
424 e.Append(
"BNL_UDP::Read(uint16_t)\n");
425 ss <<
"Errnum(" << errno <<
"): " << strerror(errno) <<
"\n";
426 e.Append(ss.str().c_str());
427 e.Append(
dump_packet((uint8_t *)&packet,send_size).c_str());
430 BUException::BAD_REPLY e;
431 std::stringstream ss;
432 ss <<
"Bad Size: " << reply_size <<
"\n";
433 e.Append(
"BNL_UDP::Read(uint16_t)\n");
434 e.Append(ss.str().c_str());
438 uint16_t reply_address = uint16_t(
buffer[0] << 8 |
buffer[1]);
439 if( reply_address != address){
440 BUException::BAD_REPLY e;
441 std::stringstream ss;
442 ss <<
"Bad address: " << uint32_t(address) <<
" != " << uint32_t(reply_address) <<
"\n";
443 e.Append(
"BNL_UDP::Read(uint16_t)\n");
444 e.Append(ss.str().c_str());
451 uint32_t ret = ( (uint32_t(
buffer[2]) << 24) |
452 (uint32_t(
buffer[3]) << 16) |
453 (uint32_t(
buffer[4]) << 8) |
454 (uint32_t(
buffer[5]) << 0));