1 martin 1.91 //%LICENSE////////////////////////////////////////////////////////////////
|
2 martin 1.92 //
|
3 martin 1.91 // 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.92 //
|
10 martin 1.91 // 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.92 //
|
17 martin 1.91 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
|
19 martin 1.92 //
|
20 martin 1.91 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
21 martin 1.92 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22 martin 1.91 // 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.92 //
|
28 martin 1.91 //////////////////////////////////////////////////////////////////////////
|
29 brian.campbell 1.67 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
32 #ifndef PegasusDispatcher_Dispatcher_h
33 #define PegasusDispatcher_Dispatcher_h
34
35 #include <Pegasus/Common/Config.h>
36 #include <Pegasus/Common/Thread.h>
37 #include <Pegasus/Common/MessageQueue.h>
38 #include <Pegasus/Common/CIMMessage.h>
39 #include <Pegasus/Common/CIMObject.h>
40 #include <Pegasus/Common/OperationContextInternal.h>
41 #include <Pegasus/Common/QueryExpressionRep.h>
42 #include <Pegasus/Common/AutoPtr.h>
|
43 karl 1.103 #include <Pegasus/Common/UintArgs.h>
|
44 karl 1.101 #include <Pegasus/Common/ArrayIterator.h>
45 #include <Pegasus/Common/Magic.h>
|
46 brian.campbell 1.67
47 #include <Pegasus/Repository/CIMRepository.h>
48
49 #include <Pegasus/Server/CIMServer.h>
|
50 kumpf 1.82 #include \
51 <Pegasus/Server/ProviderRegistrationManager/ProviderRegistrationManager.h>
|
52 brian.campbell 1.67 #include <Pegasus/Server/Linkage.h>
|
53 venkat.puvvada 1.87 #include <Pegasus/Server/reg_table.h>
|
54 karl 1.103 #include <Pegasus/Server/EnumerationContext.h>
|
55 karl 1.105 #ifdef PEGASUS_ENABLE_FQL
56 //// Temporarily disabled because of conflicts between this and
57 //// QueryExpressionRep that causes errors. Also temporarily disabled
58 //// The function that uses this since there is an error I cannot figure out.
59 ///#include <Pegasus/FQL/FQLQueryExpressionRep.h>
60 #endif
|
61 brian.campbell 1.67 PEGASUS_NAMESPACE_BEGIN
|
62 karl 1.101 PEGASUS_USING_STD;
|
63 karl 1.97 //
64 // Convience Macro to simplify conversion of String to const char*
65 //
66 #define CSTRING(ARG) (const char*) ARG.getCString()
|
67 brian.campbell 1.67
|
68 karl 1.99 /******************************************************************************
69 **
70 ** ProviderInfo Class - manage info about classes and providers received
71 ** from provider lookup functions. Provides info on classes and providers
72 ** in enumerations and association looksups including provider type,
73 ** etc. This class is private to the dispatcher.
74 **
75 ******************************************************************************/
|
76 brian.campbell 1.67
77 class PEGASUS_SERVER_LINKAGE ProviderInfo
78 {
79 public:
|
80 karl 1.97 /**
81 * Constructor with only className. Used in those cases where
82 * the ProviderInfo object is supplied to one of the lookup
83 * methods with only classname. The remaining information (ex.
84 * serviceId, controlProviderName, etc. can be added with the
85 * addProviderInfo function.
86 *
87 */
|
88 kumpf 1.86 ProviderInfo(const CIMName& className_)
89 : className(className_),
|
90 venkat.puvvada 1.88 serviceId(0),
|
91 kumpf 1.82 hasProvider(false),
92 hasProviderNormalization(false),
93 hasNoQuery(true)
|
94 brian.campbell 1.67 {
95 }
|
96 karl 1.97 /**
97 Constructor with className, serviceId, and
98 controlProviderName. All basic information in the
99 constructor.
100 */
|
101 chip 1.72 ProviderInfo(
|
102 kumpf 1.86 const CIMName& className_,
|
103 venkat.puvvada 1.87 Uint32 serviceId_,
|
104 kumpf 1.86 const String& controlProviderName_)
105 : className(className_),
|
106 venkat.puvvada 1.87 serviceId(serviceId_),
|
107 kumpf 1.86 controlProviderName(controlProviderName_),
|
108 kumpf 1.82 hasProvider(false),
109 hasProviderNormalization(false),
110 hasNoQuery(true)
|
111 brian.campbell 1.67 {
112 }
|
113 karl 1.97 /**
114 Copy constructor
115 */
|
116 kumpf 1.82 ProviderInfo(const ProviderInfo& providerInfo)
|
117 chip 1.72 : className(providerInfo.className),
|
118 venkat.puvvada 1.87 serviceId(providerInfo.serviceId),
|
119 kumpf 1.82 controlProviderName(providerInfo.controlProviderName),
120 hasProvider(providerInfo.hasProvider),
|
121 ouyang.jian 1.85 hasProviderNormalization(providerInfo.hasProviderNormalization),
|
122 kumpf 1.82 hasNoQuery(providerInfo.hasNoQuery)
|
123 brian.campbell 1.67 {
124 if (providerInfo.providerIdContainer.get() != 0)
125 {
126 providerIdContainer.reset(
127 new ProviderIdContainer(*providerInfo.providerIdContainer));
128 }
129 }
130
|
131 kumpf 1.82 ProviderInfo& operator=(const ProviderInfo& providerInfo)
|
132 brian.campbell 1.67 {
133 if (&providerInfo != this)
134 {
135 className = providerInfo.className;
|
136 venkat.puvvada 1.87 serviceId = providerInfo.serviceId;
|
137 brian.campbell 1.67 controlProviderName = providerInfo.controlProviderName;
138 hasProvider = providerInfo.hasProvider;
|
139 chip 1.72 hasProviderNormalization = providerInfo.hasProviderNormalization;
|
140 brian.campbell 1.67 hasNoQuery = providerInfo.hasNoQuery;
|
141 chip 1.72
|
142 brian.campbell 1.67 providerIdContainer.reset();
|
143 chip 1.72
|
144 brian.campbell 1.67 if (providerInfo.providerIdContainer.get() != 0)
145 {
|
146 kumpf 1.82 providerIdContainer.reset(new ProviderIdContainer(
147 *providerInfo.providerIdContainer.get()));
|
148 brian.campbell 1.67 }
149 }
|
150 chip 1.72
|
151 kumpf 1.82 return *this;
|
152 brian.campbell 1.67 }
153
|
154 karl 1.97 /**
155 Method to add serviceID, etc. after the object is constructed.
156 Use with the constructor that only adds className to complete
157 the basic registration info for the provider.
158 */
159 void addProviderInfo(Uint32 serviceId_, Boolean hasProvider_,
160 Boolean hasNoQuery_)
161 {
162 serviceId = serviceId_;
163 hasProvider = hasProvider_;
164 hasNoQuery = hasNoQuery_;
165 }
166
|
167 chip 1.72 CIMName className;
|
168 venkat.puvvada 1.87 Uint32 serviceId;
|
169 chip 1.72 String controlProviderName;
170 Boolean hasProvider;
171 Boolean hasProviderNormalization;
172 Boolean hasNoQuery;
|
173 brian.campbell 1.67 AutoPtr<ProviderIdContainer> providerIdContainer;
174
175 private:
|
176 karl 1.97 // Empty constructor not allowed.
|
177 kumpf 1.82 ProviderInfo()
|
178 chip 1.72 {
179 }
|
180 brian.campbell 1.67 };
|
181 karl 1.99 /*
182 Container for items of ProviderInfo to manage a list of ProviderInfo
183 information objects. The providerCounter
184 counts the number of providers in the list not the number of objects
185 in the list. Classes without providers may also exist in the list.
186 */
|
187 karl 1.101 class PEGASUS_SERVER_LINKAGE ProviderInfoList
|
188 karl 1.99 {
189 public:
|
190 karl 1.101 ProviderInfoList()
191 : providerCount(0), _index(0)
|
192 karl 1.99 {
193 }
|
194 karl 1.101 ~ProviderInfoList()
|
195 karl 1.99 {
196 }
|
197 karl 1.101 /** Get size of list. Note This may not match count of providers
198 */
199 Uint32 size();
200
201 /** Append a class to the list. This function does NOT
202 increment the providerCount. This allows classes that do not
203 have providers to be added to the list to be processed by
204 the dispatcher.
205 @param ProviderInfo defining the class to be appended
206 */
207 void appendClass(ProviderInfo& x);
208
|
209 karl 1.103 /** Append a new Provider to the list. This function
|
210 karl 1.101 increments the ProviderCount. This count may be different
211 than the count of items in the array
212 @param x ProviderInfo to append to the list
213 */
214 void appendProvider(ProviderInfo& x);
215
216 /** Test to determine if there are more entries in the providerInfoList.
217 The getNext() function should be used in conjunction with this to
218 get the next entry from the list. When the instance of the class
219 is initialized it sets a pointer to the start of the list. Each
220 hasMore() finds the next providerInfo that matches the isProvider
221 criteria. When the last entry is processed, it sets the pointer back
222 to the start of the list so it can be used again without a formal
223 reset function.
224 @param isProvider Boolean true if next is request for
225 providers or false if it is for classes that do not have a
226 provider.
227 @return true if more, false if finished
228
229 <p><b>Example:</b>
|
230 karl 1.102
|
231 karl 1.101 while (providerInfo.hasMore(x, true)) // loop to return all providers
232 or
233 while (providerInfo.hasMore(x, false)) // loop to returns classes w/o
234 providers
235 */
236 Boolean hasMore(Boolean isProvider);
237
238 /** Get the current providerInfo item in the ProviderInfoList
239 array. This function must follow the hasMore() function that
240 determines if there are more entries in the array.
241 while (providerInfoList.hasMore(true))
242 {
243 providerInfo pI = providerInfoList.getNext()
244 ....
245 }
246 @exception generates IndexOutOfBound exception if the
247 request is made after haveMore returns false or possibly
248 without executing the hasMore function.
249 */
250 ProviderInfo& getNext();
251
252 karl 1.101 /** get the index for the current entry in the providerInfoList.
253 Use this after getNext() to retrieve an index. Used only as
254 a counter for displays today.
255 @return Uint32
256 */
257 Uint32 getIndex();
258
|
259 karl 1.103 // Execute the pegtrace that displays class/provider
260 void pegRoutingTrace(ProviderInfo& providerInfo, const char * reqMsgName,
261 String& messageId);
262
|
263 karl 1.101 // The following are purely debug functionality and are normally not
264 // compiled. To compile them for testing of the results of the
265 // lookup providers functionality enable the following define.
266 #define PROVIDER_INFO_DISPLAY
267 #ifdef PROVIDER_INFO_DISPLAY
268 void trace(const CIMNamespaceName& nameSpace, const CIMName& className,
269 Boolean assoc = false, const CIMName& assocClass = CIMName());
270
271 // display the classname and hasprovider info
272 void display();
273
274 #endif
275
276 // Count of providers found. This may differ from size if classes were
277 // found that do not have providers.
278 Uint32 providerCount;
279
280 private:
281 Array<ProviderInfo> _array;
282 Uint32 _index;
283 };
284 karl 1.101
285 // inline methods for ProviderInfoList
286 inline Uint32 ProviderInfoList::size()
287 {
288 return _array.size();
289 }
290
291 inline void ProviderInfoList::appendClass(ProviderInfo& x)
292 {
293 _array.append(x);
294 }
295
296 inline void ProviderInfoList::appendProvider(ProviderInfo& x)
297 {
298 _array.append(x);
299 providerCount++;
300 }
301
302 inline ProviderInfo& ProviderInfoList::getNext()
303 {
304 return _array[_index++];
305 karl 1.101 }
306 inline Uint32 ProviderInfoList::getIndex()
307 {
308 return _index - 1;
309 }
310
311 #ifdef PROVIDER_INFO_DISPLAY
312 inline void ProviderInfoList::trace(const CIMNamespaceName& nameSpace,
313 const CIMName& className, Boolean assoc, const CIMName& assocClass)
314 {
315 String display;
316 for (Uint32 i = 0; i < size() ; i++)
|
317 karl 1.99 {
|
318 karl 1.101 display.append(_array[i].className.getString());
319 display.append(_array[i].hasProvider? "+ ":"- ");
|
320 karl 1.99 }
|
321 karl 1.101 PEG_TRACE((TRC_DISPATCHER,Tracer::LEVEL1,
322 "providerList namespace %s className %s %s%s"
323 " count %u provider count %u %s",
324 (const char *)nameSpace.getString().getCString(),
325 (const char *)className.getString().getCString(),
326 (assoc? "assoc:" : ""),
327 (assoc? (const char *)assocClass.getString().getCString() : ""),
328 size(), providerCount,
329 (const char *)display.getCString()));
330 }
331 inline void ProviderInfoList::display()
|
332 karl 1.99 {
|
333 karl 1.101 for (Uint32 i = 0 ; i < _array.size() ; i++)
334 {
335 ProviderInfo& pi = _array[i];
336 cout << i << " " << pi.className.getString() << " "
|
337 karl 1.106 << boolToString(pi.hasProvider) << endl;
|
338 karl 1.101 }
|
339 karl 1.99 }
|
340 karl 1.101 #endif
|
341 karl 1.99 /******************************************************************************
342 **
343 ** OperationAggregate Class
344 **
345 ******************************************************************************/
|
346 brian.campbell 1.67 /* Class to manage the aggregation of data required by post processors. This
347 class is private to the dispatcher. An instance is created by the operation
348 dispatcher to aggregate request and response information and used by the
|
349 karl 1.101 post processor to aggregate responses together. It is not released until
350 the request is complete.
351 Includes all data from the request used by the dispatcher aggregator
352 functions.
|
353 brian.campbell 1.67 */
354 class PEGASUS_SERVER_LINKAGE OperationAggregate
355 {
|
356 dave.sudlik 1.78 friend class CIMOperationRequestDispatcher;
|
357 brian.campbell 1.67 public:
|
358 karl 1.103 /** Operation Aggregate constructor. Builds an aggregation
|
359 brian.campbell 1.67 object.
|
360 karl 1.101 @param request - CIMOprationRequestMessage containing copy
361 of the original request
362 @param className Cimname Classname for the request
363 @param nameSpace CIMNamespace Namespace defined for the
364 request
365 @param totalIssued Uint32 Sets number of responses expected
366 @param requiresHostnameCompletion Boolean flag for
367 aggregator to execute host
368 name completion
369 @param hasPropList - tells aggregator to move propertylist
370 back to responses. Required because
371 issue getting responses back from OOP
372 with propertylist entact. (Optional
373 Default = false)
374 @param query QueryExpressionRep* The query Statement. Used
375 only by CQL & WQL OperationRequestDispatchers (Optional)
376 @param String queryLanguage (Optional)
|
377 karl 1.102 */
|
378 karl 1.100 OperationAggregate(CIMOperationRequestMessage* request,
|
379 kumpf 1.82 CIMName className,
|
380 karl 1.101 CIMNamespaceName nameSpace,
381 Uint32 totalIssued,
382 Boolean requiresHostnameCompletion,
383 Boolean hasPropList = false,
|
384 kumpf 1.82 QueryExpressionRep* query = 0,
385 String queryLanguage = String::EMPTY);
|
386 brian.campbell 1.67
387 virtual ~OperationAggregate();
|
388 chip 1.69
|
389 brian.campbell 1.67 // Tests validity by checking the magic number we put into the
390 // packet.
391
392 Boolean valid() const;
393
|
394 karl 1.101 // Increment the total Operation Requests issued parameter by 1
395 void incTotalIssued();
|
396 brian.campbell 1.67
|
397 karl 1.103 Uint32 getTotalIssued() const;
|
398 brian.campbell 1.67
|
399 karl 1.105 //// KS_TODO set inline
400 void setFilterParameters(QueryExpressionRep* query, const String& ql)
401 {
402 _filterResponse = true;
403 _queryLanguage = ql;
404 _query = query;
405 }
406
|
407 karl 1.103 // Append a new entry to the response list.
|
408 brian.campbell 1.67
|
409 karl 1.103 void appendResponse(CIMResponseMessage* response);
|
410 chip 1.69
|
411 brian.campbell 1.67 Uint32 numberResponses() const;
412
|
413 karl 1.103 CIMOperationRequestMessage* getRequest() const;
|
414 brian.campbell 1.67
415 CIMResponseMessage* getResponse(const Uint32& pos);
416
417 // allow dispatcher to remove the response so it doesn't become
418 // destroyed when the poA is destroyed.
419
420 CIMResponseMessage* removeResponse(const Uint32& pos);
421
422 void deleteResponse(const Uint32&pos);
423
|
424 kumpf 1.83 MessageType getRequestType() const;
|
425 brian.campbell 1.67
|
426 kumpf 1.82 void resequenceResponse(CIMResponseMessage& response);
|
427 brian.campbell 1.67
|
428 karl 1.103 /** sets the parameters required for pull operations into a new
429 * operation aggregate that was created as part of an Open...
430 * Operation.
431 *
432 * @param enContext EnumerationContext defined for this sequence
433 * @param contextString String representing the operation
434 * Context defined for this sequence
435 */
436 void setPullOperation(EnumerationContext* enContext);
437
438 bool isPullOperation() const;
439
|
440 brian.campbell 1.67 String _messageId;
|
441 karl 1.105 Boolean _filterResponse;
|
442 kumpf 1.83 MessageType _msgRequestType;
|
443 brian.campbell 1.67 Uint32 _dest;
|
444 karl 1.101 CIMName _className;
|
445 brian.campbell 1.67 CIMNamespaceName _nameSpace;
|
446 karl 1.101
447 // Set upon creation of OA object and used by handleAggregation
448 Boolean _requiresHostnameCompletion;
449 Boolean _hasPropList;
450
|
451 brian.campbell 1.67 Array<String> propertyList;
452 QueryExpressionRep* _query;
453 String _queryLanguage;
|
454 karl 1.103 Boolean _pullOperation;
455 Boolean _enumerationFinished;
456 Boolean _closeReceived;
|
457 karl 1.106 // Identification of enumerationContext defined for the pull operation
458 // for which this is the operation aggregating object
|
459 karl 1.103 EnumerationContext* _enumerationContext;
|
460 karl 1.106 String _contextId;
|
461 brian.campbell 1.67
462 private:
|
463 karl 1.103 /** Hidden (unimplemented) copy and assignment constructors */
|
464 kumpf 1.77 OperationAggregate(const OperationAggregate& x);
|
465 karl 1.103 OperationAggregate& operator=(const OperationAggregate&);
|
466 brian.campbell 1.67
467 Array<CIMResponseMessage*> _responseList;
468 Mutex _appendResponseMutex;
|
469 dave.sudlik 1.78 Mutex _enqueueResponseMutex;
|
470 karl 1.103 Mutex _enqueuePullResponseMutex;
|
471 karl 1.100 CIMOperationRequestMessage* _request;
|
472 brian.campbell 1.67 Uint32 _totalIssued;
|
473 kumpf 1.82 Uint32 _totalReceived;
474 Uint32 _totalReceivedComplete;
475 Uint32 _totalReceivedExpected;
476 Uint32 _totalReceivedErrors;
|
477 a.dunfey 1.75 Uint32 _totalReceivedNotSupported;
|
478 karl 1.101
479 Magic<0xC531B144> _magic;
|
480 brian.campbell 1.67 };
481
|
482 karl 1.103 inline Uint32 OperationAggregate::getTotalIssued() const
|
483 karl 1.101 {
484 return _totalIssued;
485 }
486
487 inline void OperationAggregate::incTotalIssued()
488 {
489 _totalIssued++;
490 }
491
|
492 karl 1.103 inline CIMOperationRequestMessage* OperationAggregate::getRequest() const
|
493 karl 1.101 {
494 return _request;
495 }
496
497 inline MessageType OperationAggregate::getRequestType() const
498 {
499 return _msgRequestType;
500 }
501
|
502 karl 1.103 inline bool OperationAggregate::isPullOperation() const
503 {
504 return _pullOperation;
505 }
506
507 /******************************************************************************
508 **
509 ** CIMOperationRequestDispatcher Class
510 **
511 ******************************************************************************/
512
|
513 kumpf 1.82 class PEGASUS_SERVER_LINKAGE CIMOperationRequestDispatcher :
514 public MessageQueueService
|
515 brian.campbell 1.67 {
|
516 karl 1.103 friend struct ProviderRequests;
|
517 kumpf 1.82 public:
|
518 brian.campbell 1.67
|
519 kumpf 1.82 typedef MessageQueueService Base;
|
520 brian.campbell 1.67
|
521 kumpf 1.82 CIMOperationRequestDispatcher(
522 CIMRepository* repository,
523 ProviderRegistrationManager* providerRegistrationManager);
|
524 brian.campbell 1.67
|
525 kumpf 1.82 virtual ~CIMOperationRequestDispatcher();
|
526 brian.campbell 1.67
|
527 kumpf 1.82 virtual void handleEnqueue(Message*);
|
528 brian.campbell 1.67
|
529 kumpf 1.82 virtual void handleEnqueue();
|
530 brian.campbell 1.67
|
531 kumpf 1.82 void handleGetClassRequest(
532 CIMGetClassRequestMessage* request);
|
533 brian.campbell 1.67
|
534 kumpf 1.82 void handleGetInstanceRequest(
535 CIMGetInstanceRequestMessage* request);
|
536 brian.campbell 1.67
|
537 kumpf 1.82 void handleDeleteClassRequest(
538 CIMDeleteClassRequestMessage* request);
|
539 brian.campbell 1.67
|
540 kumpf 1.82 void handleDeleteInstanceRequest(
541 CIMDeleteInstanceRequestMessage* request);
|
542 brian.campbell 1.67
|
543 kumpf 1.82 void handleCreateClassRequest(
544 CIMCreateClassRequestMessage* request);
|
545 brian.campbell 1.67
|
546 kumpf 1.82 void handleCreateInstanceRequest(
547 CIMCreateInstanceRequestMessage* request);
|
548 brian.campbell 1.67
|
549 kumpf 1.82 void handleModifyClassRequest(
550 CIMModifyClassRequestMessage* request);
|
551 brian.campbell 1.67
|
552 kumpf 1.82 void handleModifyInstanceRequest(
553 CIMModifyInstanceRequestMessage* request);
|
554 brian.campbell 1.67
|
555 kumpf 1.82 void handleEnumerateClassesRequest(
556 CIMEnumerateClassesRequestMessage* request);
|
557 brian.campbell 1.67
|
558 kumpf 1.82 void handleEnumerateClassNamesRequest(
559 CIMEnumerateClassNamesRequestMessage* request);
|
560 brian.campbell 1.67
|
561 kumpf 1.82 void handleEnumerateInstancesRequest(
562 CIMEnumerateInstancesRequestMessage* request);
|
563 brian.campbell 1.67
|
564 kumpf 1.82 void handleEnumerateInstanceNamesRequest(
565 CIMEnumerateInstanceNamesRequestMessage* request);
|
566 brian.campbell 1.67
|
567 kumpf 1.82 void handleAssociatorsRequest(
568 CIMAssociatorsRequestMessage* request);
|
569 brian.campbell 1.67
|
570 kumpf 1.82 void handleAssociatorNamesRequest(
571 CIMAssociatorNamesRequestMessage* request);
|
572 brian.campbell 1.67
|
573 kumpf 1.82 void handleReferencesRequest(
574 CIMReferencesRequestMessage* request);
|
575 brian.campbell 1.67
|
576 kumpf 1.82 void handleReferenceNamesRequest(
577 CIMReferenceNamesRequestMessage* request);
|
578 brian.campbell 1.67
|
579 kumpf 1.82 void handleGetPropertyRequest(
580 CIMGetPropertyRequestMessage* request);
|
581 brian.campbell 1.67
|
582 kumpf 1.82 void handleSetPropertyRequest(
583 CIMSetPropertyRequestMessage* request);
|
584 brian.campbell 1.67
|
585 kumpf 1.82 void handleGetQualifierRequest(
586 CIMGetQualifierRequestMessage* request);
|
587 brian.campbell 1.67
|
588 kumpf 1.82 void handleSetQualifierRequest(
589 CIMSetQualifierRequestMessage* request);
|
590 brian.campbell 1.67
|
591 kumpf 1.82 void handleDeleteQualifierRequest(
592 CIMDeleteQualifierRequestMessage* request);
|
593 brian.campbell 1.67
|
594 kumpf 1.82 void handleEnumerateQualifiersRequest(
595 CIMEnumerateQualifiersRequestMessage* request);
|
596 brian.campbell 1.67
|
597 kumpf 1.82 void handleExecQueryRequest(
598 CIMExecQueryRequestMessage* request);
|
599 brian.campbell 1.67
|
600 kumpf 1.82 void handleInvokeMethodRequest(
601 CIMInvokeMethodRequestMessage* request);
|
602 brian.campbell 1.67
|
603 karl 1.103 // EXP_PULL_BEGIN
604 bool handleOpenEnumerateInstancesRequest(
605 CIMOpenEnumerateInstancesRequestMessage* request);
606
607 bool handleOpenEnumerateInstancePathsRequest(
608 CIMOpenEnumerateInstancePathsRequestMessage* request);
609
610 bool handleOpenReferenceInstancesRequest(
611 CIMOpenReferenceInstancesRequestMessage* request);
612
613 bool handleOpenReferenceInstancePathsRequest(
614 CIMOpenReferenceInstancePathsRequestMessage* request);
615
616 bool handleOpenAssociatorInstancesRequest(
617 CIMOpenAssociatorInstancesRequestMessage* request);
618
619 bool handleOpenAssociatorInstancePathsRequest(
620 CIMOpenAssociatorInstancePathsRequestMessage* request);
621
622 bool handleOpenQueryInstancesRequest(
623 CIMOpenQueryInstancesRequestMessage* request);
624 karl 1.103
625 bool handlePullInstancesWithPath(
626 CIMPullInstancesWithPathRequestMessage* request);
627
628 bool handlePullInstancePaths(
629 CIMPullInstancePathsRequestMessage* request);
630
631 bool handlePullInstances(
632 CIMPullInstancesRequestMessage* request);
633
634 void handleCloseEnumeration(
635 CIMCloseEnumerationRequestMessage* request);
636
637 void handleEnumerationCount(
638 CIMEnumerationCountRequestMessage* request);
639
|
640 karl 1.105 // EXP_PULL_END
|
641 karl 1.103
642 /** Common Request handling for ExecQuery and OpenQueryRequests.
643 This function gets the provider list, get instances from the
644 repository and calls the required providers.
645
646 @param request CIMExecQueryRequestMessage. The request being issued
647
648 @param cimException CIMException - Contains an exception if
649 the processing fails and the return from the function is false.
650
651 @param enumerationContext* EnumertionContext if this is a
652 pull operation or NULL if not.
653
654 @param queryLanguage const char* defining query language (ex.
655 "WQL")
656
657 @return bool true if processing completed successfully or
658 false if there is an error. cimException contains CIMException
659 if return is false.
660 */
661 bool handleQueryRequestCommon(
662 karl 1.103 CIMExecQueryRequestMessage* request,
663 CIMException& cimException,
664 EnumerationContext* enumerationContext,
665 const char* queryLanguage,
666 const CIMName& className,
667 QueryExpressionRep* qx);
668
669
670 /** Callback from Providers, etc. This callback is used for
671 Operations that aggregate response information. This is the
672 callback pointer used by the _forwardForAggregation
673 function.
674 @param AsyncOpNode *
675 @param MessageQueue*
676 @param userParam Pointer to data that is transparently
677 carrried through the call to callback process. It contains
678 a pointer to the OperationAggregate.
679 */
|
680 karl 1.106 static void _forwardedForAggregationCallback(
|
681 kumpf 1.82 AsyncOpNode*,
682 MessageQueue*,
683 void*);
|
684 brian.campbell 1.67
|
685 karl 1.103 /** Callback from providers etc. for operations that do not
686 aggregate response. This callback pointer used by
687 _forwardToProvider functions.
688 @param AsyncOpNode *
689 @param MessageQueue*
690 @param userParam Contains the request message
691 */
|
692 karl 1.106 static void _forwardedRequestCallback(
|
693 kumpf 1.82 AsyncOpNode*,
694 MessageQueue*,
695 void*);
|
696 brian.campbell 1.67
|
697 kumpf 1.82 // Response Handler functions
|
698 brian.campbell 1.67
|
699 marek 1.95 void handleOperationResponseAggregation(
|
700 karl 1.101 OperationAggregate* poA);
|
701 brian.campbell 1.67
|
702 kumpf 1.82 void handleExecQueryResponseAggregation(OperationAggregate* poA);
|
703 brian.campbell 1.67
|
704 karl 1.103 // Issue RequestToProvider Functions
705 void issueRequestsToProviders(CIMEnumerateInstancesRequestMessage* request,
706 Uint32 numberOfClasses,
707 ProviderInfoList& providerInfos,
708 OperationAggregate* poA);
709
|
710 karl 1.106 //EXP_PULL_BEGIN
|
711 karl 1.104
|
712 karl 1.106 /* Issue saved pull/open response immediatly even if there
713 is nothing to send. Allows the server to respond to pull operations
714 if the providers are very slow
|
715 karl 1.104 */
|
716 karl 1.106 static void issueSavedResponse(EnumerationContext* en);
|
717 karl 1.104
|
718 karl 1.106 //EXP_PULL_END
|
719 kumpf 1.82 protected:
720
721 /** _getSubClassNames - Gets the names of all subclasses of the defined
722 class (including the class) and returns it in an array of strings. Uses
723 a similar function in the repository class to get the names.
724 @param namespace
725 @param className
726 @return Array of strings with class names. Note that there should be
727 at least one classname in the array (the input name)
728 Note that there is a special exception to this function, the __namespace
729 class which does not have any representation in the class repository.
730 @exception CIMException(CIM_ERR_INVALID_CLASS)
731 */
|
732 brian.campbell 1.67 Array<CIMName> _getSubClassNames(
733 const CIMNamespaceName& nameSpace,
|
734 david.dillard 1.73 const CIMName& className);
|
735 brian.campbell 1.67
|
736 karl 1.97 ProviderIdContainer* _updateProviderContainer(
|
737 brian.campbell 1.67 const CIMNamespaceName& nameSpace,
|
738 karl 1.97 const CIMInstance& pInstance,
739 const CIMInstance& pmInstance);
|
740 brian.campbell 1.67
|
741 david.dillard 1.73 // @exception CIMException
|
742 karl 1.99 ProviderInfoList _lookupAllInstanceProviders(
|
743 brian.campbell 1.67 const CIMNamespaceName& nameSpace,
|
744 karl 1.99 const CIMName& className);
|
745 brian.campbell 1.67
|
746 karl 1.99 ProviderInfoList _lookupAllAssociationProviders(
|
747 brian.campbell 1.67 const CIMNamespaceName& nameSpace,
748 const CIMObjectPath& objectName,
749 const CIMName& assocClass,
|
750 karl 1.99 const String& role);
|
751 brian.campbell 1.67
|
752 karl 1.97 ProviderInfo _lookupInstanceProvider(
|
753 brian.campbell 1.67 const CIMNamespaceName& nameSpace,
|
754 karl 1.97 const CIMName& className);
|
755 brian.campbell 1.67
|
756 kumpf 1.82 String _lookupMethodProvider(
757 const CIMNamespaceName& nameSpace,
758 const CIMName& className,
759 const CIMName& methodName,
760 ProviderIdContainer** providerIdContainer);
|
761 brian.campbell 1.67
|
762 karl 1.101 /*Forward the response defined for aggregation processing
763 and queue for output. Note this function is called
764 when a response that should be processed through the
|
765 karl 1.103 aggregator already exists. It just queues the response because
766 one exists.
|
767 karl 1.101 */
768 void _forwardResponseForAggregation(
769 CIMOperationRequestMessage* request,
770 OperationAggregate* poA,
771 CIMResponseMessage* response);
772
773 /*
774 Forward a request for aggregation. This is the path used
|
775 karl 1.103 to forward aggregating operation requests to providers,
|
776 karl 1.101 control providers, and services
777 */
|
778 karl 1.103 void _forwardAggregatingRequestToProvider(
|
779 karl 1.101 const ProviderInfo& providerInfo,
780 CIMOperationRequestMessage* request,
781 OperationAggregate* poA);
782
783 /* Commmon aggregating function used by both _forwardResponseForAggregation
|
784 karl 1.103 and _forwardRequestForAggregation above. This is an inline function
785 //// FUTURE we should be able to eliminate this one completely
786 //// in favor of the one above. Also change the name.
|
787 karl 1.101 */
|
788 kumpf 1.82 void _forwardRequestForAggregation(
|
789 venkat.puvvada 1.87 Uint32 serviceId,
|
790 brian.campbell 1.67 const String& controlProviderName,
|
791 karl 1.100 CIMOperationRequestMessage* request,
|
792 brian.campbell 1.67 OperationAggregate* poA,
|
793 kumpf 1.82 CIMResponseMessage* response = 0);
|
794 brian.campbell 1.67
|
795 karl 1.103 void _forwardRequestToSingleProvider(
|
796 karl 1.97 const ProviderInfo& providerInfo,
|
797 karl 1.100 CIMOperationRequestMessage* request,
798 CIMOperationRequestMessage* requestCopy);
|
799 brian.campbell 1.67
|
800 kumpf 1.82 void _getProviderName(
|
801 kumpf 1.81 const OperationContext& context,
802 String& moduleName,
803 String& providerName);
804
|
805 kumpf 1.82 void _logOperation(
|
806 karl 1.100 const CIMOperationRequestMessage* request,
|
807 kumpf 1.82 const CIMResponseMessage* response);
808
|
809 karl 1.99 void _enqueueExceptionResponse(
|
810 karl 1.100 CIMOperationRequestMessage* request,
|
811 karl 1.99 CIMException& exception);
812
813 void _enqueueExceptionResponse(
|
814 karl 1.100 CIMOperationRequestMessage* request,
|
815 karl 1.99 TraceableCIMException& exception);
816
817 void _enqueueExceptionResponse(
|
818 karl 1.100 CIMOperationRequestMessage* request,
|
819 karl 1.99 CIMStatusCode code,
820 const String& ExtraInfo);
821
|
822 karl 1.101 /** Send the defined response synchronously using the data in
823 the OperationAggragate to define destination. This function
824 is used to deliver parts of aggregated responses where each
825 response may not be a complete message (i.e chunks). This
826 function is controlled by a mutex so that only one chunk may
827 be delivered at a time.
828 @param poA OperationAggregate* that defines the current
829 state of the aggregated response
830 @param response CIMResponseMessage defining the current
831 response segment
832
833 @return Boolean Returns true if the response is complete
834 with this segment.
835 */
|
836 kumpf 1.82 Boolean _enqueueResponse(
837 OperationAggregate*& poA,
838 CIMResponseMessage*& response);
|
839 kumpf 1.81
|
840 karl 1.101 /** Enqueue a simple response aschronously. Destination is
841 determied by the request.
842 @param request CIMOperationReqeustMessage that defines
843 destination
844 @param response CIMResponseMessage that contains response
845 data
846 */
|
847 kumpf 1.82 void _enqueueResponse(
|
848 karl 1.100 CIMOperationRequestMessage* request,
|
849 kumpf 1.82 CIMResponseMessage* response);
|
850 brian.campbell 1.67
|
851 kumpf 1.82 CIMValue _convertValueType(const CIMValue& value, CIMType type);
|
852 brian.campbell 1.67
|
853 kumpf 1.82 void _fixInvokeMethodParameterTypes(CIMInvokeMethodRequestMessage* request);
|
854 brian.campbell 1.67
|
855 kumpf 1.82 void _fixSetPropertyValueType(CIMSetPropertyRequestMessage* request);
|
856 brian.campbell 1.67
|
857 karl 1.99 // Request Error Response Functions - The following functions test for
858 // particular operations parameters, etc. and if the tests fail
859 // generate error response messages. They all follow the same common
860 // pattern of returning true if the test fails so that the main
861 // function must test the result and return. This allows putting
862 // the trace method return into the CIMOperationRequestDispatcher main.
|
863 karl 1.103 //
864 // EXP_PULL_BEGIN
865
866 bool _rejectIfPullParametersFailTests(
867 CIMOpenOperationRequestMessage* request,
|
868 karl 1.105 Uint32& operationMaxObjectCount,
869 Boolean allowQueryFilter);
|
870 karl 1.103
871 bool _rejectIfContinueOnError(CIMOperationRequestMessage* request,
872 Boolean continueOnError);
873
874 bool _rejectInvalidFilterParameters(CIMOperationRequestMessage* request,
875 const String& filterQueryLanguageParam,
|
876 karl 1.105 const String& filterQueryParam,
877 Boolean allowQueryFilter);
|
878 karl 1.103
879 bool _rejectInvalidMaxObjectCountParam(
880 CIMOperationRequestMessage* request,
881 const Uint32 maxObjectCountParam,
882 bool requiredParameter,
883 Uint32& value,
884 const Uint32 defaultValue);
885
886 bool _rejectInvalidOperationTimeout(CIMOperationRequestMessage* request,
887 const Uint32Arg& operationTimeout);
888
889 bool _rejectInvalidEnumerationContext(
890 CIMOperationRequestMessage* request,
891 EnumerationContext* enumerationContext);
892
893 bool _rejectIfContextTimedOut(CIMOperationRequestMessage* request,
894 Boolean isTimedOut);
895
896 bool _rejectInvalidPullRequest(CIMOperationRequestMessage* request,
897 Boolean valid);
898
899 karl 1.103 bool _rejectIfEnumerationContextProcessing(
900 CIMOperationRequestMessage* request,
901 Boolean processing);
|
902 karl 1.105
903 #ifdef PEGASUS_ENABLE_FQL
904 //// Temporarily disabled because of issue where we are losing
905 //// data.
906 //// FQLQueryExpressionRep* handleFQLQueryRequest(
907 //// CIMOpenOperationRequestMessage* msg);
908 #endif
|
909 karl 1.103 // EXP_PULL_END
|
910 karl 1.99
|
911 karl 1.100 Boolean _rejectAssociationTraversalDisabled(
912 CIMOperationRequestMessage* request,
|
913 karl 1.99 const String& opName);
914
|
915 karl 1.100 Boolean _rejectInvalidRoleParameter(CIMOperationRequestMessage* request,
|
916 karl 1.99 const String& roleParameter,
917 const String& parameterName);
918
919 Boolean _rejectInvalidObjectPathParameter(
|
920 karl 1.100 CIMOperationRequestMessage* request,
|
921 karl 1.99 const CIMObjectPath& path);
922
|
923 karl 1.102 /**Tests for existence of the class defined in the request and
924 if successful return true with the class in the targetClass
925 argument. Note that exceptions are caught in this method.
926
927 @param request CIMOperationRequestMessage containing
928 Request. Note that this depends on class name
929 and namespace being in this message
930 @param targetClass CIMClass class to be returned if request
931 successful
932
933 @return Boolean true if class in request->className found
934 for request->nameSpace. False if not found.
935 */
936
937 Boolean _rejectInvalidClassParameter(CIMOperationRequestMessage* request,
938 CIMConstClass& targetClass);
939
|
940 karl 1.103 void _rejectCreateContextFailed(CIMOperationRequestMessage* request);
941
|
942 karl 1.102 /**Equivalent to _rejectInvalidClassParameter above except that
943 it included objecName parameter
944
945 @param request
946 @param nameSpace
947 @param objectName
948
949 @return Boolean
950 */
|
951 karl 1.100 Boolean _rejectInvalidClassParameter(CIMOperationRequestMessage* request,
|
952 karl 1.99 const CIMNamespaceName& nameSpace,
953 const CIMObjectPath& objectName);
954
|
955 karl 1.103 /* generate and return the required exception if this test fails
956
957 */
958 Boolean _CIMExceptionIfNoProvidersOrRepository(
959 CIMOperationRequestMessage* request,
960 const ProviderInfoList& providerInfos,
961 CIMException& cimException);
|
962 karl 1.99 /**
963 Reject if no providers or repository for this class
964 */
|
965 karl 1.100 Boolean _rejectNoProvidersOrRepository(CIMOperationRequestMessage* request,
|
966 karl 1.102 const ProviderInfoList&);
|
967 karl 1.99
968 /**
|
969 karl 1.103 Reject if the number of providers required to complete an
|
970 karl 1.99 operation is greater than the maximum allowed.
971 @param nameSpace The target namespace of the operation.
972 @param className The name of the class specified in the request.
|
973 karl 1.101 @param providerInfoList Contains count of the number of
974 providers required to complete the operation.
|
975 karl 1.99 @exception CIMException if the providerCount is greater than the
976 maximum allowed.
977 */
978 void _rejectEnumerateTooBroad(
979 const CIMNamespaceName& nameSpace,
980 const CIMName& className,
981 Uint32 providerCount);
982
|
983 kumpf 1.84 /**
984 Checks whether the specified class is defined in the specified
985 namespace.
986 @param nameSpace The namespace to check for className.
987 @param className The name of the class to check for in nameSpace.
988 @return True if the specified class is defined in the specified
989 namespace, false otherwise.
990 */
991 Boolean _checkExistenceOfClass(
992 const CIMNamespaceName& nameSpace,
993 const CIMName& className);
994
|
995 mike 1.90 CIMConstClass _getClass(
|
996 kumpf 1.82 const CIMNamespaceName& nameSpace,
997 const CIMName& className,
998 CIMException& cimException);
|
999 brian.campbell 1.67
|
1000 karl 1.102 /*
1001 Check to determine if we have any providers or repository for this
1002 class.
1003 NOTE: There may be issues with this test in general since it is use
1004 for enumerates, etc. and the goal there is to never exception for
1005 things like this, simply return no objects. On the other hand
1006 This is a real boundary condition for the server where the
1007 repository is not to be used and there are NO providers registered.
|
1008 karl 1.103 KS_TODO - Check if this is really valid
|
1009 karl 1.102 */
1010 Boolean _checkNoProvidersOrRepository(CIMOperationRequestMessage* request,
1011 Uint32 providerCount, const CIMName& className);
1012
|
1013 karl 1.101 Boolean _forwardEnumerationToProvider(
1014 ProviderInfo &providerInfo,
|
1015 karl 1.99 OperationAggregate* poA,
|
1016 karl 1.101 CIMOperationRequestMessage* request);
|
1017 chip 1.69
|
1018 karl 1.102 void enumerateInstancesFromRepository(
1019 CIMEnumerateInstancesResponseMessage *response,
1020 OperationAggregate* poA,
1021 CIMOperationRequestMessage* request);
1022
|
1023 kumpf 1.82 CIMRepository* _repository;
|
1024 brian.campbell 1.67
|
1025 kumpf 1.82 ProviderRegistrationManager* _providerRegistrationManager;
|
1026 karl 1.102
|
1027 karl 1.99 //
1028 // Enable particular Operations or services
1029 //
|
1030 kumpf 1.82 Boolean _enableAssociationTraversal;
1031 Boolean _enableIndicationService;
|
1032 karl 1.99
|
1033 karl 1.104 // KS_TODO the following should be private.
|
1034 karl 1.99 // Define the maximum number of classes that system will enumerate
1035 // Allows the system to limit the size of enumeration responses,
1036 // at least in terms of number of classes that can be included in
1037 // an enumeration. Does not limit number of objects in enumeration
1038 // response.
|
1039 kumpf 1.82 Uint32 _maximumEnumerateBreadth;
|
1040 karl 1.99
|
1041 karl 1.103 // Define the maximum number of objects that the system will accept
1042 // for pull operation input parameter.
|
1043 karl 1.104
1044 Uint32 _systemPullOperationMaxObjectCount;
1045
|
1046 karl 1.103
1047 // Define whether the system will accept the value zero as a valid
1048 // pull interoperation timeout. Since the value of zero disables the
1049 // timer this would mean that the system operates with no timeout
1050 // between pull operations. This should be somewhere externally as
1051 // a configuration parameter
1052 Boolean _rejectZeroOperationTimeoutValue;
1053
1054 // Value for maximum timeout for pull operations. If this value is
1055 // exceeded, the operation request will be rejected.
|
1056 karl 1.104 // Set from configuration manager
|
1057 karl 1.103 Uint32 _pullOperationMaxTimeout;
1058
|
1059 venkat.puvvada 1.87 Uint32 _providerManagerServiceId;
|
1060 karl 1.103
|
1061 kumpf 1.82 #ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION
1062 Array<String> _excludeModulesFromNormalization;
1063 #endif
|
1064 brian.campbell 1.67
|
1065 karl 1.97 // meta dispatcher integration
|
1066 kumpf 1.82 virtual void _handle_async_request(AsyncRequest* req);
|
1067 brian.campbell 1.67
|
1068 karl 1.104 // Process NotifyConfigChangeRequests
1069 CIMNotifyConfigChangeResponseMessage* handlePropertyUpdateRequest(
1070 CIMNotifyConfigChangeRequestMessage *message);
1071
|
1072 karl 1.101 Boolean _enumerateFromRepository(
1073 CIMOperationRequestMessage* request,
1074 OperationAggregate* poA,
1075 ProviderInfoList& providerInfos);
1076
|
1077 karl 1.103 void _issueImmediateOpenOrPullResponseMessage(
1078 CIMOperationRequestMessage* request,
1079 CIMOpenOrPullResponseDataMessage* response,
1080 EnumerationContext* en,
1081 Uint32 operationMaxObjectCount);
1082
1083 bool issueOpenOrPullResponseMessage(
1084 CIMOperationRequestMessage* openRequest,
1085 CIMOpenOrPullResponseDataMessage* openResponse,
1086 EnumerationContext* en,
1087 Uint32 operationMaxObjectCount,
1088 Boolean requireCompleteResponses);
1089
|
1090 karl 1.97 private:
1091 static void _handle_enqueue_callback(AsyncOpNode*, MessageQueue*, void*);
|
1092 brian.campbell 1.67
|
1093 karl 1.97 Boolean _lookupAssociationProvider(
1094 const CIMNamespaceName& nameSpace,
1095 const CIMName& assocClass,
1096 ProviderInfo& providerInfo );
|
1097 brian.campbell 1.67
|
1098 karl 1.97 Array<String> _lookupRegisteredAssociationProvider(
1099 const CIMNamespaceName& nameSpace,
1100 const CIMName& assocClass,
1101 ProviderIdContainer** container);
|
1102 brian.campbell 1.67
|
1103 karl 1.97 Boolean _lookupInternalProvider(
1104 const CIMNamespaceName& nameSpace,
1105 const CIMName& className,
1106 ProviderInfo& providerInfo);
|
1107 brian.campbell 1.67
|
1108 karl 1.101 Boolean _getAssocFromRepository(
1109 CIMOperationRequestMessage* request,
1110 OperationAggregate* poA,
1111 ProviderInfoList& providerInfos,
1112 CIMResponseMessage* response);
1113
|
1114 karl 1.103 /**
1115 Complete processing for the pull operations, pullInstancesWithPath
1116 and Pull InstancePaths. This function replaces all the code in the
1117 pull functions including the input checking code because the pull operations
1118 are exactly the same except for the response object type.
1119 @param this - Pointer to the CIMOperationRequestDispatcher object.
1120 Required to execute dispatcher methods
1121 @param request CIMPullOperationRequestMessage* Defines the pull
1122 request message pointer
1123 @param pullResponse - AutoPtr<CIMOpenOrPullResponseDataMessage>& defines the
1124 response message for this pull response
1125 @param requestName - String with the request name. Used internally for
1126 traces, etc.
1127 */
1128 bool processPullRequest(
1129 CIMPullOperationRequestMessage* request,
1130 CIMOpenOrPullResponseDataMessage* pullResponse,
1131 const char * requestName);
1132 // EXP_PULL_BEGIN
1133
1134 // pointer to EnumerationContextTable which allocates
1135 karl 1.103 // and releases enumeration context objects.
1136 EnumerationContextTable *_enumerationContextTable;
|
1137 karl 1.105 // EXP_PULL_END
|
1138 karl 1.103
|
1139 karl 1.97 // Pointer to internal RoutingTable for Control Providers and Services
|
1140 venkat.puvvada 1.87 DynamicRoutingTable *_routing_table;
|
1141 karl 1.103
1142 // internal bool that defines whether handleEnqueue will delete
1143 // the original request. Used because in some cases the handler
1144 // retains the request beyond the life of the handleEnqueue call.
1145 bool _deleteRequestRequired;
|
1146 brian.campbell 1.67 };
1147
|
1148 karl 1.102 // Forward response to Common Request Aggregator. This is simply
|
1149 karl 1.103 // a syntatic simplification that sends the response directly to the
1150 // aggregation component because a response exists.
|
1151 karl 1.101 inline void CIMOperationRequestDispatcher::_forwardResponseForAggregation(
1152 CIMOperationRequestMessage* request,
1153 OperationAggregate* poA,
1154 CIMResponseMessage* response)
1155 {
1156 _forwardRequestForAggregation(
1157 getQueueId(),
1158 String(),
1159 request,
1160 poA,
1161 response);
1162 }
1163
|
1164 karl 1.102 /*
1165 For request for aggregation with poA as parameter.
1166 */
|
1167 karl 1.103 inline void CIMOperationRequestDispatcher::_forwardAggregatingRequestToProvider(
|
1168 karl 1.101 const ProviderInfo& providerInfo,
1169 CIMOperationRequestMessage* request,
1170 OperationAggregate* poA)
1171 {
1172 _forwardRequestForAggregation(
1173 providerInfo.serviceId,
1174 providerInfo.controlProviderName,
1175 request,
1176 poA);
1177 }
1178
|
1179 brian.campbell 1.67 PEGASUS_NAMESPACE_END
1180
1181 #endif /* PegasusDispatcher_Dispatcher_h */
|