]> git.tdb.fi Git - libs/net.git/blobdiff - source/protocol.cpp
Exception changes
[libs/net.git] / source / protocol.cpp
index 3e7d479b52407f4bca47f3057fdeef7ed507fd96..d56ac77a09f70eff7137da98beef2eb7112d8978 100644 (file)
@@ -8,6 +8,8 @@ using namespace std;
 
 namespace {
 
+using Msp::Net::buffer_error;
+
 template<typename T>
 class Assembler
 {
@@ -32,7 +34,7 @@ char *Assembler<T>::assemble(const T &v, char *data, char *end)
        for(unsigned i=0; i<sizeof(T); ++i)
        {
                if(data==end)
-                       throw Msp::Exception("Out of buffer space");
+                       throw buffer_error("overflow");
                *data++ = *--ptr;
        }
        return data;
@@ -43,7 +45,7 @@ char *Assembler<string>::assemble(const string &v, char *data, char *end)
 {
        data = Assembler<unsigned short>::assemble(v.size(), data, end);
        if(end-data<static_cast<int>(v.size()))
-               throw Msp::Exception("Out of buffer space");
+               throw buffer_error("overflow");
        memcpy(data, v.data(), v.size());
        return data+v.size();
 }
@@ -64,7 +66,7 @@ const char *Assembler<T>::disassemble(T &v, const char *data, const char *end)
        for(unsigned i=0; i<sizeof(T); ++i)
        {
                if(data==end)
-                       throw Msp::Exception("Premature end of data");
+                       throw buffer_error("underflow");
                *--ptr = *data++;
        }
        return data;
@@ -76,7 +78,7 @@ const char *Assembler<string>::disassemble(string &v, const char *data, const ch
        unsigned short size;
        data = Assembler<unsigned short>::disassemble(size, data, end);
        if(end-data<size)
-               throw Msp::Exception("Premature end of data");
+               throw buffer_error("underflow");
        v.assign(data, data+size);
        return data+size;
 }
@@ -138,7 +140,7 @@ unsigned Protocol::disassemble(ReceiverBase &rcv, const char *data, unsigned siz
        unsigned id = (udata[0]<<8)+udata[1];
        unsigned psz = (udata[2]<<8)+udata[3];
        if(psz>size)
-               throw InvalidParameterValue("Not enough data for packet");
+               throw bad_packet("truncated");
        const PacketDefBase &pdef = get_packet_by_id(id);
        const char *ptr = pdef.disassemble(rcv, data+4, data+psz);
        return ptr-data;