summaryrefslogtreecommitdiff
path: root/cpp/src
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
parentBackout change. (diff)
downloadice-8dae3ff3542e3db7e1bf148b765b5c98d564455f.tar.bz2
ice-8dae3ff3542e3db7e1bf148b765b5c98d564455f.tar.xz
ice-8dae3ff3542e3db7e1bf148b765b5c98d564455f.zip
fixed batch requests
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/BasicStream.cpp65
-rw-r--r--cpp/src/Ice/Object.cpp3
-rw-r--r--cpp/src/Ice/Proxy.cpp2
-rw-r--r--cpp/src/Ice/TraceUtil.cpp3
-rw-r--r--cpp/src/IceStorm/TopicI.cpp2
-rw-r--r--cpp/src/Makefile5
6 files changed, 64 insertions, 16 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();
diff --git a/cpp/src/Ice/Object.cpp b/cpp/src/Ice/Object.cpp
index 2179b78bb8a..8fe66e03a3c 100644
--- a/cpp/src/Ice/Object.cpp
+++ b/cpp/src/Ice/Object.cpp
@@ -248,7 +248,8 @@ DispatchStatus
Ice::Blobject::__dispatch(Incoming& in, const string& identity, const string& facet, const string& operation)
{
vector<Byte> blob;
- in.is()->read(blob);
+ Int sz = in.is()->getReadEncapsSize();
+ in.is()->readBlob(blob, sz);
ice_invokeIn(identity, facet, operation, blob);
return ::IceInternal::DispatchOK;
}
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index 82a47527713..d7b06696567 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -536,7 +536,7 @@ IceDelegateM::Ice::Object::ice_invokeIn(const string& operation, const vector<By
{
Outgoing __out(__emitter, __reference, operation.c_str());
BasicStream* __os = __out.os();
- __os->write(inParams);
+ __os->writeBlob(inParams);
if (!__out.invoke())
{
throw ::Ice::UnknownUserException(__FILE__, __LINE__);
diff --git a/cpp/src/Ice/TraceUtil.cpp b/cpp/src/Ice/TraceUtil.cpp
index e9ad748267d..f2f386aab24 100644
--- a/cpp/src/Ice/TraceUtil.cpp
+++ b/cpp/src/Ice/TraceUtil.cpp
@@ -131,8 +131,6 @@ IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, cons
while (stream.i != stream.b.end())
{
s << "\nrequest #" << cnt++ << ':';
- BasicStream::Container::iterator q = stream.i;
- stream.startReadEncaps();
string identity;
stream.read(identity);
s << "\nidentity = " << identity;
@@ -142,7 +140,6 @@ IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, cons
string operation;
stream.read(operation);
s << "\noperation name = " << operation;
- stream.i = q;
stream.skipEncaps();
}
logger->trace(tl->protocolCat, s.str());
diff --git a/cpp/src/IceStorm/TopicI.cpp b/cpp/src/IceStorm/TopicI.cpp
index 0510e081311..f5cef4a1201 100644
--- a/cpp/src/IceStorm/TopicI.cpp
+++ b/cpp/src/IceStorm/TopicI.cpp
@@ -144,7 +144,9 @@ public:
_subscribers.remove_if(::Ice::constMemFun(&Subscriber::invalid));
for (SubscriberList::iterator i = _subscribers.begin(); i != _subscribers.end(); ++i)
+ {
(*i)->publish(op, blob);
+ }
//for_each(_subscribers.begin(), _subscribers.end(), Ice::memFun(&Subscriber::publish));
}
diff --git a/cpp/src/Makefile b/cpp/src/Makefile
index a155019e416..4d5389bb21c 100644
--- a/cpp/src/Makefile
+++ b/cpp/src/Makefile
@@ -19,8 +19,9 @@ SUBDIRS = IceUtil \
slice2docbook \
slice2java \
Ice \
- IcePack \
- Freeze
+ Freeze \
+ IceStorm \
+ IcePack
$(EVERYTHING)::
@for subdir in $(SUBDIRS); \