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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2