summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/BasicStream.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-11-26 17:27:16 +0000
committerMarc Laukien <marc@zeroc.com>2001-11-26 17:27:16 +0000
commit8dae3ff3542e3db7e1bf148b765b5c98d564455f (patch)
tree7af8f9fe8fb4addc9ef121d879c8598db0069063 /cpp/src/Ice/BasicStream.cpp
parentBackout change. (diff)
downloadice-8dae3ff3542e3db7e1bf148b765b5c98d564455f.tar.bz2
ice-8dae3ff3542e3db7e1bf148b765b5c98d564455f.tar.xz
ice-8dae3ff3542e3db7e1bf148b765b5c98d564455f.zip
fixed batch requests
Diffstat (limited to 'cpp/src/Ice/BasicStream.cpp')
-rw-r--r--cpp/src/Ice/BasicStream.cpp65
1 files changed, 56 insertions, 9 deletions
diff --git a/cpp/src/Ice/BasicStream.cpp b/cpp/src/Ice/BasicStream.cpp
index c2c3f593860..f359c5578dc 100644
--- a/cpp/src/Ice/BasicStream.cpp
+++ b/cpp/src/Ice/BasicStream.cpp
@@ -28,8 +28,8 @@ IceInternal::BasicStream::BasicStream(const InstancePtr& instance) :
_encapsStack(1)
{
_encapsStack.resize(1);
- _encapsStack.back().start = 0;
_encapsStack.back().encoding = 0;
+ _encapsStack.back().start = 0;
}
IceInternal::BasicStream::~BasicStream()
@@ -80,11 +80,11 @@ IceInternal::BasicStream::reserve(int total)
void
IceInternal::BasicStream::startWriteEncaps()
{
+ write(Int(0)); // Encoding
write(Int(0)); // Placeholder for the encapsulation length
_encapsStack.resize(_encapsStack.size() + 1);
- _encapsStack.back().start = b.size();
_encapsStack.back().encoding = 0;
- write(_encapsStack.back().encoding);
+ _encapsStack.back().start = b.size();
}
void
@@ -104,15 +104,17 @@ IceInternal::BasicStream::endWriteEncaps()
void
IceInternal::BasicStream::startReadEncaps()
{
+ Int encoding;
+ read(encoding);
+ if (encoding != 0)
+ {
+ throw UnsupportedEncodingException(__FILE__, __LINE__);
+ }
Int sz;
read(sz);
_encapsStack.resize(_encapsStack.size() + 1);
+ _encapsStack.back().encoding = encoding;
_encapsStack.back().start = i - b.begin();
- read(_encapsStack.back().encoding);
- if (_encapsStack.back().encoding != 0)
- {
- throw UnsupportedEncodingException(__FILE__, __LINE__);
- }
}
void
@@ -121,7 +123,13 @@ IceInternal::BasicStream::endReadEncaps()
int start = _encapsStack.back().start;
_encapsStack.pop_back();
i = b.begin() + start - sizeof(Int);
- skipEncaps();
+ Int sz;
+ read(sz);
+ i += sz;
+ if (i > b.end())
+ {
+ throw UnmarshalOutOfBoundsException(__FILE__, __LINE__);
+ }
}
void
@@ -139,9 +147,27 @@ IceInternal::BasicStream::checkReadEncaps()
}
}
+Int
+IceInternal::BasicStream::getReadEncapsSize()
+{
+ int start = _encapsStack.back().start;
+ Container::iterator save = i;
+ i = b.begin() + start - sizeof(Int);
+ Int sz;
+ read(sz);
+ i = save;
+ return sz;
+}
+
void
IceInternal::BasicStream::skipEncaps()
{
+ Int encoding;
+ read(encoding);
+ if (encoding != 0)
+ {
+ throw UnsupportedEncodingException(__FILE__, __LINE__);
+ }
Int sz;
read(sz);
i += sz;
@@ -152,6 +178,27 @@ IceInternal::BasicStream::skipEncaps()
}
void
+IceInternal::BasicStream::writeBlob(const vector<Byte>& v)
+{
+ int pos = b.size();
+ resize(pos + v.size());
+ copy(v.begin(), v.end(), b.begin() + pos);
+}
+
+void
+IceInternal::BasicStream::readBlob(vector<Byte>& v, Int sz)
+{
+ Container::iterator begin = i;
+ i += sz;
+ if (i > b.end())
+ {
+ throw UnmarshalOutOfBoundsException(__FILE__, __LINE__);
+ }
+ v.resize(sz);
+ copy(begin, i, v.begin());
+}
+
+void
IceInternal::BasicStream::write(const vector<Byte>& v)
{
int pos = b.size();