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