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 getServerTime() { return _serverTime; }
|
243 sage 1.30 //
|
244 sage 1.31 #endif
|
245 sage 1.30
|
246 mday 1.8 Message* getNext() { return _next; }
|
247 mike 1.4
|
248 mday 1.8 const Message* getNext() const { return _next; }
|
249 mike 1.4
|
250 mday 1.8 Message* getPrevious() { return _prev; }
|
251 mike 1.4
|
252 mday 1.8 const Message* getPrevious() const { return _prev; }
|
253 mike 1.4
|
254 chip 1.24 static Uint32 getNextKey()
255 {
|
256 a.arora 1.57 AutoMutex autoMut(_mut);
257 Uint32 ret = _nextKey++;
258 return ret;
|
259 mike 1.6 }
|
260 chip 1.24
|
261 a.dunfey 1.67 static CIMOperationType convertMessageTypetoCIMOpType(Uint32 type);
|
262 w.white 1.63
|
263 joyce.j 1.69 #ifdef PEGASUS_DEBUG
|
264 mike 1.36 virtual void print(
265 PEGASUS_STD(ostream)& os,
266 Boolean printHeader = true) const;
|
267 joyce.j 1.69 #endif
|
268 mike 1.4
|
269 chip 1.24 // << Thu Dec 27 10:46:04 2001 mdd >> for use with DQueue container
270 // as used by AsyncOpNode
|
271 kumpf 1.23 Boolean operator == (const void *msg )
|
272 mday 1.13 {
|
273 mday 1.16 if (reinterpret_cast<void *>(this) == msg )
|
274 mday 1.13 return true;
275 return false;
276 }
|
277 chip 1.24
|
278 mday 1.22 Message *get_async(void)
279 {
280 Message *ret = _async;
281 _async = 0;
282 return ret;
|
283 chip 1.24
|
284 mday 1.22 }
|
285 chip 1.24
|
286 mday 1.22 void put_async(Message * msg)
287 {
288 _async = msg;
289 }
|
290 chip 1.24
|
291 mday 1.44 // << Tue Jul 1 11:02:49 2003 mdd >> pep_88 and helper for i18n and l10n
292 Boolean thread_changed(void)
293 {
294 if(_last_thread_id != pegasus_thread_self())
295 {
296 _last_thread_id = pegasus_thread_self();
297 return true;
298 }
299
300 return false;
301 }
302
303 // << Tue Jul 1 13:41:02 2003 mdd >> pep_88 -
304 // assist in synchronizing responses with requests
305
306 void synch_response(Message *req)
307 {
308 _key = req->_key;
309 _routing_code = req->_routing_code;
310 }
311
|
312 brian.campbell 1.55 // set the message index indicating what piece (or sequence) this is
313 // message indexes start at zero
314 void setIndex(Uint32 index) { _index = index; }
315
316 // increment the message index
317 void incrementIndex() { _index++; }
318
319 // set the complete flag indicating if this message piece is the
320 // last or not
321 void setComplete(Boolean isComplete)
322 { _isComplete = isComplete ? true:false; }
323
324 // get the message index (or sequence number)
325 Uint32 getIndex() const { return _index; }
326
327 // is this the first piece of the message ?
328 Boolean isFirst() const { return _index == 0 ? true : false; }
329
330 // is this message complete? (i.e the last in a one or more sequence)
331 Boolean isComplete() const { return _isComplete; }
|
332 chip 1.24
|
333 mday 1.8 private:
|
334 mike 1.6 Uint32 _type;
335 Uint32 _key;
|
336 mday 1.8 Uint32 _routing_code;
|
337 mike 1.6 Uint32 _mask;
|
338 kumpf 1.40 HttpMethod _httpMethod;
|
339 sage 1.30 // Needed for performance measurement
|
340 w.white 1.68 TimeValue _timeServerStart;
341 TimeValue _timeServerEnd;
342 TimeValue _timeProviderStart;
343 TimeValue _timeProviderEnd;
344 TimeValue _serverTime;
|
345 j.alex 1.70 Boolean _close_connect;
346
|
347 sage 1.30 //
|
348 mday 1.44
349 // << Tue Jul 1 11:02:35 2003 mdd >> pep_88 and helper for i18n and l10n
350 PEGASUS_THREAD_TYPE _last_thread_id;
351
|
352 mike 1.6 Message* _next;
353 Message* _prev;
|
354 mday 1.32
|
355 mday 1.19 protected:
|
356 mday 1.32
357 public:
|
358 mday 1.19 Message *_async;
|
359 mday 1.20 Uint32 dest;
|
360 w.white 1.56 //needed for PEP 128 - transmitting Server Response Time to Client
361 Uint64 totServerTime;
362
|
363 mday 1.19 private:
|
364 mike 1.6 MessageQueue* _owner;
|
365 brian.campbell 1.55 Boolean _isComplete;
366 Uint32 _index;
|
367 mike 1.6 static Uint32 _nextKey;
368 static Mutex _mut;
|
369 mday 1.44
370
371
|
372 mday 1.20 friend class cimom;
|
373 mike 1.6 friend class MessageQueue;
|
374 mday 1.19 friend class MessageQueueService;
375 friend class AsyncLegacyOperationStart;
376 friend class AsyncLegacyOperationResult;
|
377 chip 1.24
|
378 mike 1.4 };
|
379 mike 1.5
|
380 mike 1.6
|
381 mike 1.5 enum MessageType
382 {
383 DUMMY_MESSAGE,
384
385 // CIM Message types:
386
387 CIM_GET_CLASS_REQUEST_MESSAGE,
388 CIM_GET_INSTANCE_REQUEST_MESSAGE,
|
389 mike 1.6 CIM_EXPORT_INDICATION_REQUEST_MESSAGE,
|
390 mike 1.5 CIM_DELETE_CLASS_REQUEST_MESSAGE,
391 CIM_DELETE_INSTANCE_REQUEST_MESSAGE,
392 CIM_CREATE_CLASS_REQUEST_MESSAGE,
393 CIM_CREATE_INSTANCE_REQUEST_MESSAGE,
394 CIM_MODIFY_CLASS_REQUEST_MESSAGE,
395 CIM_MODIFY_INSTANCE_REQUEST_MESSAGE,
|
396 mday 1.32 CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE, //10
|
397 mike 1.5 CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE,
398 CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE,
399 CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE,
400 CIM_EXEC_QUERY_REQUEST_MESSAGE,
401 CIM_ASSOCIATORS_REQUEST_MESSAGE,
402 CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE,
403 CIM_REFERENCES_REQUEST_MESSAGE,
404 CIM_REFERENCE_NAMES_REQUEST_MESSAGE,
405 CIM_GET_PROPERTY_REQUEST_MESSAGE,
|
406 mday 1.32 CIM_SET_PROPERTY_REQUEST_MESSAGE, //20
|
407 mike 1.5 CIM_GET_QUALIFIER_REQUEST_MESSAGE,
408 CIM_SET_QUALIFIER_REQUEST_MESSAGE,
409 CIM_DELETE_QUALIFIER_REQUEST_MESSAGE,
410 CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE,
411 CIM_INVOKE_METHOD_REQUEST_MESSAGE,
|
412 mike 1.6 CIM_ENABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE,
413 CIM_MODIFY_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE,
414 CIM_DISABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE,
|
415 kumpf 1.15 CIM_PROCESS_INDICATION_REQUEST_MESSAGE,
|
416 mday 1.32 CIM_HANDLE_INDICATION_REQUEST_MESSAGE, // 30
|
417 kumpf 1.15 CIM_NOTIFY_PROVIDER_REGISTRATION_REQUEST_MESSAGE,
418 CIM_NOTIFY_PROVIDER_TERMINATION_REQUEST_MESSAGE,
|
419 chip 1.25
420 // new
421 CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE,
422 CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE,
423 CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE,
424
|
425 kumpf 1.29 // new
426 CIM_DISABLE_MODULE_REQUEST_MESSAGE,
427 CIM_ENABLE_MODULE_REQUEST_MESSAGE,
428
|
429 carolann.graves 1.64 CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE,
|
430 kumpf 1.35
|
431 kumpf 1.43 CIM_GET_CLASS_RESPONSE_MESSAGE,
|
432 carolann.graves 1.64 CIM_GET_INSTANCE_RESPONSE_MESSAGE, // 40
|
433 kumpf 1.43 CIM_EXPORT_INDICATION_RESPONSE_MESSAGE,
|
434 mike 1.5 CIM_DELETE_CLASS_RESPONSE_MESSAGE,
435 CIM_DELETE_INSTANCE_RESPONSE_MESSAGE,
436 CIM_CREATE_CLASS_RESPONSE_MESSAGE,
437 CIM_CREATE_INSTANCE_RESPONSE_MESSAGE,
438 CIM_MODIFY_CLASS_RESPONSE_MESSAGE,
439 CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE,
|
440 carolann.graves 1.64 CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE,
|
441 mike 1.5 CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE,
|
442 carolann.graves 1.64 CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE, // 50
|
443 mike 1.5 CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE,
444 CIM_EXEC_QUERY_RESPONSE_MESSAGE,
445 CIM_ASSOCIATORS_RESPONSE_MESSAGE,
446 CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE,
447 CIM_REFERENCES_RESPONSE_MESSAGE,
448 CIM_REFERENCE_NAMES_RESPONSE_MESSAGE,
449 CIM_GET_PROPERTY_RESPONSE_MESSAGE,
|
450 carolann.graves 1.64 CIM_SET_PROPERTY_RESPONSE_MESSAGE,
|
451 mike 1.5 CIM_GET_QUALIFIER_RESPONSE_MESSAGE,
|
452 carolann.graves 1.64 CIM_SET_QUALIFIER_RESPONSE_MESSAGE, // 60
|
453 mike 1.5 CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE,
454 CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE,
455 CIM_INVOKE_METHOD_RESPONSE_MESSAGE,
|
456 mike 1.6 CIM_ENABLE_INDICATION_SUBSCRIPTION_RESPONSE_MESSAGE,
457 CIM_MODIFY_INDICATION_SUBSCRIPTION_RESPONSE_MESSAGE,
458 CIM_DISABLE_INDICATION_SUBSCRIPTION_RESPONSE_MESSAGE,
|
459 kumpf 1.15 CIM_PROCESS_INDICATION_RESPONSE_MESSAGE,
|
460 carolann.graves 1.64 CIM_NOTIFY_PROVIDER_REGISTRATION_RESPONSE_MESSAGE,
|
461 kumpf 1.15 CIM_NOTIFY_PROVIDER_TERMINATION_RESPONSE_MESSAGE,
|
462 carolann.graves 1.64 CIM_HANDLE_INDICATION_RESPONSE_MESSAGE, // 70
|
463 mike 1.6
|
464 chip 1.25 // new
465 CIM_CREATE_SUBSCRIPTION_RESPONSE_MESSAGE,
466 CIM_MODIFY_SUBSCRIPTION_RESPONSE_MESSAGE,
467 CIM_DELETE_SUBSCRIPTION_RESPONSE_MESSAGE,
|
468 kumpf 1.29
469 // new
470 CIM_DISABLE_MODULE_RESPONSE_MESSAGE,
471 CIM_ENABLE_MODULE_RESPONSE_MESSAGE,
|
472 kumpf 1.35
|
473 carolann.graves 1.64 CIM_STOP_ALL_PROVIDERS_RESPONSE_MESSAGE,
|
474 chip 1.24
|
475 mike 1.6 // Monitor-related messages:
476
477 SOCKET_MESSAGE,
478
479 // Connection-oriented messages:
480
481 CLOSE_CONNECTION_MESSAGE,
482
483 // HTTP messages:
484
485 HTTP_MESSAGE,
|
486 carolann.graves 1.64 HTTP_ERROR_MESSAGE, // 80
|
487 kumpf 1.28
488 // Exception messages to be passed to a CIM client application:
489
490 CLIENT_EXCEPTION_MESSAGE,
|
491 mike 1.5
|
492 mday 1.33 ASYNC_REGISTER_CIM_SERVICE,
493 ASYNC_DEREGISTER_CIM_SERVICE,
494 ASYNC_UPDATE_CIM_SERVICE,
495 ASYNC_IOCTL,
|
496 carolann.graves 1.64 ASYNC_CIMSERVICE_START,
|
497 mday 1.33 ASYNC_CIMSERVICE_STOP,
498 ASYNC_CIMSERVICE_PAUSE,
499 ASYNC_CIMSERVICE_RESUME,
500
|
501 carolann.graves 1.64 ASYNC_ASYNC_OP_START, // 90
|
502 mday 1.33 ASYNC_ASYNC_OP_RESULT,
503 ASYNC_ASYNC_LEGACY_OP_START,
|
504 chip 1.34 ASYNC_ASYNC_LEGACY_OP_RESULT,
505
|
506 mday 1.33 ASYNC_FIND_SERVICE_Q,
507 ASYNC_FIND_SERVICE_Q_RESULT,
|
508 carolann.graves 1.64 ASYNC_ENUMERATE_SERVICE,
|
509 mday 1.33 ASYNC_ENUMERATE_SERVICE_RESULT,
|
510 chip 1.34
|
511 mday 1.33 ASYNC_REGISTERED_MODULE,
512 ASYNC_DEREGISTERED_MODULE,
|
513 carolann.graves 1.64 ASYNC_FIND_MODULE_IN_SERVICE, // 100
|
514 mday 1.33 ASYNC_FIND_MODULE_IN_SERVICE_RESPONSE,
|
515 chip 1.34
|
516 mday 1.33 ASYNC_ASYNC_MODULE_OP_START,
517 ASYNC_ASYNC_MODULE_OP_RESULT,
518
|
519 kumpf 1.53 CIM_NOTIFY_PROVIDER_ENABLE_REQUEST_MESSAGE,
520 CIM_NOTIFY_PROVIDER_ENABLE_RESPONSE_MESSAGE,
521
522 CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE,
|
523 w.white 1.52 CIM_INITIALIZE_PROVIDER_RESPONSE_MESSAGE,
524
|
525 kumpf 1.53 CIM_INITIALIZE_PROVIDER_AGENT_REQUEST_MESSAGE,
526 CIM_INITIALIZE_PROVIDER_AGENT_RESPONSE_MESSAGE,
|
527 kumpf 1.47
|
528 kumpf 1.54 CIM_NOTIFY_CONFIG_CHANGE_REQUEST_MESSAGE,
529 CIM_NOTIFY_CONFIG_CHANGE_RESPONSE_MESSAGE,
530
|
531 carolann.graves 1.64 CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE,
532 CIM_SUBSCRIPTION_INIT_COMPLETE_RESPONSE_MESSAGE,
533
|
534 mike 1.5 NUMBER_OF_MESSAGES
535 };
536
537 PEGASUS_COMMON_LINKAGE const char* MessageTypeToString(Uint32 messageType);
|
538 mike 1.6
539 /** This class implements a stack of queue-ids. Many messages must keep a
540 stack of queue-ids of queues which they must be returned to. This provides
541 a light efficient stack for this purpose.
542 */
|
543 karl 1.60 class PEGASUS_COMMON_LINKAGE QueueIdStack
|
544 mike 1.6 {
545 public:
546
|
547 chip 1.24 QueueIdStack() : _size(0)
548 {
|
549 mike 1.6 }
550
|
551 karl 1.59 QueueIdStack(const QueueIdStack& x);
|
552 mike 1.6
|
553 karl 1.59 PEGASUS_EXPLICIT QueueIdStack(Uint32 x);
|
554 mike 1.6
|
555 karl 1.59 PEGASUS_EXPLICIT QueueIdStack(Uint32 x1, Uint32 x2);
|
556 mike 1.6
|
557 chip 1.24 ~QueueIdStack()
558 {
|
559 mike 1.6 }
560
|
561 karl 1.59 QueueIdStack& operator=(const QueueIdStack& x);
|
562 mike 1.6
|
563 chip 1.24 Uint32 size() const
564 {
565 return _size;
|
566 mike 1.6 }
567
|
568 chip 1.24 Boolean isEmpty() const
569 {
570 return _size == 0;
|
571 mike 1.6 }
572
|
573 chip 1.24 void push(Uint32 x)
|
574 mike 1.6 {
|
575 karl 1.59 #ifdef PEGASUS_DEBUG
|
576 mike 1.6 if (_size == MAX_SIZE)
577 throw StackOverflow();
|
578 karl 1.59 #endif
|
579 mike 1.6 _items[_size++] = x;
580 }
581
582 Uint32& top()
583 {
|
584 karl 1.59 #ifdef PEGASUS_DEBUG
|
585 mike 1.6 if (_size == 0)
586 throw StackUnderflow();
|
587 karl 1.59 #endif
|
588 mike 1.6 return _items[_size-1];
589 }
590
|
591 chip 1.24 Uint32 top() const
|
592 mike 1.6 {
|
593 chip 1.24 return ((QueueIdStack*)this)->top();
|
594 mike 1.6 }
595
|
596 chip 1.24 void pop()
|
597 mike 1.6 {
|
598 karl 1.59 #ifdef PEGASUS_DEBUG
|
599 mike 1.6 if (_size == 0)
600 throw StackUnderflow();
|
601 karl 1.59 #endif
|
602 mike 1.6 _size--;
603 }
604
605 /** Make a copy of this stack and then pop the top element. */
|
606 karl 1.59 QueueIdStack copyAndPop() const;
|
607 mike 1.6
608 private:
609
610 // Copy the given stack but then pop the top element:
|
611 karl 1.59 QueueIdStack(const QueueIdStack& x, int);
|
612 mike 1.6
613 enum { MAX_SIZE = 5 };
614 Uint32 _items[MAX_SIZE];
615 Uint32 _size;
616 };
|
617 mike 1.4
618 PEGASUS_NAMESPACE_END
619
620 #endif /* Pegasus_Message_h */
|