diff options
Diffstat (limited to 'TAO/tao/Servant_Base.cpp')
-rw-r--r-- | TAO/tao/Servant_Base.cpp | 225 |
1 files changed, 0 insertions, 225 deletions
diff --git a/TAO/tao/Servant_Base.cpp b/TAO/tao/Servant_Base.cpp deleted file mode 100644 index fe90e7fbe17..00000000000 --- a/TAO/tao/Servant_Base.cpp +++ /dev/null @@ -1,225 +0,0 @@ -// $Id$ - -#include "tao/Servant_Base.h" -#include "tao/Timeprobe.h" -#include "tao/Operation_Table.h" -#include "tao/ORB_Core.h" -#include "tao/Stub.h" -#include "tao/Environment.h" -#include "tao/Server_Request.h" - -ACE_RCSID(tao, Servant_Base, "$Id$") - -#if !defined (__ACE_INLINE__) -# include "tao/Servant_Base.i" -#endif /* ! __ACE_INLINE__ */ - -#if defined (ACE_ENABLE_TIMEPROBES) - -static const char *TAO_Servant_Base_Timeprobe_Description[] = - { - "Servant_Base::_find - start", - "Servant_Base::_find - end" - }; - -enum - { - TAO_SERVANT_BASE_FIND_START = 700, - TAO_SERVANT_BASE_FIND_END - }; - -// Setup Timeprobes -ACE_TIMEPROBE_EVENT_DESCRIPTIONS (TAO_Servant_Base_Timeprobe_Description, - TAO_SERVANT_BASE_FIND_START); - -#endif /* ACE_ENABLE_TIMEPROBES */ - -TAO_ServantBase::TAO_ServantBase (void) - : optable_ (0) -{ -} - -TAO_ServantBase::TAO_ServantBase (const TAO_ServantBase &) -{ -} - -TAO_ServantBase & -TAO_ServantBase::operator= (const TAO_ServantBase &) -{ - return *this; -} - -TAO_ServantBase::~TAO_ServantBase (void) -{ -} - -PortableServer::POA_ptr -TAO_ServantBase::_default_POA (CORBA::Environment &env) -{ - return TAO_ORB_Core_instance ()->root_poa_reference (env); -} - -CORBA::Boolean -TAO_ServantBase::_is_a (const char* logical_type_id, - CORBA::Environment &env) -{ - if (ACE_OS::strcmp (logical_type_id, CORBA::_tc_Object->id (env)) == 0) - { - return 1; - } - return 0; -} - -int -TAO_ServantBase::_find (const char *opname, - TAO_Skeleton& skelfunc) -{ - ACE_FUNCTION_TIMEPROBE (TAO_SERVANT_BASE_FIND_START); - return optable_->find (opname, skelfunc); -} - -int -TAO_ServantBase::_bind (const char *opname, - const TAO_Skeleton skel_ptr) -{ - return optable_->bind (opname, skel_ptr); -} - -TAO_Stub * -TAO_ServantBase::_create_stub (CORBA_Environment &env) -{ - TAO_Stub *stub; - - TAO_ORB_Core *orb_core = TAO_ORB_Core_instance (); - TAO_POA_Current *poa_current = orb_core->poa_current (); - - if (poa_current != 0 - && poa_current->in_upcall () - && this == poa_current->servant ()) - { - stub = orb_core->orb ()->create_stub_object (poa_current->object_key (), - this->_interface_repository_id (), - env); - } - else - { - PortableServer::POA_var poa = this->_default_POA (env); - if (env.exception () != 0) - return 0; - - CORBA::Object_var object = poa->servant_to_reference (this, env); - if (env.exception () != 0) - return 0; - - // Get the stub object - stub = object->_stubobj (); - - // Increment the reference count since <object> will zap its - // stub object on deletion. - stub->_incr_refcnt (); - } - - return stub; -} - -TAO_Stub * -TAO_Local_ServantBase::_create_stub (CORBA_Environment &env) -{ - PortableServer::ObjectId_var invalid_oid = - PortableServer::string_to_ObjectId ("invalid"); - - TAO_ObjectKey tmp_key (invalid_oid->length (), - invalid_oid->length (), - invalid_oid->get_buffer (), - 0); - // Note the use of a fake key and no registration with POAs - return TAO_ORB_Core_instance ()->orb ()->create_stub_object (tmp_key, - this->_interface_repository_id (), - env); -} - -#if !defined (TAO_HAS_MINIMUM_CORBA) - -CORBA::Object_ptr -TAO_DynamicImplementation::_this (CORBA::Environment &env) -{ - // The _this() function returns a CORBA::Object_ptr for the target - // object. Unlike _this() for static skeletons, its return type is - // not interface-specific because a DSI servant may very well - // incarnate multiple CORBA objects of different types. - TAO_Stub *stub = this->_create_stub (env); - if (env.exception () != 0) - return CORBA::Object::_nil (); - - // Create a object - return new CORBA::Object (stub, this, 1); -} - -const char * -TAO_DynamicImplementation::_interface_repository_id (void) const -{ - // This should never be called - return 0; -} - -void * -TAO_DynamicImplementation::_downcast (const char *repository_id) -{ - ACE_UNUSED_ARG (repository_id); - - // Don't know enough to do better - return this; -} - -TAO_Stub * -TAO_DynamicImplementation::_create_stub (CORBA::Environment &env) -{ - // If DynamicImplementation::_this() is invoked outside of the - // context of a request invocation on a target object being served - // by the DSI servant, it raises the PortableServer::WrongPolicy - // exception. - TAO_ORB_Core *orb_core = TAO_ORB_Core_instance (); - TAO_POA_Current *poa_current = orb_core->poa_current (); - - if (poa_current == 0 - || !poa_current->in_upcall () - || this != poa_current->servant ()) - { - CORBA::Exception *exception = new PortableServer::POA::WrongPolicy; - env.exception (exception); - return 0; - } - - PortableServer::POA_var poa = poa_current->get_POA (env); - if (env.exception () != 0) - return 0; - - CORBA::RepositoryId interface = this->_primary_interface (poa_current->object_id (), - poa.in (), - env); - if (env.exception () != 0) - return 0; - - return TAO_ORB_Core_instance ()->orb ()->create_stub_object (poa_current->object_key (), - interface, - env); -} - -void -TAO_DynamicImplementation::_dispatch (CORBA::ServerRequest &request, - void *context, - CORBA::Environment &env) -{ - ACE_UNUSED_ARG (context); - - // Delegate to user - this->invoke (&request, env); - - if (request.response_expected ()) - { - request.init_reply (env); - request.dsi_marshal (env); - } -} - -#endif /* TAO_HAS_MINIMUM_CORBA */ |