1 karl 1.62 //%2005////////////////////////////////////////////////////////////////////////
|
2 mike 1.4 //
|
3 karl 1.58 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 karl 1.48 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.58 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.62 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 mike 1.4 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
|
13 chip 1.24 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
16 mike 1.4 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
|
18 kumpf 1.37 //
|
19 chip 1.24 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
|
20 mike 1.4 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
22 chip 1.24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
25 mike 1.4 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
30 // Author: Mike Brasher (mbrasher@bmc.com)
31 //
|
32 mike 1.6 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
|
33 kumpf 1.27 // Carol Ann Krug Graves, Hewlett-Packard Company
34 // (carolann_graves@hp.com)
35 // Mike Day (mdday@us.ibm.com)
36 // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
37 sage 1.30 // Arthur Pichlkostner (via Markus: sedgewick_de@yahoo.de)
|
38 w.white 1.56 // Willis White (whiwill@us.ibm.com) PEP 127 and 128
|
39 brian.campbell 1.55 // Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1
|
40 a.arora 1.57 // Amit K Arora, IBM (amita@in.ibm.com) for Bug#1090
|
41 j.alex 1.70 // John Alex, IBM (johnalex@us.ibm.com) - Bug#2290
|
42 w.white 1.56 //
|
43 mike 1.4 //
44 //%/////////////////////////////////////////////////////////////////////////////
45
46 #ifndef Pegasus_Message_h
47 #define Pegasus_Message_h
48
|
49 mike 1.6 #include <Pegasus/Common/Config.h>
|
50 mike 1.4 #include <iostream>
|
51 mike 1.6 #include <cstring>
|
52 kumpf 1.39 #include <Pegasus/Common/InternalException.h>
|
53 mike 1.6 #include <Pegasus/Common/IPC.h>
|
54 sage 1.30 #include <Pegasus/Common/StatisticalData.h>
|
55 kumpf 1.38 #include <Pegasus/Common/Linkage.h>
|
56 w.white 1.68 #include <Pegasus/Common/TimeValue.h>
|
57 w.white 1.63 #include <Pegasus/Common/CIMOperationType.h>
|
58 mike 1.4
59 PEGASUS_NAMESPACE_BEGIN
60
|
61 mday 1.18 // REVIEW: could class be renamed to MessageMask (coding standard)
|
62 mike 1.11
|
63 chip 1.24 class PEGASUS_COMMON_LINKAGE message_mask
|
64 mike 1.6 {
65 public:
|
66 mike 1.11
|
67 mike 1.6 static Uint32 type_legacy;
|
68 mday 1.9 static Uint32 type_CIMOperation;
69 static Uint32 type_CIMAsyncOperation;
70 static Uint32 type_export;
71 static Uint32 type_lifetime;
|
72 mike 1.6 static Uint32 type_socket;
73 static Uint32 type_connection;
74 static Uint32 type_http;
|
75 kumpf 1.27 static Uint32 type_http_error;
|
76 mike 1.6 static Uint32 type_cimom;
|
77 mday 1.9 static Uint32 type_control;
78 static Uint32 type_service;
79 static Uint32 type_broadcast;
|
80 kumpf 1.28 static Uint32 type_client_exception;
|
81 chip 1.24
|
82 mday 1.9 static Uint32 ha_no_delete;
83 static Uint32 ha_request;
84 static Uint32 ha_reply;
|
85 mday 1.10 static Uint32 ha_synchronous;
|
86 mday 1.13 static Uint32 ha_async;
|
87 mday 1.22 static Uint32 ha_wait;
|
88 chip 1.24
89
90 // more for documentation than for use
|
91 mike 1.7
|
92 mday 1.9 inline Uint32 get_type(Uint32 flags)
|
93 mike 1.6 {
94 return (flags & 0x000fffff);
95 }
96
97 inline Uint32 get_handling(Uint32 flags)
98 {
99 return( flags & 0xfff00000);
100 }
101 };
102
|
103 mday 1.20 class cimom;
|
104 mike 1.4 class MessageQueue;
|
105 mday 1.19 class MessageQueueService;
106 class AsyncLegacyOperationStart;
107 class AsyncLegacyOperationResult;
|
108 mike 1.4
|
109 kumpf 1.40 enum HttpMethod
110 {
111 HTTP_METHOD__POST,
112 HTTP_METHOD_M_POST
113 };
114
|
115 chip 1.24 /** The Message class and derived classes are used to pass messages between
|
116 mike 1.4 modules. Messages are passed between modules using the message queues
117 (see MessageQueue class). Derived classes may add their own fields.
118 This base class defines two common fields: type, which is the type of
119 the message, and key which is a key value whose meaning is defined by
120 the derived class. The MessageQueue class provides methods for finding
121 messages by both type and key.
122
123 The Message class also provides previous and next pointers which are
124 used to place the messages on a queue by the MessageQueue class.
125 */
|
126 mike 1.5 class PEGASUS_COMMON_LINKAGE Message
|
127 mike 1.4 {
|
128 mday 1.8 public:
|
129 mike 1.4
|
130 mday 1.8 Message(
|
131 mday 1.20 Uint32 type,
132 Uint32 destination = 0,
|
133 chip 1.24 Uint32 key = getNextKey(),
|
134 mday 1.8 Uint32 routing_code = 0,
|
135 j.alex 1.70 Uint32 mask = message_mask::type_legacy)
|
136 chip 1.24 :
137 _type(type),
138 _key(key),
139 _routing_code(routing_code),
|
140 mday 1.8 _mask(mask),
|
141 kumpf 1.45 _httpMethod (HTTP_METHOD__POST),
|
142 j.alex 1.70 _close_connect(false),
|
143 mday 1.44 _last_thread_id(pegasus_thread_self()),
|
144 chip 1.24 _next(0),
|
145 mday 1.19 _prev(0),
|
146 mday 1.20 _async(0),
|
147 brian.campbell 1.55 dest(destination),
148 _isComplete(true),
149 _index(0)
|
150 chip 1.24 {
|
151 mday 1.8
152 }
|
153 mike 1.6
|
154 mday 1.32 Message & operator = ( const Message & msg)
155 {
156 if (this != &msg)
157 {
158 _type = msg._type;
159 _key = msg._key;
160 _routing_code = msg._routing_code;
161 _mask = msg._mask;
|
162 mday 1.44 _last_thread_id = msg._last_thread_id;
|
163 mday 1.32 _next = _prev = _async = 0;
164 dest = msg.dest;
|
165 brian.campbell 1.55 _httpMethod = msg._httpMethod;
166 _index = msg._index;
167 _isComplete = msg._isComplete;
|
168 mday 1.44
|
169 mday 1.32 }
170 return *this;
171 }
|
172 chip 1.34
|
173 chip 1.24
174 virtual ~Message();
|
175 j.alex 1.70 Boolean getCloseConnect() const { return _close_connect; }
176 void setCloseConnect(Boolean close_connect)
177 {
178 _close_connect = close_connect;
179 }
|
180 mike 1.4
|
181 mday 1.8 Uint32 getType() const { return _type; }
|
182 mike 1.4
|
183 mday 1.8 void setType(Uint32 type) { _type = type; }
|
184 mike 1.4
|
185 mday 1.8 Uint32 getKey() const { return _key; }
|
186 mike 1.4
|
187 mday 1.8 void setKey(Uint32 key) { _key = key; }
|
188 mike 1.4
|
189 mday 1.8 Uint32 getRouting() const { return _routing_code; }
190 void setRouting(Uint32 routing) { _routing_code = routing; }
|
191 mike 1.4
|
192 mday 1.8 Uint32 getMask() const { return _mask; }
|
193 chip 1.24
|
194 mday 1.8 void setMask(Uint32 mask) { _mask = mask; }
|
195 chip 1.24
|
196 kumpf 1.40 HttpMethod getHttpMethod() const { return _httpMethod; }
197
198 void setHttpMethod(HttpMethod httpMethod) {_httpMethod = httpMethod;}
199
|
200 w.white 1.63
|
201 karl 1.61 #ifndef PEGASUS_DISABLE_PERFINST
|
202 sage 1.30 //
203 // Needed for performance measurement
204 //
205
206 void startServer();
207
208 void endServer();
209
210 void startProvider();
211
212 void endProvider();
213
|
214 w.white 1.68 TimeValue getStartServerTime() const { return _timeServerStart; }
|
215 sage 1.30
|
216 w.white 1.68 void setStartServerTime(TimeValue timeServerStart)
|
217 sage 1.30 {
218 _timeServerStart = timeServerStart;
219 }
220
|
221 w.white 1.68 TimeValue getStartProviderTime() const { return _timeProviderStart; }
|
222 sage 1.30
|
223 w.white 1.68 void setStartProviderTime(TimeValue timeProviderStart)
|
224 sage 1.30 {
225 _timeProviderStart = timeProviderStart;
226 }
227
|
228 w.white 1.68 TimeValue getEndServerTime() const { return _timeServerEnd; }
|
229 sage 1.30
|
230 w.white 1.68 void setEndServerTime (TimeValue timeServerEnd)
|
231 sage 1.30 {
232 _timeServerEnd = timeServerEnd;
233 }
234
|
235 w.white 1.68 TimeValue getEndProviderTime() const { return _timeProviderEnd; }
|
236 sage 1.30
|
237 w.white 1.68 void setEndProviderTime(TimeValue timeProviderEnd)
|
238 sage 1.30 {
239 _timeProviderEnd = timeProviderEnd;
240 }
241
|
242 w.white 1.68 TimeValue getProviderTime() { return _providerTime;}
|
243 w.white 1.52
|
244 w.white 1.68 TimeValue getTotalTime() { return _totalTime; }
|
245 w.white 1.52
|
246 w.white 1.68 TimeValue getServerTime() { return _serverTime; }
|
247 sage 1.30 //
|
248 sage 1.31 #endif
|
249 sage 1.30
|
250 mday 1.8 Message* getNext() { return _next; }
|
251 mike 1.4
|
252 mday 1.8 const Message* getNext() const { return _next; }
|
253 mike 1.4
|
254 mday 1.8 Message* getPrevious() { return _prev; }
|
255 mike 1.4
|
256 mday 1.8 const Message* getPrevious() const { return _prev; }
|
257 mike 1.4
|
258 chip 1.24 static Uint32 getNextKey()
259 {
|
260 a.arora 1.57 AutoMutex autoMut(_mut);
261 Uint32 ret = _nextKey++;
262 return ret;
|
263 mike 1.6 }
|
264 chip 1.24
|
265 a.dunfey 1.67 static CIMOperationType convertMessageTypetoCIMOpType(Uint32 type);
|
266 w.white 1.63
|
267 joyce.j 1.69 #ifdef PEGASUS_DEBUG
|
268 mike 1.36 virtual void print(
269 PEGASUS_STD(ostream)& os,
270 Boolean printHeader = true) const;
|
271 joyce.j 1.69 #endif
|
272 mike 1.4
|
273 chip 1.24 // << Thu Dec 27 10:46:04 2001 mdd >> for use with DQueue container
274 // as used by AsyncOpNode
|
275 kumpf 1.23 Boolean operator == (const void *msg )
|
276 mday 1.13 {
|
277 mday 1.16 if (reinterpret_cast<void *>(this) == msg )
|
278 mday 1.13 return true;
279 return false;
280 }
|
281 chip 1.24
|
282 mday 1.22 Message *get_async(void)
283 {
284 Message *ret = _async;
285 _async = 0;
286 return ret;
|
287 chip 1.24
|
288 mday 1.22 }
|
289 chip 1.24
|
290 mday 1.22 void put_async(Message * msg)
291 {
292 _async = msg;
293 }
|
294 chip 1.24
|
295 mday 1.44 // << Tue Jul 1 11:02:49 2003 mdd >> pep_88 and helper for i18n and l10n
296 Boolean thread_changed(void)
297 {
298 if(_last_thread_id != pegasus_thread_self())
299 {
300 _last_thread_id = pegasus_thread_self();
301 return true;
302 }
303
304 return false;
305 }
306
307 // << Tue Jul 1 13:41:02 2003 mdd >> pep_88 -
308 // assist in synchronizing responses with requests
309
310 void synch_response(Message *req)
311 {
312 _key = req->_key;
313 _routing_code = req->_routing_code;
314 }
315
|
316 brian.campbell 1.55 // set the message index indicating what piece (or sequence) this is
317 // message indexes start at zero
318 void setIndex(Uint32 index) { _index = index; }
319
320 // increment the message index
321 void incrementIndex() { _index++; }
322
323 // set the complete flag indicating if this message piece is the
324 // last or not
325 void setComplete(Boolean isComplete)
326 { _isComplete = isComplete ? true:false; }
327
328 // get the message index (or sequence number)
329 Uint32 getIndex() const { return _index; }
330
331 // is this the first piece of the message ?
332 Boolean isFirst() const { return _index == 0 ? true : false; }
333
334 // is this message complete? (i.e the last in a one or more sequence)
335 Boolean isComplete() const { return _isComplete; }
|
336 chip 1.24
|
337 mday 1.8 private:
|
338 mike 1.6 Uint32 _type;
339 Uint32 _key;
|
340 mday 1.8 Uint32 _routing_code;
|
341 mike 1.6 Uint32 _mask;
|
342 kumpf 1.40 HttpMethod _httpMethod;
|
343 sage 1.30 // Needed for performance measurement
|
344 w.white 1.68 TimeValue _timeServerStart;
345 TimeValue _timeServerEnd;
346 TimeValue _timeProviderStart;
347 TimeValue _timeProviderEnd;
348 TimeValue _providerTime;
349 TimeValue _serverTime;
350 TimeValue _totalTime;
|
351 j.alex 1.70 Boolean _close_connect;
352
|
353 sage 1.30 //
|
354 mday 1.44
355 // << Tue Jul 1 11:02:35 2003 mdd >> pep_88 and helper for i18n and l10n
356 PEGASUS_THREAD_TYPE _last_thread_id;
357
|
358 mike 1.6 Message* _next;
359 Message* _prev;
|
360 mday 1.32
|
361 mday 1.19 protected:
|
362 mday 1.32
363 public:
|
364 mday 1.19 Message *_async;
|
365 mday 1.20 Uint32 dest;
|
366 w.white 1.56 //needed for PEP 128 - transmitting Server Response Time to Client
367 Uint64 totServerTime;
368
|
369 mday 1.19 private:
|
370 mike 1.6 MessageQueue* _owner;
|
371 brian.campbell 1.55 Boolean _isComplete;
372 Uint32 _index;
|
373 mike 1.6 static Uint32 _nextKey;
374 static Mutex _mut;
|
375 mday 1.44
376
377
|
378 mday 1.20 friend class cimom;
|
379 mike 1.6 friend class MessageQueue;
|
380 mday 1.19 friend class MessageQueueService;
381 friend class AsyncLegacyOperationStart;
382 friend class AsyncLegacyOperationResult;
|
383 chip 1.24
|
384 mike 1.4 };
|
385 mike 1.5
|
386 mike 1.6
|
387 mike 1.5 enum MessageType
388 {
389 DUMMY_MESSAGE,
390
391 // CIM Message types:
392
393 CIM_GET_CLASS_REQUEST_MESSAGE,
394 CIM_GET_INSTANCE_REQUEST_MESSAGE,
|
395 mike 1.6 CIM_EXPORT_INDICATION_REQUEST_MESSAGE,
|
396 mike 1.5 CIM_DELETE_CLASS_REQUEST_MESSAGE,
397 CIM_DELETE_INSTANCE_REQUEST_MESSAGE,
398 CIM_CREATE_CLASS_REQUEST_MESSAGE,
399 CIM_CREATE_INSTANCE_REQUEST_MESSAGE,
400 CIM_MODIFY_CLASS_REQUEST_MESSAGE,
401 CIM_MODIFY_INSTANCE_REQUEST_MESSAGE,
|
402 mday 1.32 CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE, //10
|
403 mike 1.5 CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE,
404 CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE,
405 CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE,
406 CIM_EXEC_QUERY_REQUEST_MESSAGE,
407 CIM_ASSOCIATORS_REQUEST_MESSAGE,
408 CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE,
409 CIM_REFERENCES_REQUEST_MESSAGE,
410 CIM_REFERENCE_NAMES_REQUEST_MESSAGE,
411 CIM_GET_PROPERTY_REQUEST_MESSAGE,
|
412 mday 1.32 CIM_SET_PROPERTY_REQUEST_MESSAGE, //20
|
413 mike 1.5 CIM_GET_QUALIFIER_REQUEST_MESSAGE,
414 CIM_SET_QUALIFIER_REQUEST_MESSAGE,
415 CIM_DELETE_QUALIFIER_REQUEST_MESSAGE,
416 CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE,
417 CIM_INVOKE_METHOD_REQUEST_MESSAGE,
|
418 mike 1.6 CIM_ENABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE,
419 CIM_MODIFY_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE,
420 CIM_DISABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE,
|
421 kumpf 1.15 CIM_PROCESS_INDICATION_REQUEST_MESSAGE,
|
422 mday 1.32 CIM_HANDLE_INDICATION_REQUEST_MESSAGE, // 30
|
423 kumpf 1.15 CIM_NOTIFY_PROVIDER_REGISTRATION_REQUEST_MESSAGE,
424 CIM_NOTIFY_PROVIDER_TERMINATION_REQUEST_MESSAGE,
|
425 chip 1.25
426 // new
427 CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE,
428 CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE,
429 CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE,
430
|
431 kumpf 1.29 // new
432 CIM_DISABLE_MODULE_REQUEST_MESSAGE,
433 CIM_ENABLE_MODULE_REQUEST_MESSAGE,
434
|
435 carolann.graves 1.64 CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE,
|
436 kumpf 1.35
|
437 kumpf 1.43 CIM_GET_CLASS_RESPONSE_MESSAGE,
|
438 carolann.graves 1.64 CIM_GET_INSTANCE_RESPONSE_MESSAGE, // 40
|
439 kumpf 1.43 CIM_EXPORT_INDICATION_RESPONSE_MESSAGE,
|
440 mike 1.5 CIM_DELETE_CLASS_RESPONSE_MESSAGE,
441 CIM_DELETE_INSTANCE_RESPONSE_MESSAGE,
442 CIM_CREATE_CLASS_RESPONSE_MESSAGE,
443 CIM_CREATE_INSTANCE_RESPONSE_MESSAGE,
444 CIM_MODIFY_CLASS_RESPONSE_MESSAGE,
445 CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE,
|
446 carolann.graves 1.64 CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE,
|
447 mike 1.5 CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE,
|
448 carolann.graves 1.64 CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE, // 50
|
449 mike 1.5 CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE,
450 CIM_EXEC_QUERY_RESPONSE_MESSAGE,
451 CIM_ASSOCIATORS_RESPONSE_MESSAGE,
452 CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE,
453 CIM_REFERENCES_RESPONSE_MESSAGE,
454 CIM_REFERENCE_NAMES_RESPONSE_MESSAGE,
455 CIM_GET_PROPERTY_RESPONSE_MESSAGE,
|
456 carolann.graves 1.64 CIM_SET_PROPERTY_RESPONSE_MESSAGE,
|
457 mike 1.5 CIM_GET_QUALIFIER_RESPONSE_MESSAGE,
|
458 carolann.graves 1.64 CIM_SET_QUALIFIER_RESPONSE_MESSAGE, // 60
|
459 mike 1.5 CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE,
460 CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE,
461 CIM_INVOKE_METHOD_RESPONSE_MESSAGE,
|
462 mike 1.6 CIM_ENABLE_INDICATION_SUBSCRIPTION_RESPONSE_MESSAGE,
463 CIM_MODIFY_INDICATION_SUBSCRIPTION_RESPONSE_MESSAGE,
464 CIM_DISABLE_INDICATION_SUBSCRIPTION_RESPONSE_MESSAGE,
|
465 kumpf 1.15 CIM_PROCESS_INDICATION_RESPONSE_MESSAGE,
|
466 carolann.graves 1.64 CIM_NOTIFY_PROVIDER_REGISTRATION_RESPONSE_MESSAGE,
|
467 kumpf 1.15 CIM_NOTIFY_PROVIDER_TERMINATION_RESPONSE_MESSAGE,
|
468 carolann.graves 1.64 CIM_HANDLE_INDICATION_RESPONSE_MESSAGE, // 70
|
469 mike 1.6
|
470 chip 1.25 // new
471 CIM_CREATE_SUBSCRIPTION_RESPONSE_MESSAGE,
472 CIM_MODIFY_SUBSCRIPTION_RESPONSE_MESSAGE,
473 CIM_DELETE_SUBSCRIPTION_RESPONSE_MESSAGE,
|
474 kumpf 1.29
475 // new
476 CIM_DISABLE_MODULE_RESPONSE_MESSAGE,
477 CIM_ENABLE_MODULE_RESPONSE_MESSAGE,
|
478 kumpf 1.35
|
479 carolann.graves 1.64 CIM_STOP_ALL_PROVIDERS_RESPONSE_MESSAGE,
|
480 chip 1.24
|
481 mike 1.6 // Monitor-related messages:
482
483 SOCKET_MESSAGE,
484
485 // Connection-oriented messages:
486
487 CLOSE_CONNECTION_MESSAGE,
488
489 // HTTP messages:
490
491 HTTP_MESSAGE,
|
492 carolann.graves 1.64 HTTP_ERROR_MESSAGE, // 80
|
493 kumpf 1.28
494 // Exception messages to be passed to a CIM client application:
495
496 CLIENT_EXCEPTION_MESSAGE,
|
497 mike 1.5
|
498 mday 1.33 ASYNC_REGISTER_CIM_SERVICE,
499 ASYNC_DEREGISTER_CIM_SERVICE,
500 ASYNC_UPDATE_CIM_SERVICE,
501 ASYNC_IOCTL,
|
502 carolann.graves 1.64 ASYNC_CIMSERVICE_START,
|
503 mday 1.33 ASYNC_CIMSERVICE_STOP,
504 ASYNC_CIMSERVICE_PAUSE,
505 ASYNC_CIMSERVICE_RESUME,
506
|
507 carolann.graves 1.64 ASYNC_ASYNC_OP_START, // 90
|
508 mday 1.33 ASYNC_ASYNC_OP_RESULT,
509 ASYNC_ASYNC_LEGACY_OP_START,
|
510 chip 1.34 ASYNC_ASYNC_LEGACY_OP_RESULT,
511
|
512 mday 1.33 ASYNC_FIND_SERVICE_Q,
513 ASYNC_FIND_SERVICE_Q_RESULT,
|
514 carolann.graves 1.64 ASYNC_ENUMERATE_SERVICE,
|
515 mday 1.33 ASYNC_ENUMERATE_SERVICE_RESULT,
|
516 chip 1.34
|
517 mday 1.33 ASYNC_REGISTERED_MODULE,
518 ASYNC_DEREGISTERED_MODULE,
|
519 carolann.graves 1.64 ASYNC_FIND_MODULE_IN_SERVICE, // 100
|
520 mday 1.33 ASYNC_FIND_MODULE_IN_SERVICE_RESPONSE,
|
521 chip 1.34
|
522 mday 1.33 ASYNC_ASYNC_MODULE_OP_START,
523 ASYNC_ASYNC_MODULE_OP_RESULT,
524
|
525 kumpf 1.53 CIM_NOTIFY_PROVIDER_ENABLE_REQUEST_MESSAGE,
526 CIM_NOTIFY_PROVIDER_ENABLE_RESPONSE_MESSAGE,
527
528 CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE,
|
529 w.white 1.52 CIM_INITIALIZE_PROVIDER_RESPONSE_MESSAGE,
530
|
531 kumpf 1.53 CIM_INITIALIZE_PROVIDER_AGENT_REQUEST_MESSAGE,
532 CIM_INITIALIZE_PROVIDER_AGENT_RESPONSE_MESSAGE,
|
533 kumpf 1.47
|
534 kumpf 1.54 CIM_NOTIFY_CONFIG_CHANGE_REQUEST_MESSAGE,
535 CIM_NOTIFY_CONFIG_CHANGE_RESPONSE_MESSAGE,
536
|
537 carolann.graves 1.64 CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE,
538 CIM_SUBSCRIPTION_INIT_COMPLETE_RESPONSE_MESSAGE,
539
|
540 mike 1.5 NUMBER_OF_MESSAGES
541 };
542
543 PEGASUS_COMMON_LINKAGE const char* MessageTypeToString(Uint32 messageType);
|
544 mike 1.6
545 /** This class implements a stack of queue-ids. Many messages must keep a
546 stack of queue-ids of queues which they must be returned to. This provides
547 a light efficient stack for this purpose.
548 */
|
549 karl 1.60 class PEGASUS_COMMON_LINKAGE QueueIdStack
|
550 mike 1.6 {
551 public:
552
|
553 chip 1.24 QueueIdStack() : _size(0)
554 {
|
555 mike 1.6 }
556
|
557 karl 1.59 QueueIdStack(const QueueIdStack& x);
|
558 mike 1.6
|
559 karl 1.59 PEGASUS_EXPLICIT QueueIdStack(Uint32 x);
|
560 mike 1.6
|
561 karl 1.59 PEGASUS_EXPLICIT QueueIdStack(Uint32 x1, Uint32 x2);
|
562 mike 1.6
|
563 chip 1.24 ~QueueIdStack()
564 {
|
565 mike 1.6 }
566
|
567 karl 1.59 QueueIdStack& operator=(const QueueIdStack& x);
|
568 mike 1.6
|
569 chip 1.24 Uint32 size() const
570 {
571 return _size;
|
572 mike 1.6 }
573
|
574 chip 1.24 Boolean isEmpty() const
575 {
576 return _size == 0;
|
577 mike 1.6 }
578
|
579 chip 1.24 void push(Uint32 x)
|
580 mike 1.6 {
|
581 karl 1.59 #ifdef PEGASUS_DEBUG
|
582 mike 1.6 if (_size == MAX_SIZE)
583 throw StackOverflow();
|
584 karl 1.59 #endif
|
585 mike 1.6 _items[_size++] = x;
586 }
587
588 Uint32& top()
589 {
|
590 karl 1.59 #ifdef PEGASUS_DEBUG
|
591 mike 1.6 if (_size == 0)
592 throw StackUnderflow();
|
593 karl 1.59 #endif
|
594 mike 1.6 return _items[_size-1];
595 }
596
|
597 chip 1.24 Uint32 top() const
|
598 mike 1.6 {
|
599 chip 1.24 return ((QueueIdStack*)this)->top();
|
600 mike 1.6 }
601
|
602 chip 1.24 void pop()
|
603 mike 1.6 {
|
604 karl 1.59 #ifdef PEGASUS_DEBUG
|
605 mike 1.6 if (_size == 0)
606 throw StackUnderflow();
|
607 karl 1.59 #endif
|
608 mike 1.6 _size--;
609 }
610
611 /** Make a copy of this stack and then pop the top element. */
|
612 karl 1.59 QueueIdStack copyAndPop() const;
|
613 mike 1.6
614 private:
615
616 // Copy the given stack but then pop the top element:
|
617 karl 1.59 QueueIdStack(const QueueIdStack& x, int);
|
618 mike 1.6
619 enum { MAX_SIZE = 5 };
620 Uint32 _items[MAX_SIZE];
621 Uint32 _size;
622 };
|
623 mike 1.4
624 PEGASUS_NAMESPACE_END
625
626 #endif /* Pegasus_Message_h */
|