add a verify packet operator to verify packets

This commit is contained in:
Stephen Birarda 2015-07-20 17:35:16 -07:00
parent 796dfee687
commit cea8e01a01
3 changed files with 14 additions and 6 deletions

View file

@ -99,7 +99,7 @@ LimitedNodeList::LimitedNodeList(unsigned short socketListenPort, unsigned short
// set &PacketReceiver::handleVerifiedPacket as the verified packet function for the udt::Socket
using std::placeholders::_1;
_nodeSocket.setVerifiedPacketFunction(std::bind(&PacketReceiver::handleVerifiedPacket, _packetReceiver, _1));
_nodeSocket.setVerifiedPacketCallback(std::bind(&PacketReceiver::handleVerifiedPacket, _packetReceiver, _1));
_packetStatTimer.start();

View file

@ -83,6 +83,11 @@ void Socket::readPendingDatagrams() {
// setup a Packet from the data we just read
auto packet = Packet::fromReceivedPacket(std::move(buffer), packetSizeWithHeader, senderSockAddr);
// call our verification operator to see if this packet is verified
if (!_verifyPacketOperator || _verifyPacketOperator(*packet)) {
// call the verified packet callback to let it handle this packet
return _verifiedPacketCallback(std::move(packet));
}
}
}

View file

@ -24,7 +24,8 @@
namespace udt {
using VerifiedPacketFunction = std::function<void(std::unique_ptr<Packet>)>;
using VerifyPacketOperator = std::function<bool(Packet&)>;
using VerifiedPacketCallback = std::function<void(std::unique_ptr<Packet>)>;
class Socket : public QObject {
Q_OBJECT
@ -40,8 +41,9 @@ public:
void bind(const QHostAddress& address, quint16 port = 0) { _udpSocket.bind(address, port); }
void rebind();
void setVerifiedPacketFunction(VerifiedPacketFunction verifiedPacketFunction)
{ _verifiedPacketFunction = verifiedPacketFunction; }
void setVerifyPacketOperator(VerifyPacketOperator verifyPacketOperator) { _verifyPacketOperator = verifyPacketOperator; }
void setVerifiedPacketCallback(VerifiedPacketCallback verifiedPacketCallback)
{ _verifiedPacketCallback = verifiedPacketCallback; }
void setBufferSizes(int numBytes);
@ -50,7 +52,8 @@ private slots:
private:
QUdpSocket _udpSocket { this };
VerifiedPacketFunction _verifiedPacketFunction;
VerifyPacketOperator _verifyPacketOperator;
VerifiedPacketCallback _verifiedPacketCallback;
};
}