summaryrefslogtreecommitdiff
path: root/TAO/tao/PI_Server/ServerRequestInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/PI_Server/ServerRequestInfo.h')
-rw-r--r--TAO/tao/PI_Server/ServerRequestInfo.h317
1 files changed, 317 insertions, 0 deletions
diff --git a/TAO/tao/PI_Server/ServerRequestInfo.h b/TAO/tao/PI_Server/ServerRequestInfo.h
new file mode 100644
index 00000000000..1ba2e9c0026
--- /dev/null
+++ b/TAO/tao/PI_Server/ServerRequestInfo.h
@@ -0,0 +1,317 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file ServerRequestInfo.h
+ *
+ * $Id$
+ *
+ * This is the implementation of the
+ * @c PortableInterceptor::ServerRequestInfo interface.
+ *
+ * @author Kirthika Parameswaran <kirthika@cs.wustl.edu>
+ * @author Ossama Othman
+ */
+//=============================================================================
+
+#ifndef TAO_SERVER_REQUEST_INFO_H
+#define TAO_SERVER_REQUEST_INFO_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/orbconf.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if (TAO_HAS_INTERCEPTORS == 1)
+
+#include "tao/AnyTypeCode/AnyTypeCode_methods.h"
+#include "tao/PI_Server/ServerRequestInfoC.h"
+#include "tao/PI/PIForwardRequestC.h"
+#include "tao/LocalObject.h"
+#include "tao/OctetSeqC.h"
+#include "tao/TAO_Server_Request.h"
+#include "tao/PortableInterceptorC.h"
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_ServerRequest;
+class TAO_Service_Context;
+
+namespace TAO
+{
+ namespace Portable_Server
+ {
+ class Servant_Upcall;
+ }
+}
+
+namespace TAO
+{
+ /**
+ * @class ServerRequestInfo
+ *
+ * @brief Implementation of the
+ * @c PortableInterceptor::ServerRequestInfo IDL interface.
+ *
+ * Implementation of the @c PortableInterceptor::ServerRequestInfo
+ * IDL interface.
+ *
+ * @note This class is currently not meant to be reference counted
+ * since it is instantiated on the stack.
+ */
+ class ServerRequestInfo
+ : public virtual PortableInterceptor::ServerRequestInfo
+ , public virtual CORBA::LocalObject
+ {
+ public:
+
+ /// Constructor.
+ ServerRequestInfo (TAO_ServerRequest & server_request,
+ TAO::Argument * const * args,
+ size_t nargs,
+ void * servant_upcall,
+ CORBA::TypeCode_ptr const * exceptions,
+ CORBA::ULong nexceptions);
+
+ /// Return an ID unique to the current request. This request ID may
+ /// or may not be the same as the GIOP request ID.
+ virtual CORBA::ULong request_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the operation name for the current request.
+ virtual char * operation (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the list of arguments passed to the current operation.
+ virtual Dynamic::ParameterList * arguments (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the list of exceptions the current operation is capable
+ /// of throwing.
+ virtual Dynamic::ExceptionList * exceptions (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual Dynamic::ContextList * contexts (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual Dynamic::RequestContext * operation_context (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the result of the current request. If there is no
+ /// return value then an @c Any with @c tk_void @c TypeCode is
+ /// returned. This method is not valid for oneway operations.
+ virtual CORBA::Any * result (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Returns @c true for a two-way operation, and @c false otherwise.
+ virtual CORBA::Boolean response_expected (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the @c sync_scope policy value for the current one-way
+ /// operation. If the operation is not a one-way, a
+ /// @c CORBA::BAD_INV_ORDER exception is thrown.
+ virtual Messaging::SyncScope sync_scope (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the reply status for the current request.
+ /**
+ * Statuses can be @c PortableInterceptor::SUCCESSFUL,
+ * @c SYSTEM_EXCEPTION, @c USER_EXCEPTION, @c LOCATION_FORWARD,
+ * @c TRANSPORT_RETRY, @c UNKNOWN..
+ */
+ virtual PortableInterceptor::ReplyStatus reply_status (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// If the reply status is
+ /// @c PortableInterceptor::LOCATION_FORWARD return the
+ /// object reference to which the request was forwarded.
+ virtual CORBA::Object_ptr forward_reference (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException)) ;
+
+ /// Retrieve data from the "request scope" @c PICurrent object.
+ virtual CORBA::Any * get_slot (
+ PortableInterceptor::SlotId id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::InvalidSlot));
+
+ /// Return the @c IOP::ServiceContext with the given
+ /// @c IOP::ServiceId from the request service context list.
+ virtual IOP::ServiceContext * get_request_service_context (
+ IOP::ServiceId id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the @c IOP::ServiceContext with the given
+ /// @c IOP::ServiceId from the reply service context list.
+ virtual IOP::ServiceContext * get_reply_service_context (
+ IOP::ServiceId id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return an @c Any containing the exception being sent, if any.
+ /// Otherwise, throw a @c CORBA::BAD_INV_ORDER exception.
+ /**
+ * @note There is no trivial way to extract the exception from an
+ * @c Any.
+ */
+ virtual CORBA::Any * sending_exception (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the @c ObjectId for the target object.
+ virtual PortableInterceptor::ObjectId * object_id (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the @c AdapterId for the POA handling the current
+ /// request.
+ virtual CORBA::OctetSeq * adapter_id (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the server_id of the server. The value is passed to
+ /// the ORB via @c -ORBServerId parameter.
+ virtual char * server_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the ORBId value that is passed to the @c ORB_init
+ /// call.
+ virtual char * orb_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the name of the object adapter that services requests
+ /// for the invoked object.
+ virtual PortableInterceptor::AdapterName * adapter_name (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the most derived interface of the target object.
+ virtual char * target_most_derived_interface (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the policy of the given type in effect for the current
+ /// request.
+ virtual CORBA::Policy_ptr get_server_policy (
+ CORBA::PolicyType type
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Insert data into the "request scope" @c PICurrent object.
+ virtual void set_slot (PortableInterceptor::SlotId id,
+ const CORBA::Any & data
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ PortableInterceptor::InvalidSlot));
+
+ /// Returns true if the target's type corresponds to the given
+ /// @c RepositoryId.
+ virtual CORBA::Boolean target_is_a (const char * id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Add the @c IOP::ServiceContext to the reply (outgoing)
+ /// @c IOP::ServiceContextList.
+ virtual void add_reply_service_context (
+ const IOP::ServiceContext & service_context,
+ CORBA::Boolean replace
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ public:
+
+ /**
+ * @name Helper methods specific to TAO.
+ */
+ //@{
+
+ /// Extract the forward object reference from the
+ /// @c PortableInterceptor::ForwardRequest exception, and set the
+ /// reply status flag accordingly.
+ void forward_reference (PortableInterceptor::ForwardRequest &exc);
+
+ /// Set the forward reference associated with the current
+ /// LOCATION_FORWARD reply.
+ /**
+ * @note This method is only invoked when a
+ * @c PortableServer::ForwardRequest exception is thrown by a
+ * servant manager.
+ */
+ void forward_reference (CORBA::Object_ptr obj);
+
+ //@}
+
+ /// Return a reference to the underlying @c TAO_ServerRequest
+ /// object.
+ TAO_ServerRequest &server_request (void);
+
+ protected:
+
+ /// Helper method to get the request and response service
+ /// contexts.
+ IOP::ServiceContext * get_service_context_i (
+ TAO_Service_Context & service_context_list,
+ IOP::ServiceId id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ protected:
+
+ /// Underlying request object that contains much of the
+ /// information encapsulated by this @c ServerRequestInfo
+ /// implementation.
+ TAO_ServerRequest & server_request_;
+
+ /// Operation argument list.
+ TAO::Argument * const * const args_;
+
+ /// Number of element in the operation argument list.
+ size_t const nargs_;
+
+ /// Pointer to the @c Servant_Upcall object that contains the
+ /// object ID, among other things.
+ TAO::Portable_Server::Servant_Upcall * const servant_upcall_;
+
+ /// Array of @c TypeCodes for user exceptions the operation is
+ /// capable of raising.
+ CORBA::TypeCode_ptr const * const exceptions_;
+
+ /// The number of elements in the @c exceptions_ array.
+ CORBA::ULong const nexceptions_;
+ };
+
+} // End namespace TAO
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+# if defined (__ACE_INLINE__)
+# include "tao/PI_Server/ServerRequestInfo.inl"
+# endif /* __ACE_INLINE__ */
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#endif /* TAO_HAS_INTERCEPTORS == 1 */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_SERVER_REQUEST_INFO_H */