summaryrefslogtreecommitdiff
path: root/TAO/tao/Forwarding_Servant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Forwarding_Servant.cpp')
-rw-r--r--TAO/tao/Forwarding_Servant.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/TAO/tao/Forwarding_Servant.cpp b/TAO/tao/Forwarding_Servant.cpp
new file mode 100644
index 00000000000..5b3e828983a
--- /dev/null
+++ b/TAO/tao/Forwarding_Servant.cpp
@@ -0,0 +1,41 @@
+// $Id$
+
+#include "tao/Forwarding_Servant.h"
+
+#if (TAO_HAS_MINIMUM_CORBA == 0)
+
+#include "tao/Object.h"
+#include "tao/POAC.h"
+#include "tao/Any.h"
+#include "tao/Server_Request.h"
+
+ACE_RCSID(tao, Forwarding_Servant, "$Id$")
+
+TAO_Forwarding_Servant::TAO_Forwarding_Servant (CORBA::Object_ptr forward_to,
+ const char *interface_repository_id)
+ : forward_to_ (CORBA::Object::_duplicate (forward_to)),
+ interface_repository_id_ (CORBA::string_dup (interface_repository_id))
+{
+}
+
+void
+TAO_Forwarding_Servant::invoke (CORBA::ServerRequest_ptr request,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ PortableServer::ForwardRequest exception (this->forward_to_.in ());
+
+ CORBA::Any any;
+ any <<= exception;
+
+ request->set_exception (any, ACE_TRY_ENV);
+}
+
+CORBA::RepositoryId
+TAO_Forwarding_Servant::_primary_interface (const PortableServer::ObjectId & /* oid */,
+ PortableServer::POA_ptr /* poa */,
+ CORBA::Environment & /* ACE_TRY_ENV */)
+{
+ return CORBA::string_dup (this->interface_repository_id_.in ());
+}
+
+#endif /* TAO_HAS_MINIMUM_CORBA */