diff options
Diffstat (limited to 'cpp')
-rwxr-xr-x | cpp/allTests.py | 1 | ||||
-rw-r--r-- | cpp/include/Ice/Proxy.h | 3 | ||||
-rwxr-xr-x | cpp/src/Glacier2/RequestQueue.cpp | 355 | ||||
-rw-r--r-- | cpp/src/Glacier2/RequestQueue.h | 25 | ||||
-rw-r--r-- | cpp/src/Ice/ConnectionI.cpp | 13 | ||||
-rw-r--r-- | cpp/src/Ice/ProxyFactory.cpp | 4 | ||||
-rw-r--r-- | cpp/src/Ice/RouterInfo.cpp | 7 | ||||
-rw-r--r-- | cpp/src/Ice/RouterInfo.h | 2 | ||||
-rw-r--r-- | cpp/test/Glacier2/Makefile | 1 | ||||
-rw-r--r-- | cpp/test/Glacier2/Makefile.mak | 1 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/.depend | 5 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/.depend.mak | 5 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/Callback.ice | 36 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/CallbackI.cpp | 222 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/CallbackI.h | 59 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/Client.cpp | 210 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/Makefile | 42 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/Makefile.mak | 50 | ||||
-rw-r--r-- | cpp/test/Glacier2/override/Server.cpp | 47 | ||||
-rwxr-xr-x | cpp/test/Glacier2/override/run.py | 62 |
20 files changed, 978 insertions, 172 deletions
diff --git a/cpp/allTests.py b/cpp/allTests.py index bebf8f83eb1..0a41d827b33 100755 --- a/cpp/allTests.py +++ b/cpp/allTests.py @@ -94,6 +94,7 @@ tests = [ ("IceGrid/admin", ["service", "novc6"]), ("Glacier2/router", ["service", "novc6"]), ("Glacier2/attack", ["service", "novc6"]), + ("Glacier2/override", ["service", "novc6"]), ("Glacier2/sessionControl", ["service", "novc6"]), ("Glacier2/ssl", ["service", "novalgrind", "novc6"]), # valgrind doesn't work well with openssl ("Glacier2/dynamicFiltering", ["service", "novc6"]), diff --git a/cpp/include/Ice/Proxy.h b/cpp/include/Ice/Proxy.h index 13c2e9bdbbb..7904ec95176 100644 --- a/cpp/include/Ice/Proxy.h +++ b/cpp/include/Ice/Proxy.h @@ -2142,8 +2142,7 @@ newCallback_Object_ice_invoke(T* instance, template<class T, typename CT> Callback_Object_ice_invokePtr newCallback_Object_ice_invoke(T* instance, - void (T::*cb)(bool, const std::pair<const Byte*, const Byte*>&, - const CT&), + void (T::*cb)(bool, const std::pair<const Byte*, const Byte*>&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0) { diff --git a/cpp/src/Glacier2/RequestQueue.cpp b/cpp/src/Glacier2/RequestQueue.cpp index a901b6208a1..85cb55c5c63 100755 --- a/cpp/src/Glacier2/RequestQueue.cpp +++ b/cpp/src/Glacier2/RequestQueue.cpp @@ -16,102 +16,6 @@ using namespace std; using namespace Ice; using namespace Glacier2; -namespace -{ - -// -// AMI base callback class for twoway/oneway requests -// -class IceInvokeI : public AMI_Array_Object_ice_invoke -{ -public: - - IceInvokeI(const AMD_Object_ice_invokePtr& amdCB, const InstancePtr& instance, const ConnectionPtr& connection) : - _amdCB(amdCB), - _instance(instance), - _connection(connection) - { - } - - virtual void - ice_exception(const Exception& ex) - { - // - // If the connection has been lost, destroy the session. - // - if(_connection) - { - if(dynamic_cast<const Ice::SocketException*>(&ex) || - dynamic_cast<const Ice::TimeoutException*>(&ex) || - dynamic_cast<const Ice::ProtocolException*>(&ex)) - { - try - { - _instance->sessionRouter()->destroySession(_connection); - } - catch(const Exception&) - { - } - } - } - - if(_amdCB) - { - _amdCB->ice_exception(ex); - } - } - -protected: - - const AMD_Object_ice_invokePtr _amdCB; - const InstancePtr _instance; - const ConnectionPtr _connection; -}; - -class TwowayIceInvokeI : public IceInvokeI -{ -public: - - TwowayIceInvokeI(const AMD_Object_ice_invokePtr& amdCB, const InstancePtr& instance, const ConnectionPtr& con) : - IceInvokeI(amdCB, instance, con) - { - } - - virtual void - ice_response(bool ok, const pair<const Byte*, const Byte*>& outParams) - { - _amdCB->ice_response(ok, outParams); - } -}; - -class OnewayIceInvokeI : public IceInvokeI, public Ice::AMISentCallback -{ -public: - - OnewayIceInvokeI(const AMD_Object_ice_invokePtr& amdCB, const InstancePtr& instance, const ConnectionPtr& con) : - IceInvokeI(amdCB, instance, con) - { - } - - virtual void - ice_response(bool ok, const pair<const Byte*, const Byte*>& outParams) - { - assert(false); - } - - virtual void - ice_sent() - { -#if (defined(_MSC_VER) && (_MSC_VER >= 1600)) - _amdCB->ice_response(true, pair<const Byte*, const Byte*>(nullptr, nullptr)); -#else - _amdCB->ice_response(true, pair<const Byte*, const Byte*>(0, 0)); -#endif - } -}; - -} - Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, const Byte*>& inParams, const Current& current, bool forwardContext, const Ice::Context& sslContext, const AMD_Object_ice_invokePtr& amdCB) : @@ -122,18 +26,6 @@ Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, _sslContext(sslContext), _amdCB(amdCB) { - // - // If this is a batch call, we can finish the AMD call right away. - // - if(_proxy->ice_isBatchOneway() || _proxy->ice_isBatchDatagram()) - { -#if (defined(_MSC_VER) && (_MSC_VER >= 1600)) - _amdCB->ice_response(true, pair<const Byte*, const Byte*>(nullptr, nullptr)); -#else - _amdCB->ice_response(true, pair<const Byte*, const Byte*>(0, 0)); -#endif - } - Context::const_iterator p = current.ctx.find("_ovrd"); if(p != current.ctx.end()) { @@ -142,8 +34,8 @@ Glacier2::Request::Request(const ObjectPrx& proxy, const std::pair<const Byte*, } -bool -Glacier2::Request::invoke(const InstancePtr& instance, const Ice::ConnectionPtr& connection) +Ice::AsyncResultPtr +Glacier2::Request::invoke(const Callback_Object_ice_invokePtr& cb) { pair<const Byte*, const Byte*> inPair; if(_inParams.size() == 0) @@ -176,61 +68,44 @@ Glacier2::Request::invoke(const InstancePtr& instance, const Ice::ConnectionPtr& { if(_sslContext.size() > 0) { - _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, _sslContext); + _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams, _sslContext); } else { _proxy->ice_invoke(_current.operation, _current.mode, inPair, outParams); } } - return true; // Batch invocation. + return 0; } else { - AMI_Array_Object_ice_invokePtr amiCB; - if(_proxy->ice_isTwoway()) - { - amiCB = new TwowayIceInvokeI(_amdCB, instance, connection); - } - else - { - amiCB = new OnewayIceInvokeI(_amdCB, instance, connection); - } - - bool sent; + Ice::AsyncResultPtr result; if(_forwardContext) { if(_sslContext.size() > 0) { Ice::Context ctx = _current.ctx; ctx.insert(_sslContext.begin(), _sslContext.end()); - sent = _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair, ctx); + result = _proxy->begin_ice_invoke(_current.operation, _current.mode, inPair, ctx, cb, this); } else { - sent = _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair, _current.ctx); + result = _proxy->begin_ice_invoke(_current.operation, _current.mode, inPair, _current.ctx, cb, this); } } else { if(_sslContext.size() > 0) { - sent = _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair, _sslContext); + result = _proxy->begin_ice_invoke(_current.operation, _current.mode, inPair, _sslContext, cb, this); } else { - sent = _proxy->ice_invoke_async(amiCB, _current.operation, _current.mode, inPair); + result = _proxy->begin_ice_invoke(_current.operation, _current.mode, inPair, cb, this); } } - if(sent && !_proxy->ice_isTwoway()) - { -#if (defined(_MSC_VER) && (_MSC_VER >= 1600)) - _amdCB->ice_response(true, pair<const Byte*, const Byte*>(nullptr, nullptr)); -#else - _amdCB->ice_response(true, pair<const Byte*, const Byte*>(0, 0)); -#endif - } - return false; // Not a batch invocation. + + return result; } } @@ -255,14 +130,50 @@ Glacier2::Request::override(const RequestPtr& other) const } // + // Don't override if the override isn't the same. + // + if(_override != other->_override) + { + return false; + } + + // // We cannot override if the proxies differ. // - if(_proxy != other->_proxy) + return _proxy == other->_proxy; +} + +void +Glacier2::Request::response(bool ok, const pair<const Ice::Byte*, const Ice::Byte*>& outParams) +{ + assert(_proxy->ice_isTwoway()); + _amdCB->ice_response(ok, outParams); +} + +void +Glacier2::Request::exception(const Ice::Exception& ex) +{ + // + // Only for twoways, oneway or batch oneway dispatches are finished + // when queued, see queued(). + // + if(_proxy->ice_isTwoway()) { - return false; + _amdCB->ice_exception(ex); } +} - return _override == other->_override; +void +Glacier2::Request::queued() +{ + if(!_proxy->ice_isTwoway()) + { +#if (defined(_MSC_VER) && (_MSC_VER >= 1600)) + _amdCB->ice_response(true, pair<const Byte*, const Byte*>(nullptr, nullptr)); +#else + _amdCB->ice_response(true, pair<const Byte*, const Byte*>(0, 0)); +#endif + } } Glacier2::RequestQueue::RequestQueue(const RequestQueueThreadPtr& requestQueueThread, @@ -270,7 +181,11 @@ Glacier2::RequestQueue::RequestQueue(const RequestQueueThreadPtr& requestQueueTh const Ice::ConnectionPtr& connection) : _requestQueueThread(requestQueueThread), _instance(instance), - _connection(connection) + _connection(connection), + _callback(newCallback_Object_ice_invoke(this, &RequestQueue::response, &RequestQueue::exception, + &RequestQueue::sent)), + _flushCallback(newCallback_Connection_flushBatchRequests(this, &RequestQueue::exception, &RequestQueue::sent)), + _pendingSend(false) { } @@ -280,7 +195,7 @@ Glacier2::RequestQueue::addRequest(const RequestPtr& request) IceUtil::Mutex::Lock lock(*this); if(request->hasOverride()) { - for(vector<RequestPtr>::iterator p = _requests.begin(); p != _requests.end(); ++p) + for(deque<RequestPtr>::iterator p = _requests.begin(); p != _requests.end(); ++p) { // // If the new request overrides an old one, then abort the old @@ -288,6 +203,7 @@ Glacier2::RequestQueue::addRequest(const RequestPtr& request) // if(request->override(*p)) { + request->queued(); *p = request; return true; } @@ -297,11 +213,12 @@ Glacier2::RequestQueue::addRequest(const RequestPtr& request) // // No override, we add the new request. // - if(_requests.empty()) + if(_requests.empty() && (!_connection || !_pendingSend)) { _requestQueueThread->flushRequestQueue(this); // This might throw if the thread is destroyed. } _requests.push_back(request); + request->queued(); return false; } @@ -309,13 +226,43 @@ void Glacier2::RequestQueue::flushRequests(set<Ice::ObjectPrx>& batchProxies) { IceUtil::Mutex::Lock lock(*this); - for(vector<RequestPtr>::const_iterator p = _requests.begin(); p != _requests.end(); ++p) + if(_connection) + { + if(_pendingSend) + { + return; + } + flush(); + } + else + { + flush(batchProxies); + } +} + +void +Glacier2::RequestQueue::flush() +{ + assert(_connection); + _pendingSend = false; + _pendingSendRequest = 0; + + bool flushBatchRequests = false; + deque<RequestPtr>::iterator p; + for(p = _requests.begin(); p != _requests.end(); ++p) { try { - if((*p)->invoke(_instance, _connection)) // If batch invocation, add the proxy to the batch proxy set. + Ice::AsyncResultPtr result = (*p)->invoke(_callback); + if(!result) { - batchProxies.insert((*p)->getProxy()); + flushBatchRequests = true; + } + else if(!result->sentSynchronously() && !result->isCompleted()) + { + _pendingSend = true; + _pendingSendRequest = *p++; + break; } } catch(const Ice::LocalException&) @@ -323,9 +270,104 @@ Glacier2::RequestQueue::flushRequests(set<Ice::ObjectPrx>& batchProxies) // Ignore, this can occur for batch requests. } } + + if(p == _requests.end()) + { + _requests.clear(); + } + else + { + _requests.erase(_requests.begin(), p); + } + + if(flushBatchRequests) + { + Ice::AsyncResultPtr result = _connection->begin_flushBatchRequests(_flushCallback); + if(!result->sentSynchronously() && !result->isCompleted()) + { + _pendingSend = true; + _pendingSendRequest = 0; + } + } +} + +void +Glacier2::RequestQueue::flush(set<Ice::ObjectPrx>& batchProxies) +{ + assert(!_connection); + + for(deque<RequestPtr>::const_iterator p = _requests.begin(); p != _requests.end(); ++p) + { + try + { + Ice::AsyncResultPtr result = (*p)->invoke(_callback); + if(!result) + { + batchProxies.insert((*p)->getProxy()); + } + } + catch(const Ice::LocalException&) + { + // Ignore, this can occur for batch requests. + } + } _requests.clear(); } +void +Glacier2::RequestQueue::response(bool ok, const pair<const Byte*, const Byte*>& outParams, const RequestPtr& request) +{ + assert(request); + request->response(ok, outParams); +} + +void +Glacier2::RequestQueue::exception(const Ice::Exception& ex, const RequestPtr& request) +{ + // + // If the connection has been lost, destroy the session. + // + if(_connection) + { + if(dynamic_cast<const Ice::SocketException*>(&ex) || + dynamic_cast<const Ice::TimeoutException*>(&ex) || + dynamic_cast<const Ice::ProtocolException*>(&ex)) + { + try + { + _instance->sessionRouter()->destroySession(_connection); + } + catch(const Exception&) + { + } + } + + IceUtil::Mutex::Lock lock(*this); + if(request == _pendingSendRequest) + { + flush(); + } + } + + if(request) + { + request->exception(ex); + } +} + +void +Glacier2::RequestQueue::sent(bool sentSynchronously, const RequestPtr& request) +{ + if(_connection && !sentSynchronously) + { + IceUtil::Mutex::Lock lock(*this); + if(request == _pendingSendRequest) + { + flush(); + } + } +} + Glacier2::RequestQueueThread::RequestQueueThread(const IceUtil::Time& sleepTime) : IceUtil::Thread("Glacier2 request queue thread"), _sleepTime(sleepTime), @@ -445,29 +487,10 @@ Glacier2::RequestQueueThread::run() (*p)->flushRequests(flushProxySet); } - set<Ice::ConnectionPtr> flushConnectionSet; for(set<Ice::ObjectPrx>::const_iterator q = flushProxySet.begin(); q != flushProxySet.end(); ++q) { - // - // As an optimization, we only flush the proxy batch requests if we didn't - // already flush the requests of a proxy which is using the same connection. - // - Ice::ConnectionPtr connection = (*q)->ice_getCachedConnection(); - if(!connection || flushConnectionSet.find(connection) == flushConnectionSet.end()) - { - class FlushCB : public AMI_Object_ice_flushBatchRequests - { - public: - - virtual void ice_exception(const Ice::Exception&) { } // Ignore. - }; - (*q)->ice_flushBatchRequests_async(new FlushCB()); - - if(connection) - { - flushConnectionSet.insert(connection); - } - } + (*q)->begin_ice_flushBatchRequests(); } } } + diff --git a/cpp/src/Glacier2/RequestQueue.h b/cpp/src/Glacier2/RequestQueue.h index d117c0c0b96..ad13383320d 100644 --- a/cpp/src/Glacier2/RequestQueue.h +++ b/cpp/src/Glacier2/RequestQueue.h @@ -14,6 +14,8 @@ #include <IceUtil/Monitor.h> #include <Ice/Ice.h> +#include <deque> + namespace Glacier2 { @@ -26,20 +28,25 @@ typedef IceUtil::Handle<Request> RequestPtr; class RequestQueueThread; typedef IceUtil::Handle<RequestQueueThread> RequestQueueThreadPtr; -class Request : public IceUtil::Shared +class Request : public Ice::LocalObject { public: Request(const Ice::ObjectPrx&, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&, bool, const Ice::Context&, const Ice::AMD_Object_ice_invokePtr&); - bool invoke(const InstancePtr&, const Ice::ConnectionPtr&); + Ice::AsyncResultPtr invoke(const Ice::Callback_Object_ice_invokePtr& callback); bool override(const RequestPtr&) const; const Ice::ObjectPrx& getProxy() const { return _proxy; } bool hasOverride() const { return !_override.empty(); } private: + friend class RequestQueue; + void response(bool, const std::pair<const Ice::Byte*, const Ice::Byte*>&); + void exception(const Ice::Exception&); + void queued(); + const Ice::ObjectPrx _proxy; const Ice::ByteSeq _inParams; const Ice::Current _current; @@ -59,11 +66,23 @@ public: void flushRequests(std::set<Ice::ObjectPrx>&); private: + + void flush(); + void flush(std::set<Ice::ObjectPrx>&); + + void response(bool, const std::pair<const Ice::Byte*, const Ice::Byte*>&, const RequestPtr&); + void exception(const Ice::Exception&, const RequestPtr&); + void sent(bool, const RequestPtr&); const RequestQueueThreadPtr _requestQueueThread; const InstancePtr _instance; const Ice::ConnectionPtr _connection; - std::vector<RequestPtr> _requests; + const Ice::Callback_Object_ice_invokePtr _callback; + const Ice::Callback_Connection_flushBatchRequestsPtr _flushCallback; + + std::deque<RequestPtr> _requests; + bool _pendingSend; + RequestPtr _pendingSendRequest; }; typedef IceUtil::Handle<RequestQueue> RequestQueuePtr; diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp index e90848d7b1e..722c6a6c81b 100644 --- a/cpp/src/Ice/ConnectionI.cpp +++ b/cpp/src/Ice/ConnectionI.cpp @@ -1487,7 +1487,18 @@ ConnectionI::dispatch(const StartCallbackPtr& startCB, const vector<OutgoingAsyn IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); if(--_dispatchCount == 0) { - if(_state == StateFinished) + if(_state == StateClosing) + { + try + { + initiateShutdown(); + } + catch(const LocalException& ex) + { + setState(StateClosed, ex); + } + } + else if(_state == StateFinished) { _reaper->add(this); } diff --git a/cpp/src/Ice/ProxyFactory.cpp b/cpp/src/Ice/ProxyFactory.cpp index 0e5cbbef8f7..431994dc34a 100644 --- a/cpp/src/Ice/ProxyFactory.cpp +++ b/cpp/src/Ice/ProxyFactory.cpp @@ -14,6 +14,7 @@ #include <Ice/Proxy.h> #include <Ice/ReferenceFactory.h> #include <Ice/LocatorInfo.h> +#include <Ice/RouterInfo.h> #include <Ice/BasicStream.h> #include <Ice/Properties.h> #include <Ice/LoggerUtil.h> @@ -141,6 +142,9 @@ IceInternal::ProxyFactory::checkRetryAfterException(const LocalException& ex, // must *always* retry, so that the missing proxy is added // to the router. // + + ref->getRouterInfo()->clearCache(ref); + if(traceLevels->retry >= 1) { Trace out(logger, traceLevels->retryCat); diff --git a/cpp/src/Ice/RouterInfo.cpp b/cpp/src/Ice/RouterInfo.cpp index 911e553363c..f648cf7c8c3 100644 --- a/cpp/src/Ice/RouterInfo.cpp +++ b/cpp/src/Ice/RouterInfo.cpp @@ -338,6 +338,13 @@ IceInternal::RouterInfo::getAdapter() const return _adapter; } +void +IceInternal::RouterInfo::clearCache(const ReferencePtr& ref) +{ + IceUtil::Mutex::Lock sync(*this); + _identities.erase(ref->getIdentity()); +} + vector<EndpointIPtr> IceInternal::RouterInfo::setClientEndpoints(const Ice::ObjectPrx& proxy) { diff --git a/cpp/src/Ice/RouterInfo.h b/cpp/src/Ice/RouterInfo.h index e91f4d4bf98..679ee536691 100644 --- a/cpp/src/Ice/RouterInfo.h +++ b/cpp/src/Ice/RouterInfo.h @@ -84,6 +84,8 @@ public: void setAdapter(const Ice::ObjectAdapterPtr&); Ice::ObjectAdapterPtr getAdapter() const; + void clearCache(const ReferencePtr&); + // // The following methods need to be public for access by AMI callbacks. // diff --git a/cpp/test/Glacier2/Makefile b/cpp/test/Glacier2/Makefile index f1d077751c0..e41a3726978 100644 --- a/cpp/test/Glacier2/Makefile +++ b/cpp/test/Glacier2/Makefile @@ -13,6 +13,7 @@ include $(top_srcdir)/config/Make.rules SUBDIRS = router \ attack \ + override \ staticFiltering \ dynamicFiltering \ sessionControl \ diff --git a/cpp/test/Glacier2/Makefile.mak b/cpp/test/Glacier2/Makefile.mak index 242a4a9c14e..9af3be4ec06 100644 --- a/cpp/test/Glacier2/Makefile.mak +++ b/cpp/test/Glacier2/Makefile.mak @@ -13,6 +13,7 @@ top_srcdir = ..\.. SUBDIRS = router \
attack \
+ override \
staticFiltering \
dynamicFiltering \
sessionControl \
diff --git a/cpp/test/Glacier2/override/.depend b/cpp/test/Glacier2/override/.depend new file mode 100644 index 00000000000..5a0961312c5 --- /dev/null +++ b/cpp/test/Glacier2/override/.depend @@ -0,0 +1,5 @@ +Callback$(OBJEXT): Callback.cpp Callback.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Direct.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h +CallbackI$(OBJEXT): CallbackI.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CallbackI.h Callback.h ../../include/TestCommon.h +Client$(OBJEXT): Client.cpp $(includedir)/IceUtil/Random.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Application.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/Glacier2/Router.h $(includedir)/Glacier2/Session.h $(includedir)/Glacier2/SSLInfo.h ../../include/TestCommon.h CallbackI.h Callback.h +Server$(OBJEXT): Server.cpp $(includedir)/Ice/Application.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CallbackI.h Callback.h +Callback.cpp: Callback.ice $(slicedir)/Ice/BuiltinSequences.ice $(SLICE2CPP) $(SLICEPARSERLIB) diff --git a/cpp/test/Glacier2/override/.depend.mak b/cpp/test/Glacier2/override/.depend.mak new file mode 100644 index 00000000000..f5c29ac5c0d --- /dev/null +++ b/cpp/test/Glacier2/override/.depend.mak @@ -0,0 +1,5 @@ +Callback$(OBJEXT): Callback.cpp Callback.h "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/IceUtil/Iterator.h" +CallbackI$(OBJEXT): CallbackI.cpp "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" CallbackI.h Callback.h ../../include/TestCommon.h +Client$(OBJEXT): Client.cpp "$(includedir)/IceUtil/Random.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/IceUtil.h" "$(includedir)/IceUtil/AbstractMutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Cache.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/CountDownLatch.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/CtrlCHandler.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/RWRecMutex.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/RecMutex.h" "$(includedir)/IceUtil/StaticMutex.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/UUID.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" "$(includedir)/Glacier2/Router.h" "$(includedir)/Glacier2/Session.h" "$(includedir)/Glacier2/SSLInfo.h" ../../include/TestCommon.h CallbackI.h Callback.h +Server$(OBJEXT): Server.cpp "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" CallbackI.h Callback.h +Callback.cpp: Callback.ice "$(slicedir)/Ice/BuiltinSequences.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)" diff --git a/cpp/test/Glacier2/override/Callback.ice b/cpp/test/Glacier2/override/Callback.ice new file mode 100644 index 00000000000..c7f9fd2c109 --- /dev/null +++ b/cpp/test/Glacier2/override/Callback.ice @@ -0,0 +1,36 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef CALLBACK_ICE +#define CALLBACK_ICE + +#include <Ice/BuiltinSequences.ice> + +module Test +{ + +interface CallbackReceiver +{ + ["ami"] void callback(int token); + + ["ami"] void callbackWithPayload(Ice::ByteSeq payload); +}; + +interface Callback +{ + ["amd"] void initiateCallback(CallbackReceiver* proxy, int token); + + ["amd"] void initiateCallbackWithPayload(CallbackReceiver* proxy); + + void shutdown(); +}; + +}; + +#endif diff --git a/cpp/test/Glacier2/override/CallbackI.cpp b/cpp/test/Glacier2/override/CallbackI.cpp new file mode 100644 index 00000000000..b561b120fed --- /dev/null +++ b/cpp/test/Glacier2/override/CallbackI.cpp @@ -0,0 +1,222 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <Ice/Ice.h> +#include <CallbackI.h> +#include <TestCommon.h> + +using namespace std; +using namespace Ice; +using namespace Test; + +class Cookie : public Ice::LocalObject +{ +}; +typedef IceUtil::Handle<Cookie> CookiePtr; + +template<class T> +class CookieT : public Cookie +{ +public: + + CookieT(const T& v) : cb(v) + { + } + + T cb; +}; + +template<typename T> CookiePtr newCookie(const T& cb) +{ + return new CookieT<T>(cb); +} + +template<typename T> const T& getCookie(const CookiePtr& cookie) +{ + return dynamic_cast<CookieT<T>* >(cookie.get())->cb; +} + +class AsyncCB : public IceUtil::Shared +{ +public: + + void + responseCallback(const CookiePtr& cookie) + { + getCookie<AMD_Callback_initiateCallbackPtr>(cookie)->ice_response(); + } + + void + exceptionCallback(const Ice::Exception& ex, const CookiePtr& cookie) + { + getCookie<AMD_Callback_initiateCallbackPtr>(cookie)->ice_exception(ex); + } + + void + responseCallbackWithPayload(const CookiePtr& cookie) + { + getCookie<AMD_Callback_initiateCallbackWithPayloadPtr>(cookie)->ice_response(); + } + + void + exceptionCallbackWithPayload(const Ice::Exception& ex, const CookiePtr& cookie) + { + getCookie<AMD_Callback_initiateCallbackWithPayloadPtr>(cookie)->ice_exception(ex); + } +}; +typedef IceUtil::Handle<AsyncCB> AsyncCBPtr; + +CallbackReceiverI::CallbackReceiverI() : + _holding(false), + _lastToken(-1), + _callback(0), + _callbackWithPayload(0) +{ +} + +void +CallbackReceiverI::callback(int token, const Current&) +{ + Lock sync(*this); + checkForHold(); + + if(token != _lastToken) + { + _callback = 0; + _lastToken = token; + } + ++_callback; + notifyAll(); +} + +void +CallbackReceiverI::callbackWithPayload(const Ice::ByteSeq&, const Current&) +{ + Lock sync(*this); + checkForHold(); + ++_callbackWithPayload; + notifyAll(); +} + +int +CallbackReceiverI::callbackOK(int count, int token) +{ + Lock sync(*this); + + while(_lastToken != token || _callback < count) + { + wait(); + } + + _callback -= count; + return _callback; +} + +int +CallbackReceiverI::callbackWithPayloadOK(int count) +{ + Lock sync(*this); + + while(_callbackWithPayload < count) + { + wait(); + } + + _callbackWithPayload -= count; + return _callbackWithPayload; +} + +void +CallbackReceiverI::hold() +{ + Lock sync(*this); + _holding = true; +} + +void +CallbackReceiverI::activate() +{ + Lock sync(*this); + _holding = false; + notifyAll(); +} + +void +CallbackReceiverI::checkForHold() +{ + while(_holding) + { + wait(); + } +} + +CallbackI::CallbackI() +{ +} + +void +CallbackI::initiateCallback_async(const AMD_Callback_initiateCallbackPtr& cb, + const CallbackReceiverPrx& proxy, int token, const Current& current) +{ + Ice::Context::const_iterator p = current.ctx.find("serverOvrd"); + Ice::Context ctx = current.ctx; + if(p != current.ctx.end()) + { + ctx["_ovrd"] = p->second; + } + + if(proxy->ice_isTwoway()) + { + AsyncCBPtr acb = new AsyncCB(); + proxy->begin_callback(token, ctx, + newCallback_CallbackReceiver_callback(acb, &AsyncCB::responseCallback, &AsyncCB::exceptionCallback), + newCookie(cb)); + } + else + { + proxy->callback(token, ctx); + cb->ice_response(); + } +} + +void +CallbackI::initiateCallbackWithPayload_async(const AMD_Callback_initiateCallbackWithPayloadPtr& cb, + const CallbackReceiverPrx& proxy, + const Current& current) +{ + Ice::Context::const_iterator p = current.ctx.find("serverOvrd"); + Ice::Context ctx = current.ctx; + if(p != current.ctx.end()) + { + ctx["_ovrd"] = p->second; + } + + Ice::ByteSeq seq(1000 * 1024, 0); + if(proxy->ice_isTwoway()) + { + AsyncCBPtr acb = new AsyncCB(); + proxy->begin_callbackWithPayload(seq, ctx, + newCallback_CallbackReceiver_callbackWithPayload( + acb, + &AsyncCB::responseCallbackWithPayload, + &AsyncCB::exceptionCallbackWithPayload), + newCookie(cb)); + } + else + { + proxy->callbackWithPayload(seq, ctx); + cb->ice_response(); + } +} + +void +CallbackI::shutdown(const Ice::Current& current) +{ + current.adapter->getCommunicator()->shutdown(); +} diff --git a/cpp/test/Glacier2/override/CallbackI.h b/cpp/test/Glacier2/override/CallbackI.h new file mode 100644 index 00000000000..29ca7ec5d81 --- /dev/null +++ b/cpp/test/Glacier2/override/CallbackI.h @@ -0,0 +1,59 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef CALLBACK_I_H +#define CALLBACK_I_H + +#include <IceUtil/Mutex.h> +#include <IceUtil/Monitor.h> +#include <Callback.h> +#include <vector> + +class CallbackReceiverI : public ::Test::CallbackReceiver, public IceUtil::Monitor<IceUtil::Mutex> +{ +public: + + CallbackReceiverI(); + + virtual void callback(int token, const Ice::Current&); + virtual void callbackWithPayload(const Ice::ByteSeq&, const ::Ice::Current&); + + int callbackOK(int, int); + int callbackWithPayloadOK(int); + + void hold(); + void activate(); + +private: + + void checkForHold(); + + bool _holding; + + int _lastToken; + int _callback; + int _callbackWithPayload; +}; +typedef IceUtil::Handle<CallbackReceiverI> CallbackReceiverIPtr; + +class CallbackI : public ::Test::Callback +{ +public: + + CallbackI(); + + virtual void initiateCallback_async(const ::Test::AMD_Callback_initiateCallbackPtr&, + const ::Test::CallbackReceiverPrx&, int, const Ice::Current&); + virtual void initiateCallbackWithPayload_async(const ::Test::AMD_Callback_initiateCallbackWithPayloadPtr&, + const ::Test::CallbackReceiverPrx&, + const ::Ice::Current&); + virtual void shutdown(const Ice::Current&); +}; + +#endif diff --git a/cpp/test/Glacier2/override/Client.cpp b/cpp/test/Glacier2/override/Client.cpp new file mode 100644 index 00000000000..ef2896783f6 --- /dev/null +++ b/cpp/test/Glacier2/override/Client.cpp @@ -0,0 +1,210 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <IceUtil/Random.h> +#include <IceUtil/IceUtil.h> +#include <Ice/Application.h> +#include <Glacier2/Router.h> +#include <TestCommon.h> +#include <CallbackI.h> + +using namespace std; +using namespace Ice; +using namespace Test; + +static Ice::InitializationData initData; + + +class CallbackClient : public Application +{ +public: + + virtual int run(int, char*[]); +}; + +int +main(int argc, char* argv[]) +{ + // + // We must disable connection warnings, because we attempt to ping + // the router before session establishment, as well as after + // session destruction. Both will cause a ConnectionLostException. + // + initData.properties = Ice::createProperties(argc, argv); + initData.properties->setProperty("Ice.Warn.Connections", "0"); + initData.properties->setProperty("Ice.ThreadPool.Client.Serialize", "1"); + + CallbackClient app; + return app.main(argc, argv, initData); +} + +int +CallbackClient::run(int argc, char* argv[]) +{ + ObjectPrx routerBase = communicator()->stringToProxy("Glacier2/router:default -p 12347"); + Glacier2::RouterPrx router = Glacier2::RouterPrx::checkedCast(routerBase); + communicator()->setDefaultRouter(router); + + ObjectPrx base = communicator()->stringToProxy("c/callback:tcp -p 12010"); + Glacier2::SessionPrx session = router->createSession("userid", "abc123"); + base->ice_ping(); + + CallbackPrx twoway = CallbackPrx::checkedCast(base); + CallbackPrx oneway = twoway->ice_oneway(); + CallbackPrx batchOneway = twoway->ice_batchOneway(); + + communicator()->getProperties()->setProperty("Ice.PrintAdapterReady", "0"); + ObjectAdapterPtr adapter = communicator()->createObjectAdapterWithRouter("CallbackReceiverAdapter", router); + adapter->activate(); + + string category = router->getCategoryForClient(); + + CallbackReceiverI* callbackReceiverImpl = new CallbackReceiverI; + ObjectPtr callbackReceiver = callbackReceiverImpl; + + Identity callbackReceiverIdent; + callbackReceiverIdent.name = "callbackReceiver"; + callbackReceiverIdent.category = category; + CallbackReceiverPrx twowayR = + CallbackReceiverPrx::uncheckedCast(adapter->add(callbackReceiver, callbackReceiverIdent)); + CallbackReceiverPrx onewayR = twowayR->ice_oneway(); + + { + cout << "testing client request override... " << flush; + { + for(int i = 0; i < 5; i++) + { + oneway->initiateCallback(twowayR, 0); + oneway->initiateCallback(twowayR, 0); + callbackReceiverImpl->callbackOK(2, 0); + } + } + + { + Ice::Context ctx; + ctx["_ovrd"] = "test"; + for(int i = 0; i < 5; i++) + { + oneway->initiateCallback(twowayR, i, ctx); + oneway->initiateCallback(twowayR, i, ctx); + oneway->initiateCallback(twowayR, i, ctx); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(100)); + test(callbackReceiverImpl->callbackOK(1, i) < 3); + } + } + cout << "ok" << endl; + } + + { + cout << "testing server request override... " << flush; + Ice::Context ctx; + ctx["serverOvrd"] = "test"; + for(int i = 0; i < 5; i++) + { + oneway->initiateCallback(onewayR, i, ctx); + oneway->initiateCallback(onewayR, i, ctx); + oneway->initiateCallback(onewayR, i, ctx); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(100)); + test(callbackReceiverImpl->callbackOK(1, i) < 3); + } + oneway->initiateCallback(twowayR, 0); + test(callbackReceiverImpl->callbackOK(1, 0) == 0); + + int count = 0; + int nRetry = 0; + do + { + callbackReceiverImpl->hold(); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallbackWithPayload(onewayR, ctx); + oneway->initiateCallback(twowayR, 0); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(200)); + callbackReceiverImpl->activate(); + test(callbackReceiverImpl->callbackOK(1, 0) == 0); + count = callbackReceiverImpl->callbackWithPayloadOK(0); + callbackReceiverImpl->callbackWithPayloadOK(count); + } + while(count == 10 && nRetry++ < 10); + test(count < 10); + + oneway->initiateCallbackWithPayload(twowayR); + oneway->initiateCallbackWithPayload(twowayR); + callbackReceiverImpl->hold(); + oneway->initiateCallbackWithPayload(twowayR); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallbackWithPayload(twowayR); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1000)); + callbackReceiverImpl->activate(); + test(callbackReceiverImpl->callbackWithPayloadOK(4) == 0); + if(callbackReceiverImpl->callbackOK(1, 0) != 0) + { + cerr << callbackReceiverImpl->callbackOK(0, 0) << endl; + test(false); + } + + ctx["_fwd"] = "O"; + + oneway->initiateCallbackWithPayload(twowayR); + callbackReceiverImpl->hold(); + oneway->initiateCallbackWithPayload(twowayR); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallback(onewayR, 0, ctx); + oneway->initiateCallbackWithPayload(twowayR); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(200)); + callbackReceiverImpl->activate(); + test(callbackReceiverImpl->callbackWithPayloadOK(3) == 0); + test(callbackReceiverImpl->callbackOK(1, 0) == 0); + + cout << "ok" << endl; + } + + { + cout << "shutdown... " << flush; + twoway->shutdown(); + + try + { + router->destroySession(); + } + catch(const Ice::LocalException&) + { + test(false); + } + + communicator()->setDefaultRouter(0); + ObjectPrx processBase = communicator()->stringToProxy("Glacier2/admin -f Process:tcp -h 127.0.0.1 -p 12348"); + Ice::ProcessPrx process = Ice::ProcessPrx::checkedCast(processBase); + process->shutdown(); + try + { + process->ice_ping(); + test(false); + } + catch(const Ice::LocalException&) + { + cout << "ok" << endl; + } + } + return EXIT_SUCCESS; +} diff --git a/cpp/test/Glacier2/override/Makefile b/cpp/test/Glacier2/override/Makefile new file mode 100644 index 00000000000..5693c0a6530 --- /dev/null +++ b/cpp/test/Glacier2/override/Makefile @@ -0,0 +1,42 @@ +# ********************************************************************** +# +# Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +top_srcdir = ../../.. + +CLIENT = client +SERVER = server + +TARGETS = $(CLIENT) $(SERVER) + +OBJS = Callback.o \ + CallbackI.o + +COBJS = Client.o + +SOBJS = Server.o + +SRCS = $(OBJS:.o=.cpp) \ + $(COBJS:.o=.cpp) \ + $(SOBJS:.o=.cpp) + +SLICE_SRCS = Callback.ice + +include $(top_srcdir)/config/Make.rules + +CPPFLAGS := -I. -I../../include $(CPPFLAGS) + +$(CLIENT): $(OBJS) $(COBJS) + rm -f $@ + $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(COBJS) -lGlacier2 $(LIBS) + +$(SERVER): $(OBJS) $(SOBJS) + rm -f $@ + $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(SOBJS) $(LIBS) + +include .depend diff --git a/cpp/test/Glacier2/override/Makefile.mak b/cpp/test/Glacier2/override/Makefile.mak new file mode 100644 index 00000000000..5630bf075e2 --- /dev/null +++ b/cpp/test/Glacier2/override/Makefile.mak @@ -0,0 +1,50 @@ +# **********************************************************************
+#
+# Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ..\..\..
+
+CLIENT = client.exe
+SERVER = server.exe
+
+TARGETS = $(CLIENT) $(SERVER)
+
+OBJS = Callback.obj \
+ CallbackI.obj
+
+COBJS = Client.obj
+
+SOBJS = Server.obj
+
+SRCS = $(OBJS:.obj=.cpp) \
+ $(COBJS:.obj=.cpp) \
+ $(SOBJS:.obj=.cpp)
+
+!include $(top_srcdir)/config/Make.rules.mak
+
+CPPFLAGS = -I. -I../../include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
+
+!if "$(GENERATE_PDB)" == "yes"
+CPDBFLAGS = /pdb:$(CLIENT:.exe=.pdb)
+SPDBFLAGS = /pdb:$(SERVER:.exe=.pdb)
+!endif
+
+$(CLIENT): $(OBJS) $(COBJS)
+ $(LINK) $(LD_EXEFLAGS) $(CPDBFLAGS) $(SETARGV) $(OBJS) $(COBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS) glacier2$(LIBSUFFIX).lib
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+$(SERVER): $(OBJS) $(SOBJS)
+ $(LINK) $(LD_EXEFLAGS) $(SPDBFLAGS) $(SETARGV) $(OBJS) $(SOBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+clean::
+ del /q Callback.cpp Callback.h
+
+!include .depend.mak
diff --git a/cpp/test/Glacier2/override/Server.cpp b/cpp/test/Glacier2/override/Server.cpp new file mode 100644 index 00000000000..217fd7bea91 --- /dev/null +++ b/cpp/test/Glacier2/override/Server.cpp @@ -0,0 +1,47 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <Ice/Application.h> +#include <CallbackI.h> + +using namespace std; +using namespace Ice; +using namespace Test; + +class CallbackServer : public Application +{ +public: + + virtual int run(int, char*[]); +}; + +int +main(int argc, char* argv[]) +{ + Ice::InitializationData initData; + initData.properties = Ice::createProperties(argc, argv); + + initData.properties->setProperty("Ice.Warn.Connections", "0"); + initData.properties->setProperty("Ice.Warn.Dispatch", "0"); + initData.properties->setProperty("Ice.ThreadPool.Server.Serialize", "1"); + + CallbackServer app; + return app.main(argc, argv, initData); +} + +int +CallbackServer::run(int argc, char* argv[]) +{ + communicator()->getProperties()->setProperty("CallbackAdapter.Endpoints", "tcp -p 12010"); + ObjectAdapterPtr adapter = communicator()->createObjectAdapter("CallbackAdapter"); + adapter->add(new CallbackI(), communicator()->stringToIdentity("c/callback")); + adapter->activate(); + communicator()->waitForShutdown(); + return EXIT_SUCCESS; +} diff --git a/cpp/test/Glacier2/override/run.py b/cpp/test/Glacier2/override/run.py new file mode 100755 index 00000000000..bc8c0b7a8cc --- /dev/null +++ b/cpp/test/Glacier2/override/run.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# ********************************************************************** +# +# Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +import os, sys + +path = [ ".", "..", "../..", "../../..", "../../../.." ] +head = os.path.dirname(sys.argv[0]) +if len(head) > 0: + path = [os.path.join(head, p) for p in path] +path = [os.path.abspath(p) for p in path if os.path.exists(os.path.join(p, "scripts", "TestUtil.py")) ] +if len(path) == 0: + raise "can't find toplevel directory!" +sys.path.append(os.path.join(path[0])) +from scripts import * + +router = TestUtil.getGlacier2Router() + +if TestUtil.appverifier: + TestUtil.setAppVerifierSettings([router]) + +def startRouter(): + + args = ' --Ice.Warn.Dispatch=0' + \ + ' --Ice.Warn.Connections=0' + \ + ' --Ice.ThreadPool.Server.Serialize=1' + \ + ' --Ice.ThreadPool.Client.Serialize=1' + \ + ' --Glacier2.Filter.Category.Accept="c"' + \ + ' --Glacier2.SessionTimeout="30"' + \ + ' --Glacier2.Client.Endpoints="default -p 12347"' + \ + ' --Glacier2.Server.Endpoints="tcp -h 127.0.0.1"' \ + ' --Ice.Admin.Endpoints="tcp -h 127.0.0.1 -p 12348"' + \ + ' --Glacier2.PermissionsVerifier=Glacier2/NullPermissionsVerifier' + \ + ' --Glacier2.Client.ForwardContext=1' + \ + ' --Glacier2.Client.Trace.Override=0' + \ + ' --Glacier2.Client.Trace.Request=0' + \ + ' --Glacier2.Server.Trace.Override=0' + \ + ' --Glacier2.Server.Trace.Request=0' + \ + ' --Ice.Admin.InstanceName="Glacier2"' + \ + ' --Glacier2.Client.Buffered=1 --Glacier2.Server.Buffered=1' + \ + ' --Glacier2.Client.SleepTime=50 --Glacier2.Server.SleepTime=50' + + print "starting router in buffered mode...", + starterProc = TestUtil.startServer(router, args, count=2) + print "ok" + return starterProc + +name = os.path.join("Glacier2", "override") + +starterProc = startRouter() +TestUtil.clientServerTest(name, additionalClientOptions = " --shutdown") +starterProc.waitTestSuccess() + +if TestUtil.appverifier: + TestUtil.appVerifierAfterTestEnd([router]) + |