X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Fcommunicator.cpp;h=07c3be4f6b1d7c25623a957217a98f5bccea21a6;hp=92279c24e642bc7c6f9c2b80eba60f69d1b9c8a2;hb=df1b7561be0d4a57e964c783c01060c54864ec60;hpb=400f3e031834eee9d96dbd5cda25655102b75805 diff --git a/source/net/communicator.cpp b/source/net/communicator.cpp index 92279c2..07c3be4 100644 --- a/source/net/communicator.cpp +++ b/source/net/communicator.cpp @@ -10,7 +10,7 @@ using namespace Msp::Net; struct Handshake { - unsigned hash; + Msp::UInt64 hash; }; @@ -30,11 +30,11 @@ HandshakeProtocol::HandshakeProtocol(): class HandshakeReceiver: public PacketReceiver { private: - unsigned hash; + Msp::UInt64 hash; public: HandshakeReceiver(); - unsigned get_hash() const { return hash; } + Msp::UInt64 get_hash() const { return hash; } virtual void receive(const Handshake &); }; @@ -125,15 +125,16 @@ void Communicator::data_available() HandshakeReceiver hsrecv; if((more = receive_packet(hsproto, hsrecv))) { + if(handshake_status==0) + send_handshake(); + if(hsrecv.get_hash()==protocol.get_hash()) { - if(handshake_status==0) - send_handshake(); handshake_status = 2; signal_handshake_done.emit(); } else - good = false; + throw incompatible_protocol("hash mismatch"); } } }