repair more node communication problems after refactor

This commit is contained in:
Stephen Birarda 2014-01-28 12:25:44 -08:00
parent ffefc529f3
commit b009cd8e67
5 changed files with 12 additions and 15 deletions

View file

@ -34,7 +34,8 @@ void DatagramProcessor::processDatagrams() {
while (NodeList::getInstance()->getNodeSocket().hasPendingDatagrams()) { while (NodeList::getInstance()->getNodeSocket().hasPendingDatagrams()) {
incomingPacket.resize(nodeList->getNodeSocket().pendingDatagramSize()); incomingPacket.resize(nodeList->getNodeSocket().pendingDatagramSize());
nodeList->getNodeSocket().readDatagram(incomingPacket.data(), incomingPacket.size()); nodeList->getNodeSocket().readDatagram(incomingPacket.data(), incomingPacket.size(),
senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer());
_packetCount++; _packetCount++;
_byteCount += incomingPacket.size(); _byteCount += incomingPacket.size();

View file

@ -46,11 +46,12 @@ Assignment::Assignment() :
_uuid(), _uuid(),
_command(Assignment::RequestCommand), _command(Assignment::RequestCommand),
_type(Assignment::AllTypes), _type(Assignment::AllTypes),
_pool(),
_location(Assignment::LocalLocation), _location(Assignment::LocalLocation),
_numberOfInstances(1), _numberOfInstances(1),
_payload() _payload()
{ {
setPool(NULL);
} }
Assignment::Assignment(Assignment::Command command, Assignment::Type type, const QString& pool, Assignment::Location location) : Assignment::Assignment(Assignment::Command command, Assignment::Type type, const QString& pool, Assignment::Location location) :
@ -65,8 +66,6 @@ Assignment::Assignment(Assignment::Command command, Assignment::Type type, const
// this is a newly created assignment, generate a random UUID // this is a newly created assignment, generate a random UUID
_uuid = QUuid::createUuid(); _uuid = QUuid::createUuid();
} }
setPool(pool);
} }
Assignment::Assignment(const QByteArray& packet) : Assignment::Assignment(const QByteArray& packet) :

View file

@ -134,7 +134,7 @@ float Node::getAverageKilobitsPerSecond() {
} }
} }
QDataStream& operator>>(QDataStream& out, const Node& node) { QDataStream& operator<<(QDataStream& out, const Node& node) {
out << node._type; out << node._type;
out << node._uuid; out << node._uuid;
out << node._publicSocket; out << node._publicSocket;
@ -143,7 +143,7 @@ QDataStream& operator>>(QDataStream& out, const Node& node) {
return out; return out;
} }
QDataStream& operator<<(QDataStream& in, Node& node) { QDataStream& operator>>(QDataStream& in, Node& node) {
in >> node._type; in >> node._type;
in >> node._uuid; in >> node._uuid;
in >> node._publicSocket; in >> node._publicSocket;

View file

@ -88,8 +88,8 @@ public:
void setClockSkewUsec(int clockSkew) { _clockSkewUsec = clockSkew; } void setClockSkewUsec(int clockSkew) { _clockSkewUsec = clockSkew; }
QMutex& getMutex() { return _mutex; } QMutex& getMutex() { return _mutex; }
friend QDataStream& operator>>(QDataStream& out, const Node& node); friend QDataStream& operator<<(QDataStream& out, const Node& node);
friend QDataStream& operator<<(QDataStream& in, Node& node); friend QDataStream& operator>>(QDataStream& in, Node& node);
private: private:
// privatize copy and assignment operator to disallow Node copying // privatize copy and assignment operator to disallow Node copying

View file

@ -506,7 +506,7 @@ int NodeList::processDomainServerList(const QByteArray& packet) {
QDataStream packetStream(packet); QDataStream packetStream(packet);
packetStream.skipRawData(numBytesForPacketHeader(packet)); packetStream.skipRawData(numBytesForPacketHeader(packet));
while(!packetStream.atEnd()) { while(packetStream.device()->pos() < packet.size()) {
packetStream >> nodeType >> nodeUUID >> nodePublicSocket >> nodeLocalSocket; packetStream >> nodeType >> nodeUUID >> nodePublicSocket >> nodeLocalSocket;
// if the public socket address is 0 then it's reachable at the same IP // if the public socket address is 0 then it's reachable at the same IP
@ -551,14 +551,11 @@ QByteArray NodeList::constructPingPacket() {
} }
QByteArray NodeList::constructPingReplyPacket(const QByteArray& pingPacket) { QByteArray NodeList::constructPingReplyPacket(const QByteArray& pingPacket) {
QByteArray replyPacket;
uint64_t timeFromOriginalPing; uint64_t timeFromOriginalPing;
memcpy(&timeFromOriginalPing, pingPacket.data() + numBytesForPacketHeader(pingPacket), sizeof(timeFromOriginalPing)); memcpy(&timeFromOriginalPing, pingPacket.data() + numBytesForPacketHeader(pingPacket), sizeof(timeFromOriginalPing));
QDataStream packetStream(replyPacket); QByteArray replyPacket = byteArrayWithPopluatedHeader(PacketTypePingReply);
QDataStream packetStream(&replyPacket, QIODevice::Append);
packetStream.device()->seek(populatePacketHeader(replyPacket, PacketTypePingReply));
packetStream << timeFromOriginalPing << usecTimestampNow(); packetStream << timeFromOriginalPing << usecTimestampNow();