X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcommunicator.h;h=8530db128d26c5d168d99fb0af34e7c874484ffc;hb=6102d830138013216241b6723527246764103fa0;hp=409d42e02527c74e023a00cfbb5a691f90e8febc;hpb=a4f75be32827b00d9de9d8a68855fec2f5157a10;p=libs%2Fnet.git diff --git a/source/communicator.h b/source/communicator.h index 409d42e..8530db1 100644 --- a/source/communicator.h +++ b/source/communicator.h @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmspnet -Copyright © 2009 Mikkosoft Productions, Mikko Rasa -Distributed under the LGPL -*/ - #ifndef MSP_NET_COMMUNICATOR_H_ #define MSP_NET_COMMUNICATOR_H_ @@ -14,6 +7,14 @@ Distributed under the LGPL namespace Msp { namespace Net { +class sequence_error: public std::logic_error +{ +public: + sequence_error(const std::string &w): std::logic_error(w) { } + virtual ~sequence_error() throw() { } +}; + + class Communicator { public: @@ -29,6 +30,7 @@ private: char *in_begin; char *in_end; char *out_buf; + bool good; public: Communicator(StreamSocket &, const Protocol &, ReceiverBase &); @@ -40,9 +42,11 @@ public: template void send(const P &pkt) { + if(!good) + throw sequence_error("connection aborted"); if(handshake_status!=2) - throw InvalidState("Handshaking is not done"); - unsigned size=protocol.assemble(pkt, out_buf, buf_size); + throw sequence_error("handshaking not done"); + unsigned size = protocol.assemble(pkt, out_buf, buf_size); socket.write(out_buf, size); }