diff options
author | Michi Henning <michi@zeroc.com> | 2003-07-18 05:38:56 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2003-07-18 05:38:56 +0000 |
commit | 9a7252044516af5435ca202657dd7465056b74a8 (patch) | |
tree | 78ab9df8f1682fd8c22e389d8825c6dacb440eeb /cpp/src/Ice/Connection.cpp | |
parent | Snap-shot check-in. (diff) | |
download | ice-9a7252044516af5435ca202657dd7465056b74a8.tar.bz2 ice-9a7252044516af5435ca202657dd7465056b74a8.tar.xz ice-9a7252044516af5435ca202657dd7465056b74a8.zip |
Merging changes for DatagramLimitException
Diffstat (limited to 'cpp/src/Ice/Connection.cpp')
-rw-r--r-- | cpp/src/Ice/Connection.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/cpp/src/Ice/Connection.cpp b/cpp/src/Ice/Connection.cpp index fa09f3ea6ee..c9970afbcc9 100644 --- a/cpp/src/Ice/Connection.cpp +++ b/cpp/src/Ice/Connection.cpp @@ -1019,6 +1019,23 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa doUncompress(stream, ustream); stream.b.swap(ustream.b); } + + if(_endpoint->datagram()) + { + Int messageSize; + stream.read(messageSize); + if(messageSize > _maxRecvSize) // Truncated datagram + { + DatagramLimitException ex(__FILE__, __LINE__); + ex.maxSize = _maxRecvSize; + if(_warnUdp) + { + Warning out(_logger); + out << "datagram exception:\n" << ex << '\n' << _transceiver->toString(); + } + throw ex; + } + } stream.i = stream.b.begin() + headerSize; @@ -1327,7 +1344,8 @@ IceInternal::Connection::Connection(const InstancePtr& instance, _batchRequestNum(0), _dispatchCount(0), _proxyCount(0), - _state(StateNotValidated) + _state(StateNotValidated), + _maxRecvSize(transceiver->maxRecvSize()) { if(_adapter) { @@ -1373,6 +1391,8 @@ IceInternal::Connection::Connection(const InstancePtr& instance, replyHdr[7] = encodingMinor; replyHdr[8] = replyMsg; replyHdr[9] = 1; // Default compression status: compression supported but not used. + + _warnUdp = _instance->properties()->getPropertyAsInt("Ice.Warn.Datagrams") > 0; } IceInternal::Connection::~Connection() |