diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2006-03-16 13:53:32 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2006-03-16 13:53:32 +0000 |
commit | 8bcf04a19c9f6c44bd38bef47ee1b557f40fb72f (patch) | |
tree | 8cfd4780df192fd3678697ebd75c2ab54f22a631 /cpp/src | |
parent | more attack test (diff) | |
download | ice-8bcf04a19c9f6c44bd38bef47ee1b557f40fb72f.tar.bz2 ice-8bcf04a19c9f6c44bd38bef47ee1b557f40fb72f.tar.xz ice-8bcf04a19c9f6c44bd38bef47ee1b557f40fb72f.zip |
Added BlobjectArray
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Glacier2/Blobject.cpp | 4 | ||||
-rw-r--r-- | cpp/src/Glacier2/Blobject.h | 5 | ||||
-rw-r--r-- | cpp/src/Glacier2/ClientBlobject.cpp | 3 | ||||
-rw-r--r-- | cpp/src/Glacier2/ClientBlobject.h | 3 | ||||
-rw-r--r-- | cpp/src/Glacier2/RequestQueue.cpp | 6 | ||||
-rw-r--r-- | cpp/src/Glacier2/RequestQueue.h | 2 | ||||
-rw-r--r-- | cpp/src/Glacier2/ServerBlobject.cpp | 3 | ||||
-rw-r--r-- | cpp/src/Glacier2/ServerBlobject.h | 3 | ||||
-rw-r--r-- | cpp/src/Ice/Object.cpp | 46 | ||||
-rw-r--r-- | cpp/src/Ice/OutgoingAsync.cpp | 4 | ||||
-rw-r--r-- | cpp/src/Ice/Proxy.cpp | 64 | ||||
-rw-r--r-- | cpp/src/IceStorm/TopicI.cpp | 8 |
12 files changed, 130 insertions, 21 deletions
diff --git a/cpp/src/Glacier2/Blobject.cpp b/cpp/src/Glacier2/Blobject.cpp index af5e30c2c21..044ab52f9d5 100644 --- a/cpp/src/Glacier2/Blobject.cpp +++ b/cpp/src/Glacier2/Blobject.cpp @@ -101,8 +101,8 @@ Glacier2::Blobject::destroy() } void -Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Object_ice_invokePtr& amdCB, const ByteSeq& inParams, - const Current& current) +Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Object_ice_invokePtr& amdCB, + const std::pair<const Ice::Byte*, const Ice::Byte*>& inParams, const Current& current) { // // Set the correct facet on the proxy. diff --git a/cpp/src/Glacier2/Blobject.h b/cpp/src/Glacier2/Blobject.h index b026bafd52f..adf9cd086da 100644 --- a/cpp/src/Glacier2/Blobject.h +++ b/cpp/src/Glacier2/Blobject.h @@ -16,7 +16,7 @@ namespace Glacier2 { -class Blobject : public Ice::BlobjectAsync +class Blobject : public Ice::BlobjectArrayAsync { public: @@ -27,7 +27,8 @@ public: protected: - void invoke(Ice::ObjectPrx&, const Ice::AMD_Object_ice_invokePtr&, const Ice::ByteSeq&, const Ice::Current&); + void invoke(Ice::ObjectPrx&, const Ice::AMD_Object_ice_invokePtr&, + const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&); const Ice::CommunicatorPtr _communicator; const Ice::PropertiesPtr _properties; diff --git a/cpp/src/Glacier2/ClientBlobject.cpp b/cpp/src/Glacier2/ClientBlobject.cpp index 4f1c851b4bd..d02864882ac 100644 --- a/cpp/src/Glacier2/ClientBlobject.cpp +++ b/cpp/src/Glacier2/ClientBlobject.cpp @@ -38,7 +38,8 @@ Glacier2::ClientBlobject::destroy() } void -Glacier2::ClientBlobject::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB, const ByteSeq& inParams, +Glacier2::ClientBlobject::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB, + const std::pair<const Byte*, const Byte*>& inParams, const Current& current) { assert(_routingTable); // Destroyed? diff --git a/cpp/src/Glacier2/ClientBlobject.h b/cpp/src/Glacier2/ClientBlobject.h index 322f336c4b6..d4afcdc5f71 100644 --- a/cpp/src/Glacier2/ClientBlobject.h +++ b/cpp/src/Glacier2/ClientBlobject.h @@ -28,7 +28,8 @@ public: virtual void destroy(); - virtual void ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&, const Ice::ByteSeq&, const Ice::Current&); + virtual void ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&, + const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&); private: diff --git a/cpp/src/Glacier2/RequestQueue.cpp b/cpp/src/Glacier2/RequestQueue.cpp index 6ed5d3fe9f6..91d25c1d40a 100644 --- a/cpp/src/Glacier2/RequestQueue.cpp +++ b/cpp/src/Glacier2/RequestQueue.cpp @@ -46,10 +46,10 @@ private: } -Glacier2::Request::Request(const ObjectPrx& proxy, const ByteSeq& inParams, const Current& current, - bool forwardContext, const AMD_Object_ice_invokePtr& amdCB) : +Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, const Byte*>& inParams, + const Current& current, bool forwardContext, const AMD_Object_ice_invokePtr& amdCB) : _proxy(proxy), - _inParams(inParams), + _inParams(inParams.first, inParams.second), _current(current), _forwardContext(forwardContext), _amdCB(amdCB) diff --git a/cpp/src/Glacier2/RequestQueue.h b/cpp/src/Glacier2/RequestQueue.h index 9911592c522..c619100d19a 100644 --- a/cpp/src/Glacier2/RequestQueue.h +++ b/cpp/src/Glacier2/RequestQueue.h @@ -24,7 +24,7 @@ class Request : public IceUtil::Shared { public: - Request(const Ice::ObjectPrx&, const Ice::ByteSeq&, const Ice::Current&, bool, + Request(const Ice::ObjectPrx&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&, bool, const Ice::AMD_Object_ice_invokePtr&); void invoke(); diff --git a/cpp/src/Glacier2/ServerBlobject.cpp b/cpp/src/Glacier2/ServerBlobject.cpp index ee57fcba7bb..39cde8f084a 100644 --- a/cpp/src/Glacier2/ServerBlobject.cpp +++ b/cpp/src/Glacier2/ServerBlobject.cpp @@ -34,7 +34,8 @@ Glacier2::ServerBlobject::destroy() } void -Glacier2::ServerBlobject::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB, const ByteSeq& inParams, +Glacier2::ServerBlobject::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB, + const std::pair<const Byte*, const Byte*>& inParams, const Current& current) { assert(_connection); // Destroyed? diff --git a/cpp/src/Glacier2/ServerBlobject.h b/cpp/src/Glacier2/ServerBlobject.h index 99559365265..3f8e175a4af 100644 --- a/cpp/src/Glacier2/ServerBlobject.h +++ b/cpp/src/Glacier2/ServerBlobject.h @@ -27,7 +27,8 @@ public: virtual void destroy(); - virtual void ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&, const Ice::ByteSeq&, const Ice::Current&); + virtual void ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&, + const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&); private: diff --git a/cpp/src/Ice/Object.cpp b/cpp/src/Ice/Object.cpp index f07dddce0ad..0b5ce8a9ff2 100644 --- a/cpp/src/Ice/Object.cpp +++ b/cpp/src/Ice/Object.cpp @@ -299,6 +299,26 @@ Ice::Blobject::__dispatch(Incoming& in, const Current& current) } DispatchStatus +Ice::BlobjectArray::__dispatch(Incoming& in, const Current& current) +{ + pair<const Byte*, const Byte*> inParams; + vector<Byte> outParams; + Int sz = in.is()->getReadEncapsSize(); + in.is()->readBlob(inParams.first, sz); + inParams.second = inParams.first + sz; + bool ok = ice_invoke(inParams, outParams, current); + in.os()->writeBlob(outParams); + if(ok) + { + return DispatchOK; + } + else + { + return DispatchUserException; + } +} + +DispatchStatus Ice::BlobjectAsync::__dispatch(Incoming& in, const Current& current) { vector<Byte> inParams; @@ -324,6 +344,32 @@ Ice::BlobjectAsync::__dispatch(Incoming& in, const Current& current) return DispatchAsync; } +DispatchStatus +Ice::BlobjectArrayAsync::__dispatch(Incoming& in, const Current& current) +{ + pair<const Byte*, const Byte*> inParams; + Int sz = in.is()->getReadEncapsSize(); + in.is()->readBlob(inParams.first, sz); + inParams.second = inParams.first + sz; + AMD_Object_ice_invokePtr cb = new ::IceAsync::Ice::AMD_Object_ice_invoke(in); + try + { + ice_invoke_async(cb, inParams, current); + } + catch(const Exception& ex) + { + cb->ice_exception(ex); + } + catch(const ::std::exception& ex) + { + cb->ice_exception(ex); + } + catch(...) + { + cb->ice_exception(); + } + return DispatchAsync; +} void Ice::ice_writeObject(const OutputStreamPtr& out, const ObjectPtr& p) { diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp index fef41fa0b86..784cc6ca356 100644 --- a/cpp/src/Ice/OutgoingAsync.cpp +++ b/cpp/src/Ice/OutgoingAsync.cpp @@ -417,12 +417,12 @@ IceInternal::OutgoingAsync::cleanup() void Ice::AMI_Object_ice_invoke::__invoke(const ObjectPrx& prx, const string& operation, OperationMode mode, - const vector<Byte>& inParams, const Context& context) + const pair<const Byte*, const Byte*>& inParams, const Context& context) { try { __prepare(prx, operation, mode, context); - __os->writeBlob(inParams); + __os->writeBlob(inParams.first, static_cast<Int>(inParams.second - inParams.first)); __os->endWriteEncaps(); } catch(const LocalException& ex) diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index 253f5909657..37951c6a898 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -277,6 +277,35 @@ IceProxy::Ice::Object::ice_invoke(const string& operation, vector<Byte>& outParams, const Context& context) { + pair<const Byte*, const Byte*> inPair; + if(inParams.size() == 0) + { + inPair.first = inPair.second = 0; + } + else + { + inPair.first = &inParams[0]; + inPair.second = inPair.first + inParams.size(); + } + return ice_invoke(operation, mode, inPair, outParams, context); +} + +bool +IceProxy::Ice::Object::ice_invoke(const string& operation, + OperationMode mode, + const pair<const Byte*, const Byte*>& inParams, + vector<Byte>& outParams) +{ + return ice_invoke(operation, mode, inParams, outParams, _reference->getContext()); +} + +bool +IceProxy::Ice::Object::ice_invoke(const string& operation, + OperationMode mode, + const pair<const Byte*, const Byte*>& inParams, + vector<Byte>& outParams, + const Context& context) +{ int __cnt = 0; while(true) { @@ -320,6 +349,35 @@ IceProxy::Ice::Object::ice_invoke_async(const AMI_Object_ice_invokePtr& cb, const vector<Byte>& inParams, const Context& context) { + pair<const Byte*, const Byte*> inPair; + if(inParams.size() == 0) + { + inPair.first = inPair.second = 0; + } + else + { + inPair.first = &inParams[0]; + inPair.second = inPair.first + inParams.size(); + } + ice_invoke_async(cb, operation, mode, inPair, context); +} + +void +IceProxy::Ice::Object::ice_invoke_async(const AMI_Object_ice_invokePtr& cb, + const string& operation, + OperationMode mode, + const pair<const Byte*, const Byte*>& inParams) +{ + ice_invoke_async(cb, operation, mode, inParams, _reference->getContext()); +} + +void +IceProxy::Ice::Object::ice_invoke_async(const AMI_Object_ice_invokePtr& cb, + const string& operation, + OperationMode mode, + const pair<const Byte*, const Byte*>& inParams, + const Context& context) +{ cb->__invoke(this, operation, mode, inParams, context); } @@ -1114,7 +1172,7 @@ IceDelegateM::Ice::Object::ice_id(const Context& __context) bool IceDelegateM::Ice::Object::ice_invoke(const string& operation, OperationMode mode, - const vector<Byte>& inParams, + const pair<const Byte*, const Byte*>& inParams, vector<Byte>& outParams, const Context& context) { @@ -1122,7 +1180,7 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation, try { BasicStream* __os = __og.os(); - __os->writeBlob(inParams); + __os->writeBlob(inParams.first, static_cast<Int>(inParams.second - inParams.first)); } catch(const ::Ice::LocalException& __ex) { @@ -1243,7 +1301,7 @@ IceDelegateD::Ice::Object::ice_id(const ::Ice::Context& __context) bool IceDelegateD::Ice::Object::ice_invoke(const string&, OperationMode, - const vector<Byte>&, + const pair<const Byte*, const Byte*>& inParams, vector<Byte>&, const Context&) { diff --git a/cpp/src/IceStorm/TopicI.cpp b/cpp/src/IceStorm/TopicI.cpp index dbc2cf505a4..6b2f87898ca 100644 --- a/cpp/src/IceStorm/TopicI.cpp +++ b/cpp/src/IceStorm/TopicI.cpp @@ -25,7 +25,7 @@ namespace IceStorm // The servant has a 1-1 association with a topic. It is used to // receive events from Publishers. // -class PublisherProxyI : public Ice::Blobject +class PublisherProxyI : public Ice::BlobjectArray { public: @@ -38,7 +38,7 @@ public: { } - virtual bool ice_invoke(const vector< Ice::Byte>&, vector< Ice::Byte>&, const Ice::Current&); + virtual bool ice_invoke(const pair<const Ice::Byte*, const Ice::Byte*>&, vector< Ice::Byte>&, const Ice::Current&); private: @@ -250,7 +250,7 @@ IceStorm::TopicSubscribers::clearErrorList() // Incoming events from publishers. // bool -PublisherProxyI::ice_invoke(const vector< Ice::Byte>& inParams, vector< Ice::Byte>& outParam, +PublisherProxyI::ice_invoke(const pair<const Ice::Byte*, const Ice::Byte*>& inParams, vector< Ice::Byte>& outParam, const Ice::Current& current) { const Ice::Context& context = current.ctx; @@ -268,7 +268,7 @@ PublisherProxyI::ice_invoke(const vector< Ice::Byte>& inParams, vector< Ice::Byt } event->op = current.operation; event->mode = current.mode; - event->data = inParams; + vector<Ice::Byte>(inParams.first, inParams.second).swap(event->data); event->context = context; _subscribers->publish(event); |