summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rwxr-xr-xcpp/src/Ice/BasicStream.cpp33
-rw-r--r--cpp/src/Ice/Exception.cpp11
-rw-r--r--cpp/src/Ice/SlicedData.cpp1
3 files changed, 29 insertions, 16 deletions
diff --git a/cpp/src/Ice/BasicStream.cpp b/cpp/src/Ice/BasicStream.cpp
index f2f3bccbfce..4636813d40a 100755
--- a/cpp/src/Ice/BasicStream.cpp
+++ b/cpp/src/Ice/BasicStream.cpp
@@ -1582,6 +1582,11 @@ IceInternal::BasicStream::sliceObjects(bool doSlice)
bool
IceInternal::BasicStream::readOptImpl(Int readTag, OptionalType expectedType)
{
+ if(getReadEncoding() == Encoding_1_0)
+ {
+ return false; // Optional members aren't supported with the 1.0 encoding.
+ }
+
Int tag = 0;
OptionalType type;
do
@@ -1627,9 +1632,14 @@ IceInternal::BasicStream::readOptImpl(Int readTag, OptionalType expectedType)
return true;
}
-void
+bool
IceInternal::BasicStream::writeOptImpl(Int tag, OptionalType type)
{
+ if(getWriteEncoding() == Encoding_1_0)
+ {
+ return false; // Optional members aren't supported with the 1.0 encoding.
+ }
+
Byte v = static_cast<Byte>(type);
if(tag < 31)
{
@@ -1642,6 +1652,7 @@ IceInternal::BasicStream::writeOptImpl(Int tag, OptionalType type)
write(v);
writeSize(tag);
}
+ return true;
}
bool
@@ -1975,6 +1986,7 @@ IceInternal::BasicStream::EncapsEncoder::endSlice()
//
if(_sliceFlags & FLAG_HAS_OPTIONAL_MEMBERS)
{
+ assert(_encaps->encoding != Encoding_1_0);
_stream->write(static_cast<Byte>(OptionalTypeEndMarker));
}
@@ -1993,6 +2005,7 @@ IceInternal::BasicStream::EncapsEncoder::endSlice()
//
if(!_indirectionTable.empty())
{
+ assert(_encaps->encoding != Encoding_1_0);
assert(_format == SlicedFormat);
_sliceFlags |= FLAG_HAS_INDIRECTION_TABLE;
@@ -2006,7 +2019,8 @@ IceInternal::BasicStream::EncapsEncoder::endSlice()
}
//
- // Finally, update the slice flags.
+ // Finally, update the slice flags (or the object slice has index
+ // type ID boolean for the 1.0 encoding)
//
if(_encaps->encoding == Encoding_1_0)
{
@@ -2119,7 +2133,7 @@ IceInternal::BasicStream::EncapsEncoder::writeSlicedData(const SlicedDataPtr& sl
for(SliceInfoSeq::const_iterator p = slicedData->slices.begin(); p != slicedData->slices.end(); ++p)
{
- startSlice((*p)->typeId, false); // last = false, sliced data never contains the last slice.
+ startSlice((*p)->typeId, (*p)->isLastSlice);
//
// Write the bytes associated with this slice.
@@ -2322,8 +2336,14 @@ IceInternal::BasicStream::EncapsDecoder::throwException(const UserExceptionFacto
//
if(_sliceFlags & FLAG_IS_LAST_SLICE)
{
- throw NoExceptionFactoryException(__FILE__, __LINE__, "unknown exception type `" + mostDerivedId + "'",
- mostDerivedId);
+ if(mostDerivedId.length() > 2 && mostDerivedId[0] == ':' && mostDerivedId[1] == ':')
+ {
+ throw UnknownUserException(__FILE__, __LINE__, mostDerivedId.substr(2));
+ }
+ else
+ {
+ throw UnknownUserException(__FILE__, __LINE__, mostDerivedId);
+ }
}
try
@@ -2856,10 +2876,13 @@ IceInternal::BasicStream::EncapsDecoder::skipSlice()
SliceInfoPtr info = new SliceInfo;
info->typeId = _typeId;
info->hasOptionalMembers = _sliceFlags & FLAG_HAS_OPTIONAL_MEMBERS;
+ info->isLastSlice = _sliceFlags & FLAG_IS_LAST_SLICE;
if(info->hasOptionalMembers)
{
+ //
// Don't include the optional member end marker. It will be re-written by
// endSlice when the sliced data is re-written.
+ //
vector<Byte>(start, _stream->i - 1).swap(info->bytes);
}
else
diff --git a/cpp/src/Ice/Exception.cpp b/cpp/src/Ice/Exception.cpp
index a205af22a78..6753c597353 100644
--- a/cpp/src/Ice/Exception.cpp
+++ b/cpp/src/Ice/Exception.cpp
@@ -603,17 +603,6 @@ Ice::NoObjectFactoryException::ice_print(ostream& out) const
}
void
-Ice::NoExceptionFactoryException::ice_print(ostream& out) const
-{
- Exception::ice_print(out);
- out << ":\nprotocol error: no suitable exception factory found for `" << type << "'";
- if(!reason.empty())
- {
- out << ":\n" << reason;
- }
-}
-
-void
Ice::UnexpectedObjectException::ice_print(ostream& out) const
{
Exception::ice_print(out);
diff --git a/cpp/src/Ice/SlicedData.cpp b/cpp/src/Ice/SlicedData.cpp
index 568c55a7585..9b2e88b609c 100644
--- a/cpp/src/Ice/SlicedData.cpp
+++ b/cpp/src/Ice/SlicedData.cpp
@@ -16,6 +16,7 @@ using namespace Ice;
IceUtil::Shared* Ice::upCast(SliceInfo* p) { return p; }
IceUtil::Shared* Ice::upCast(SlicedData* p) { return p; }
+IceUtil::Shared* Ice::upCast(UnknownSlicedObject* p) { return p; }
Ice::SlicedData::SlicedData(const SliceInfoSeq& seq) :
slices(seq)