summaryrefslogtreecommitdiff
path: root/TAO/tao/PI_Server/ServerInterceptorAdapter.h
blob: dab75bd44009d9c7a143389b4f5c53b9b9bb87f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// -*- C++ -*-

//=============================================================================
/**
 *  @file    ServerInterceptorAdapter.h
 *
 *  $Id$
 *
 *   This file contains a helper class to simplify the support of
 *   interceptors in TAO_IDL generated skeletons.
 *
 *  @author  Nanbor Wang <nanbor@cs.wustl.edu>
 *  @author  Ossama Othman <ossama@uci.edu>
 *  @author  Kirthika Parameswaran  <kirthika@cs.wustl.edu>
 */
//=============================================================================

#ifndef TAO_SERVER_INTERCEPTOR_ADAPTER_H
#define TAO_SERVER_INTERCEPTOR_ADAPTER_H

#include /**/ "ace/pre.h"

#include "pi_server_export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "tao/orbconf.h"

#if TAO_HAS_INTERCEPTORS == 1

#include "ServerRequestInterceptorC.h"

#include "tao/Basic_Types.h"
#include "tao/ServerRequestInterceptor_Adapter.h"
#include "tao/PI/Interceptor_List_T.h"

namespace TAO
{
  typedef Interceptor_List< ::PortableInterceptor::ServerRequestInterceptor>
    ServerRequestInterceptor_List;
}

class TAO_ServerRequest;

namespace TAO
{
  class ServerRequestInfo;

  /**
   * @class ServerRequestInterceptor_Adapter_Impl
   *
   * @brief ServerRequestInterceptor_Adapter_Impl
   *
   * A convenient helper class to invoke registered server request
   * interceptor(s).
   */
  class TAO_PI_Server_Export ServerRequestInterceptor_Adapter_Impl :
    public ServerRequestInterceptor_Adapter
  {
  public:

    /// Constructor.
    ServerRequestInterceptor_Adapter_Impl (void);

    /**
     * @name PortableInterceptor Server Side Interception Points
     *
     * Each of these methods corresponds to a server side interception
     * point.
     */
    //@{
#if TAO_HAS_EXTENDED_FT_INTERCEPTORS == 1
    /// This method implements the "starting" server side interception
    /// point. It will be used as the first interception point and it is
    /// proprietary to TAO.
    /// @@ Will go away once Bug 1369 is fixed
    void tao_ft_interception_point (TAO_ServerRequest &server_request,
                                    TAO::ServerRequestInfo *ri,
                                    CORBA::OctetSeq_out oc
                                    ACE_ENV_ARG_DECL);
#endif /*TAO_HAS_EXTENDED_FT_INTERCEPTORS*/

    /// This method implements the "intermediate" server side
    /// interception point if the above #ifdef is set to 1 and a
    /// starting intercetion point if it is not set to 1.
    ///
    /// @note This method should have been the "starting" interception
    ///       point according to the interceptor spec. This will be
    ///       fixed once Bug 1369 is completely done.
    void receive_request_service_contexts (TAO_ServerRequest &server_request,
                                           TAO::ServerRequestInfo *ri
                                           ACE_ENV_ARG_DECL);

    /// This method an "intermediate" server side interception point.
    void receive_request (TAO_ServerRequest &server_request,
                          TAO::ServerRequestInfo *ri
                          ACE_ENV_ARG_DECL);

    /// This method implements one of the "ending" server side
    /// interception points.
    void send_reply (TAO_ServerRequest &server_request,
                     TAO::ServerRequestInfo *ri
                     ACE_ENV_ARG_DECL);

    /// This method implements one of the "ending" server side
    /// interception points.
    void send_exception (TAO_ServerRequest &server_request,
                         TAO::ServerRequestInfo *ri
                         ACE_ENV_ARG_DECL);

    /// This method implements one of the "ending" server side
    /// interception points.
    void send_other (TAO_ServerRequest &server_request,
                     TAO::ServerRequestInfo *ri
                     ACE_ENV_ARG_DECL);
    //@}

    /// Register an interceptor.
    virtual void add_interceptor (
      PortableInterceptor::ServerRequestInterceptor_ptr interceptor
      ACE_ENV_ARG_DECL);

    virtual void destroy_interceptors (ACE_ENV_SINGLE_ARG_DECL);

  private:

    /// List of registered interceptors.
    ServerRequestInterceptor_List interceptor_list_;
  };

}  // End namespace TAO

#endif  /* TAO_HAS_INTERCEPTORS */

#include /**/ "ace/post.h"

#endif /* TAO_SERVER_INTERCEPTOR_ADAPTER_H */