(file) Return to Message.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  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 */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2