summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Connection.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2003-07-18 05:38:56 +0000
committerMichi Henning <michi@zeroc.com>2003-07-18 05:38:56 +0000
commit9a7252044516af5435ca202657dd7465056b74a8 (patch)
tree78ab9df8f1682fd8c22e389d8825c6dacb440eeb /cpp/src/Ice/Connection.cpp
parentSnap-shot check-in. (diff)
downloadice-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.cpp22
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()