diff --git a/include/opendht/peer_discovery.h b/include/opendht/peer_discovery.h index 6f607741e795959d85f06d169d2ca11eaaec1f0c..0ee71f3899fbdbae1963aac2f6fc3627a981fe9a 100644 --- a/include/opendht/peer_discovery.h +++ b/include/opendht/peer_discovery.h @@ -119,19 +119,6 @@ private: * Sender Parameters Setup */ void sender_setup(const dht::InfoHash& nodeId, in_port_t port_to_send); - - /** - * Binary Converters - */ - static void inttolitend(uint32_t x, uint8_t *lit_int) { - lit_int[0] = (uint8_t)(x >> 0); - lit_int[1] = (uint8_t)(x >> 8); - } - - static uint16_t litendtoint(uint8_t *lit_int) { - return (uint32_t)lit_int[0] << 0 - | (uint32_t)lit_int[1] << 8; - } }; } diff --git a/src/peer_discovery.cpp b/src/peer_discovery.cpp index bb282dfe5a7dc7d12c95daee0494206d36d80e04..540d116182d0526c0b38c23bf403e4002c0419e4 100644 --- a/src/peer_discovery.cpp +++ b/src/peer_discovery.cpp @@ -181,20 +181,15 @@ void PeerDiscovery::sender_setup(const dht::InfoHash& nodeId, in_port_t port_to_send) { nodeId_ = nodeId; - //Set up for Sender + // Setup sender address sockAddrSend_.setFamily(domain_); sockAddrSend_.setAddress(domain_ == AF_INET ? MULTICAST_ADDRESS_IPV4 : MULTICAST_ADDRESS_IPV6); sockAddrSend_.setPort(port_); - //Setup for send data - int port_node = port_to_send; - uint8_t port_node_binary[2]; - PeerDiscovery::inttolitend(port_node,port_node_binary); - - //Copy Node id and node port - memcpy (data_send_.data(), nodeId.data(), nodeId.size()); - data_send_[InfoHash::size()] = port_node_binary[0]; - data_send_[InfoHash::size() + 1] = port_node_binary[1]; + // Setup sent data + std::copy_n(nodeId.cbegin(), nodeId.size(), data_send_.begin()); + auto portAddr = reinterpret_cast<in_port_t*>(data_send_.data() + dht::InfoHash::size()); + *portAddr = htons(port_to_send); } void @@ -252,29 +247,22 @@ PeerDiscovery::listener_thread(PeerDiscoveredCallback callback) } if (data_coming > 0) { - - if(FD_ISSET(stop_readfd, &readfds)){ break; } + if (FD_ISSET(stop_readfd, &readfds)) { break; } std::array<uint8_t,dht::InfoHash::size() + sizeof(in_port_t)> data_receive; size_t data_receive_size = data_receive.size(); auto from = recvFrom(data_receive.data(), data_receive_size); - //Data_receive_size as a value-result member will hlep to filter packs + // Data_receive_size as a value-result member will hlep to filter packs if(data_receive_size != data_receive.size()){ - perror("Data Received Unmatch"); + // std::cerr << "Received invalid peer discovery packet" << std::endl; continue; } - std::array<uint8_t,dht::InfoHash::size()> data_infohash; - uint8_t data_port[2]; - - memcpy (data_infohash.data(), data_receive.data(), dht::InfoHash::size()); - data_port[0] = data_receive[dht::InfoHash::size()]; - data_port[1] = data_receive[dht::InfoHash::size() + 1]; - - auto port = PeerDiscovery::litendtoint(data_port); - auto nodeId = dht::InfoHash(data_infohash.data(), dht::InfoHash::size()); - + dht::InfoHash nodeId; + std::copy_n(data_receive.begin(), dht::InfoHash::size(), nodeId.begin()); + auto portAddr = reinterpret_cast<in_port_t*>(data_receive.data() + dht::InfoHash::size()); + auto port = ntohs(*portAddr); if (nodeId != nodeId_){ from.setPort(port); callback(nodeId, from);