diff options
Diffstat (limited to 'cpp/src')
-rwxr-xr-x | cpp/src/Ice/BasicStream.cpp | 33 | ||||
-rw-r--r-- | cpp/src/Ice/Exception.cpp | 11 | ||||
-rw-r--r-- | cpp/src/Ice/SlicedData.cpp | 1 |
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) |