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
140
141
142
143
144
145
146
147
|
// This may look like C, but it's really -*- C++ -*-
// ============================================================================
//
// = LIBRARY
// TAO
//
// = FILENAME
// svrrqst.h
//
// = DESCRIPTION
//
// Header file for Win32 C/C++/COM interface to CORBA's Dynamic
// Server Skeleton Interface's "Server Request" type.
//
// = AUTHOR
// Copyright 1994-1995 by Sun Microsystems, Inc.
//
// = VERSION
// $Id$
//
// ============================================================================
#if !defined (TAO_SVRRQST_H)
#define TAO_SVRRQST_H
#include "ace/OS.h"
#include "tao/cdr.h"
void CORBA_release (CORBA_ServerRequest_ptr req);
CORBA_Boolean CORBA_is_nil (CORBA_ServerRequest_ptr req);
extern "C" const IID IID_CORBA_ServerRequest;
class ACE_Svc_Export CORBA_ServerRequest : public IUnknown
// = TITLE
// XXX this is currently in an intermediate state; this is not
// supposed to be IIOP-specific, or to expose quite so many
// implementation details, but right now it is.
{
public:
virtual void __stdcall params (CORBA_NVList_ptr list,
CORBA_Environment &env) = 0;
// Implementation uses this to provide the ORB with the operation's
// parameter list ... on return, their values are available; the
// list fed in has typecodes and (perhap) memory assigned.
virtual void __stdcall result (CORBA_Any_ptr value,
CORBA_Environment &env) = 0;
// Implementation uses this to provide the operation result
// ... illegal if exception() was called or params() was not called.
//
// XXX Implementation should be able to assume response has been
// sent when this returns, and reclaim memory it allocated.
virtual void __stdcall exception (CORBA_ExceptionType type,
CORBA_Any_ptr value,
CORBA_Environment &env) = 0;
// Implementation uses this to provide the exception value which is
// the only result of this particular invocation.
//
// XXX Implementation should be able to assume response has been
// sent when this returns, and reclaim memory it allocated.
// = Get various universal call attributes.
// e.g., who made the call, the target of the call, what ORB and OA
// that target object uses.
//
// NOTE: none of these report exceptions; unavailability of any of
// this stuff is a catastrophic error since this is all part of the
// basic CORBA Object Model.
//
// XXX should not be not assuming all OAs implement the BOA API !!
virtual CORBA_Principal_ptr __stdcall caller (void) = 0;
virtual CORBA_Object_ptr __stdcall target (void) = 0;
virtual CORBA_String __stdcall op_name (void) = 0;
virtual CORBA_BOA_ptr __stdcall oa (void) = 0;
virtual CORBA_ORB_ptr __stdcall orb (void) = 0;
};
extern "C" const IID IID_IIOP_ServerRequest;
class ACE_Svc_Export IIOP_ServerRequest : public CORBA_ServerRequest
{
public:
// Constructor, destructor
IIOP_ServerRequest (CDR *msg,
CORBA_ORB_ptr the_orb,
CORBA_BOA_ptr the_boa);
virtual ~IIOP_ServerRequest (void);
// = General ServerRequest operations
void __stdcall params (CORBA_NVList_ptr list,
CORBA_Environment &env);
void __stdcall result (CORBA_Any_ptr value,
CORBA_Environment &env);
void __stdcall exception (CORBA_ExceptionType type,
CORBA_Any_ptr value,
CORBA_Environment &env);
// = Request attributes
CORBA_String __stdcall op_name (void);
CORBA_Principal_ptr __stdcall caller (void);
CORBA_Object_ptr __stdcall target (void);
CORBA_ORB_ptr __stdcall orb (void);
CORBA_BOA_ptr __stdcall oa (void);
// Stuff required for COM IUnknown support
ULONG __stdcall AddRef (void);
ULONG __stdcall Release (void);
HRESULT __stdcall QueryInterface (REFIID riid,
void **ppv);
// private:
CORBA_String _opname;
CDR *_incoming;
CORBA_NVList_ptr _params;
CORBA_Any_ptr _retval;
CORBA_Any_ptr _exception;
CORBA_ExceptionType _ex_type;
void release (void) { refcount_--; }
// Just drop the refcount, don't destroy the object; most of these
// are stack-allocated.
private:
ACE_SYNCH_MUTEX lock_;
u_int refcount_;
CORBA_ORB_ptr _orb;
CORBA_BOA_ptr _boa;
};
# if defined(__ACE_INLINE__)
# include "svrrqst.i"
# endif
#endif /* TAO_SVRRQST_H */
|