struct sockaddr_in socketInfo;
std::chrono::steady_clock::time_point lastUpdated;
- // ipv4 address and port to ConnectionData
+ // ipv4 address and port (as ConnectionIdentifier) to ConnectionData
std::unordered_map<ConnectionIdentifier, ConnectionData, ConnectionIdentifier::Hasher> conMap;
- // id to ipv4 address
+ // id to ipv4 address and port (as ConnectionIdentifier)
std::unordered_map<uint32_t, ConnectionIdentifier> idMap;
std::default_random_engine rng_engine;
void UDPC::ConnectionData::cleanupSentPkts() {
uint32_t id;
while(sentPkts.size() > UDPC_SENT_PKTS_MAX_SIZE) {
- id = ntohl(*((uint32_t*)(sentPkts.front().data + 8)));
- sentInfoMap.erase(id);
+ id = *((uint32_t*)(sentPkts.front().data + 8));
+ auto iter = sentInfoMap.find(id);
+ assert(iter != sentInfoMap.end()
+ && "Sent packet must have correspoding entry in sentInfoMap");
+ sentInfoMap.erase(iter);
sentPkts.pop_front();
}
}
sizeof(struct sockaddr_in));
if(sentBytes != 20) {
// TODO log fail of sending connection-initiate-packet
+ continue;
}
} else {
// is server, initiate connection to client
sizeof(struct sockaddr_in));
if(sentBytes != 20) {
// TODO log fail send init connection packet as server
+ continue;
}
}
continue;
sizeof(struct sockaddr_in));
if(sentBytes != 20) {
// TODO log fail send heartbeat packet
+ continue;
}
UDPC_PacketInfo pInfo{{0}, 0, 0, 0, 0, 0, 0};
pInfo.receiver = iter->first.getAddr();
pInfo.senderPort = c->socketInfo.sin_port;
pInfo.receiverPort = iter->second.port;
- *((uint32_t*)(pInfo.data + 8)) = htonl(iter->second.lseq - 1);
+ *((uint32_t*)(pInfo.data + 8)) = iter->second.lseq - 1;
iter->second.sentPkts.push_back(std::move(pInfo));
iter->second.cleanupSentPkts();
sizeof(struct sockaddr_in));
if(sentBytes != 20 + pInfo.dataSize) {
// TODO log fail send packet
+ continue;
}
if((pInfo.flags & 0x4) == 0) {
sentPInfo.receiver = iter->first.getAddr();
sentPInfo.senderPort = c->socketInfo.sin_port;
sentPInfo.receiverPort = iter->second.port;
- *((uint32_t*)(sentPInfo.data + 8)) = htonl(iter->second.lseq - 1);
+ *((uint32_t*)(sentPInfo.data + 8)) = iter->second.lseq - 1;
iter->second.sentPkts.push_back(std::move(pInfo));
iter->second.cleanupSentPkts();