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

  1 karl  1.72 //%2006////////////////////////////////////////////////////////////////////////
  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 karl  1.72 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12            // EMC Corporation; Symantec Corporation; The Open Group.
 13 mike  1.4  //
 14            // Permission is hereby granted, free of charge, to any person obtaining a copy
 15 chip  1.24 // of this software and associated documentation files (the "Software"), to
 16            // deal in the Software without restriction, including without limitation the
 17            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 18 mike  1.4  // sell copies of the Software, and to permit persons to whom the Software is
 19            // furnished to do so, subject to the following conditions:
 20 kumpf 1.37 // 
 21 chip  1.24 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 22 mike  1.4  // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 23            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 24 chip  1.24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 25            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 26            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 27 mike  1.4  // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 28            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 29            //
 30            //==============================================================================
 31            //
 32            //%/////////////////////////////////////////////////////////////////////////////
 33            
 34            #ifndef Pegasus_Message_h
 35            #define Pegasus_Message_h
 36            
 37 mike  1.6  #include <Pegasus/Common/Config.h>
 38 mike  1.4  #include <iostream>
 39 mike  1.6  #include <cstring>
 40 kumpf 1.39 #include <Pegasus/Common/InternalException.h>
 41 kumpf 1.38 #include <Pegasus/Common/Linkage.h>
 42 w.white 1.63 #include <Pegasus/Common/CIMOperationType.h>
 43 mike    1.76 #include <Pegasus/Common/Linkable.h>
 44 mike    1.4  
 45              PEGASUS_NAMESPACE_BEGIN
 46              
 47 kumpf   1.83 class PEGASUS_COMMON_LINKAGE MessageMask
 48 mike    1.6  {
 49 kumpf   1.83 public:
 50                  // Message handling is indicated by the high order 12 bits.  For example:
 51                  // Uint32 messageHandling = flags & 0xfff00000;
 52                  static Uint32 ha_request;
 53                  static Uint32 ha_reply;
 54                  static Uint32 ha_async;
 55 mike    1.6  };
 56              
 57 kumpf   1.40 enum HttpMethod
 58              {
 59                  HTTP_METHOD__POST,
 60                  HTTP_METHOD_M_POST
 61              };
 62              
 63 kumpf   1.90 enum MessageType
 64              {
 65                  DUMMY_MESSAGE,
 66              
 67                  // CIM Message types:
 68              
 69                  CIM_GET_CLASS_REQUEST_MESSAGE,
 70                  CIM_GET_INSTANCE_REQUEST_MESSAGE,
 71                  CIM_EXPORT_INDICATION_REQUEST_MESSAGE,
 72                  CIM_DELETE_CLASS_REQUEST_MESSAGE,
 73                  CIM_DELETE_INSTANCE_REQUEST_MESSAGE,
 74                  CIM_CREATE_CLASS_REQUEST_MESSAGE,
 75                  CIM_CREATE_INSTANCE_REQUEST_MESSAGE,
 76                  CIM_MODIFY_CLASS_REQUEST_MESSAGE,
 77                  CIM_MODIFY_INSTANCE_REQUEST_MESSAGE,
 78                  CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE, //10
 79                  CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE,
 80                  CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE,
 81                  CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE,
 82                  CIM_EXEC_QUERY_REQUEST_MESSAGE,
 83                  CIM_ASSOCIATORS_REQUEST_MESSAGE,
 84 kumpf   1.90     CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE,
 85                  CIM_REFERENCES_REQUEST_MESSAGE,
 86                  CIM_REFERENCE_NAMES_REQUEST_MESSAGE,
 87                  CIM_GET_PROPERTY_REQUEST_MESSAGE,
 88                  CIM_SET_PROPERTY_REQUEST_MESSAGE, //20
 89                  CIM_GET_QUALIFIER_REQUEST_MESSAGE,
 90                  CIM_SET_QUALIFIER_REQUEST_MESSAGE,
 91                  CIM_DELETE_QUALIFIER_REQUEST_MESSAGE,
 92                  CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE,
 93                  CIM_INVOKE_METHOD_REQUEST_MESSAGE,
 94                  CIM_PROCESS_INDICATION_REQUEST_MESSAGE,
 95                  CIM_HANDLE_INDICATION_REQUEST_MESSAGE,
 96                  CIM_NOTIFY_PROVIDER_REGISTRATION_REQUEST_MESSAGE,
 97                  CIM_NOTIFY_PROVIDER_TERMINATION_REQUEST_MESSAGE,
 98                  CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE,  // 30
 99                  CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE,
100                  CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE,
101                  CIM_DISABLE_MODULE_REQUEST_MESSAGE,
102                  CIM_ENABLE_MODULE_REQUEST_MESSAGE,
103                  CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE,
104              
105 kumpf   1.90     CIM_GET_CLASS_RESPONSE_MESSAGE,
106                  CIM_GET_INSTANCE_RESPONSE_MESSAGE,
107                  CIM_EXPORT_INDICATION_RESPONSE_MESSAGE,
108                  CIM_DELETE_CLASS_RESPONSE_MESSAGE,
109                  CIM_DELETE_INSTANCE_RESPONSE_MESSAGE,  // 40
110                  CIM_CREATE_CLASS_RESPONSE_MESSAGE,
111                  CIM_CREATE_INSTANCE_RESPONSE_MESSAGE,
112                  CIM_MODIFY_CLASS_RESPONSE_MESSAGE,
113                  CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE,
114                  CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE,
115                  CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE,
116                  CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE,
117                  CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE,
118                  CIM_EXEC_QUERY_RESPONSE_MESSAGE,
119                  CIM_ASSOCIATORS_RESPONSE_MESSAGE,  // 50
120                  CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE,
121                  CIM_REFERENCES_RESPONSE_MESSAGE,
122                  CIM_REFERENCE_NAMES_RESPONSE_MESSAGE,
123                  CIM_GET_PROPERTY_RESPONSE_MESSAGE,
124                  CIM_SET_PROPERTY_RESPONSE_MESSAGE,
125                  CIM_GET_QUALIFIER_RESPONSE_MESSAGE,
126 kumpf   1.90     CIM_SET_QUALIFIER_RESPONSE_MESSAGE,
127                  CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE,
128                  CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE,
129                  CIM_INVOKE_METHOD_RESPONSE_MESSAGE,  // 60
130                  CIM_PROCESS_INDICATION_RESPONSE_MESSAGE,
131                  CIM_NOTIFY_PROVIDER_REGISTRATION_RESPONSE_MESSAGE,
132                  CIM_NOTIFY_PROVIDER_TERMINATION_RESPONSE_MESSAGE,
133                  CIM_HANDLE_INDICATION_RESPONSE_MESSAGE,
134                  CIM_CREATE_SUBSCRIPTION_RESPONSE_MESSAGE,
135                  CIM_MODIFY_SUBSCRIPTION_RESPONSE_MESSAGE,
136                  CIM_DELETE_SUBSCRIPTION_RESPONSE_MESSAGE,
137                  CIM_DISABLE_MODULE_RESPONSE_MESSAGE,
138                  CIM_ENABLE_MODULE_RESPONSE_MESSAGE,
139                  CIM_STOP_ALL_PROVIDERS_RESPONSE_MESSAGE,  // 70
140              
141                  // Monitor-related messages:
142              
143                  SOCKET_MESSAGE,
144              
145                  // Connection-oriented messages:
146              
147 kumpf   1.90     CLOSE_CONNECTION_MESSAGE,
148              
149                  // HTTP messages:
150              
151                  HTTP_MESSAGE,
152                  HTTP_ERROR_MESSAGE,
153              
154                  // Exception messages to be passed to a CIM client application:
155              
156                  CLIENT_EXCEPTION_MESSAGE,
157              
158                  ASYNC_REGISTER_CIM_SERVICE,
159                  ASYNC_DEREGISTER_CIM_SERVICE,
160                  ASYNC_UPDATE_CIM_SERVICE,
161                  ASYNC_IOCTL,
162                  ASYNC_CIMSERVICE_START,  // 80
163                  ASYNC_CIMSERVICE_STOP,
164                  ASYNC_CIMSERVICE_PAUSE,
165                  ASYNC_CIMSERVICE_RESUME,
166              
167                  ASYNC_ASYNC_OP_START,
168 kumpf   1.90     ASYNC_ASYNC_OP_RESULT,
169                  ASYNC_ASYNC_LEGACY_OP_START,
170                  ASYNC_ASYNC_LEGACY_OP_RESULT,
171              
172                  ASYNC_FIND_SERVICE_Q,
173                  ASYNC_FIND_SERVICE_Q_RESULT,
174                  ASYNC_ENUMERATE_SERVICE,  // 90
175                  ASYNC_ENUMERATE_SERVICE_RESULT,
176              
177                  ASYNC_REGISTERED_MODULE,
178                  ASYNC_DEREGISTERED_MODULE,
179                  ASYNC_FIND_MODULE_IN_SERVICE,
180                  ASYNC_FIND_MODULE_IN_SERVICE_RESPONSE,
181              
182                  ASYNC_ASYNC_MODULE_OP_START,
183                  ASYNC_ASYNC_MODULE_OP_RESULT,
184              
185                  CIM_NOTIFY_PROVIDER_ENABLE_REQUEST_MESSAGE,
186                  CIM_NOTIFY_PROVIDER_ENABLE_RESPONSE_MESSAGE,
187              
188                  CIM_NOTIFY_PROVIDER_FAIL_REQUEST_MESSAGE,  // 100
189 kumpf   1.90     CIM_NOTIFY_PROVIDER_FAIL_RESPONSE_MESSAGE,
190              
191                  CIM_INITIALIZE_PROVIDER_AGENT_REQUEST_MESSAGE,
192                  CIM_INITIALIZE_PROVIDER_AGENT_RESPONSE_MESSAGE,
193              
194                  CIM_NOTIFY_CONFIG_CHANGE_REQUEST_MESSAGE,
195                  CIM_NOTIFY_CONFIG_CHANGE_RESPONSE_MESSAGE,
196              
197                  CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE,
198                  CIM_SUBSCRIPTION_INIT_COMPLETE_RESPONSE_MESSAGE,
199              
200                  NUMBER_OF_MESSAGES
201              };
202              
203              PEGASUS_COMMON_LINKAGE const char* MessageTypeToString(MessageType messageType);
204              
205              
206 chip    1.24 /** The Message class and derived classes are used to pass messages between
207 mike    1.4      modules. Messages are passed between modules using the message queues
208                  (see MessageQueue class). Derived classes may add their own fields.
209 kumpf   1.78     This base class defines a common type field, which is the type of
210                  the message.
211 mike    1.4  */
212 mike    1.76 class PEGASUS_COMMON_LINKAGE Message : public Linkable
213 mike    1.4  {
214 kumpf   1.86 public:
215              
216                  Message(
217 kumpf   1.90         MessageType type,
218 kumpf   1.86         Uint32 destination = 0,
219 venkat.puvvada 1.89         Uint32 mask = 0)
220 kumpf          1.86         :
221 kumpf          1.94         dest(destination),
222 kumpf          1.86         _type(type),
223                             _mask(mask),
224 kumpf          1.94         _httpMethod(HTTP_METHOD__POST),
225                             _httpCloseConnect(false),
226 kumpf          1.86         _isComplete(true),
227 kumpf          1.94         _index(0),
228                             _async(0)
229 kumpf          1.86     {
230                         }
231 mike           1.4  
232 kumpf          1.86     virtual ~Message();
233 chip           1.24 
234 kumpf          1.86     // NOTE: The compiler default implementation of the copy constructor
235                         // is used for this class.
236                     
237 kumpf          1.94     Boolean getCloseConnect() const { return _httpCloseConnect; }
238                         void setCloseConnect(Boolean httpCloseConnect)
239 kumpf          1.86     {
240 kumpf          1.94         _httpCloseConnect = httpCloseConnect;
241 kumpf          1.86     }
242 chip           1.24 
243 kumpf          1.90     MessageType getType() const { return _type; }
244 kumpf          1.40 
245 kumpf          1.86     Uint32 getMask() const { return _mask; }
246                     
247                         void setMask(Uint32 mask) { _mask = mask; }
248                     
249                         HttpMethod getHttpMethod() const { return _httpMethod; }
250                     
251                         void setHttpMethod(HttpMethod httpMethod) {_httpMethod = httpMethod;}
252 kumpf          1.40 
253 kumpf          1.90     static CIMOperationType convertMessageTypetoCIMOpType(MessageType type);
254 w.white        1.63 
255 joyce.j        1.69 #ifdef PEGASUS_DEBUG
256 kumpf          1.86     virtual void print(
257                             PEGASUS_STD(ostream)& os,
258                             Boolean printHeader = true) const;
259 joyce.j        1.69 #endif
260 mike           1.4  
261 kumpf          1.86     Message* get_async()
262                         {
263                             Message *ret = _async;
264                             _async = 0;
265                             return ret;
266                         }
267                     
268                         void put_async(Message* msg)
269                         {
270                             _async = msg;
271                         }
272                     
273                         // set the message index indicating what piece (or sequence) this is
274                         // message indexes start at zero
275                         void setIndex(Uint32 index) { _index = index; }
276                     
277 kumpf          1.94     // get the message index (or sequence number)
278                         Uint32 getIndex() const { return _index; }
279 kumpf          1.86 
280 kumpf          1.94     // is this the first piece of the message ?
281                         Boolean isFirst() const { return _index == 0; }
282                     
283                         // set the complete flag indicating whether this message piece is the last
284 kumpf          1.86     void setComplete(Boolean isComplete)
285                         {
286 kumpf          1.94         _isComplete = isComplete;
287 kumpf          1.86     }
288                     
289                         // is this message complete? (i.e the last in a one or more sequence)
290                         Boolean isComplete() const { return _isComplete; }
291                     
292 kumpf          1.94     Uint32 dest;
293                     
294 kumpf          1.86 private:
295 kumpf          1.94 
296                         Message& operator=(const Message& msg);
297                     
298 kumpf          1.90     MessageType _type;
299 kumpf          1.86     Uint32 _mask;
300 kumpf          1.94 
301 kumpf          1.86     HttpMethod _httpMethod;
302 kumpf          1.94     Boolean _httpCloseConnect;
303 kumpf          1.86 
304 kumpf          1.94     Boolean _isComplete;
305                         Uint32 _index;
306 kumpf          1.86 
307 kumpf          1.92     Message* _async;
308 mike           1.4  };
309 mike           1.5  
310 mike           1.6  
311                     /** This class implements a stack of queue-ids. Many messages must keep a
312                         stack of queue-ids of queues which they must be returned to. This provides
313                         a light efficient stack for this purpose.
314                     */
315 karl           1.60 class PEGASUS_COMMON_LINKAGE QueueIdStack
316 mike           1.6  {
317                     public:
318                     
319 chip           1.24     QueueIdStack() : _size(0)
320                         {
321 mike           1.6      }
322                     
323 karl           1.59     QueueIdStack(const QueueIdStack& x);
324 mike           1.6  
325 kumpf          1.88     explicit QueueIdStack(Uint32 x);
326 mike           1.6  
327 kumpf          1.88     explicit QueueIdStack(Uint32 x1, Uint32 x2);
328 mike           1.6  
329 chip           1.24     ~QueueIdStack()
330                         {
331 mike           1.6      }
332                     
333 karl           1.59     QueueIdStack& operator=(const QueueIdStack& x);
334 mike           1.6  
335 chip           1.24     Uint32 size() const
336                         {
337 kumpf          1.86         return _size;
338 mike           1.6      }
339                     
340 chip           1.24     Boolean isEmpty() const
341                         {
342 kumpf          1.86         return _size == 0;
343 mike           1.6      }
344                     
345 chip           1.24     void push(Uint32 x)
346 mike           1.6      {
347 karl           1.59 #ifdef PEGASUS_DEBUG
348 kumpf          1.86         if (_size == MAX_SIZE)
349                                 throw StackOverflow();
350 karl           1.59 #endif
351 kumpf          1.86         _items[_size++] = x;
352 mike           1.6      }
353                     
354                         Uint32& top()
355                         {
356 karl           1.59 #ifdef PEGASUS_DEBUG
357 kumpf          1.86         if (_size == 0)
358                                 throw StackUnderflow();
359 karl           1.59 #endif
360 kumpf          1.86         return _items[_size-1];
361 mike           1.6      }
362                     
363 chip           1.24     Uint32 top() const
364 mike           1.6      {
365 kumpf          1.86         return ((QueueIdStack*)this)->top();
366 mike           1.6      }
367                     
368 chip           1.24     void pop()
369 mike           1.6      {
370 karl           1.59 #ifdef PEGASUS_DEBUG
371 kumpf          1.86         if (_size == 0)
372                                 throw StackUnderflow();
373 karl           1.59 #endif
374 kumpf          1.86         _size--;
375 mike           1.6      }
376                     
377                         /** Make a copy of this stack and then pop the top element. */
378 karl           1.59     QueueIdStack copyAndPop() const;
379 mike           1.6  
380                     private:
381                     
382                         // Copy the given stack but then pop the top element:
383 karl           1.59     QueueIdStack(const QueueIdStack& x, int);
384 mike           1.6  
385                         enum { MAX_SIZE = 5 };
386                         Uint32 _items[MAX_SIZE];
387                         Uint32 _size;
388                     };
389 mike           1.4  
390                     PEGASUS_NAMESPACE_END
391                     
392                     #endif /* Pegasus_Message_h */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2