1 martin 1.87 //%LICENSE////////////////////////////////////////////////////////////////
|
2 martin 1.88 //
|
3 martin 1.87 // 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.88 //
|
10 martin 1.87 // 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.88 //
|
17 martin 1.87 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
|
19 martin 1.88 //
|
20 martin 1.87 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
21 martin 1.88 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22 martin 1.87 // 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.88 //
|
28 martin 1.87 //////////////////////////////////////////////////////////////////////////
|
29 kumpf 1.1 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
32 #ifndef Pegasus_IndicationService_h
33 #define Pegasus_IndicationService_h
34
35 #include <Pegasus/Common/Config.h>
36 #include <Pegasus/Common/MessageQueueService.h>
37 #include <Pegasus/Common/CIMMessage.h>
|
38 kumpf 1.78 #include <Pegasus/Common/AcceptLanguageList.h>
39 #include <Pegasus/Common/ContentLanguageList.h>
|
40 yi.zhou 1.84 #include <Pegasus/Server/ProviderRegistrationManager/\
41 ProviderRegistrationManager.h>
|
42 kumpf 1.54 #include <Pegasus/Server/Linkage.h>
|
43 chuck 1.64 #include <Pegasus/Query/QueryExpression/QueryExpression.h>
|
44 kumpf 1.1
|
45 yi.zhou 1.84 #include <Pegasus/IndicationService/ProviderClassList.h>
46 #include <Pegasus/IndicationService/IndicationOperationAggregate.h>
47
48 #ifdef PEGASUS_ENABLE_INDICATION_COUNT
49 # include <Pegasus/IndicationService/ProviderIndicationCountTable.h>
50 #endif
|
51 kumpf 1.41
|
52 venkat.puvvada 1.85 #ifdef PEGASUS_ENABLE_DMTF_INDICATION_PROFILE_SUPPORT
53 # include <Pegasus/IndicationService/IndicationServiceConfiguration.h>
54 #endif
55
|
56 kumpf 1.1 PEGASUS_NAMESPACE_BEGIN
57
|
58 karl 1.97.2.1 // Holds information of control providers servicing the indications.
59 struct ControlProvIndReg
60 {
61 CIMName className;
62 CIMNamespaceName nameSpace;
63 CIMInstance providerModule;
64 CIMInstance provider;
65 };
66
67 typedef HashTable <String, ControlProvIndReg, EqualFunc <String>,
68 HashFunc <String> > ControlProvIndRegTable;
69
|
70 kumpf 1.54 class SubscriptionRepository;
71 class SubscriptionTable;
|
72 kumpf 1.1
73 /**
|
74 kumpf 1.5 IndicationService class is the service that serves the
|
75 kumpf 1.10 Indication Subscription, Indication Filter, and Indication Handler
|
76 kumpf 1.5 classes, and processes indications.
|
77 kumpf 1.1 */
78
79 class PEGASUS_SERVER_LINKAGE IndicationService : public MessageQueueService
80 {
81 public:
82
83 /**
84 Constructs an IndicationSubscription instance and initializes instance
85 variables.
86 */
|
87 kumpf 1.82 IndicationService(
88 CIMRepository* repository,
89 ProviderRegistrationManager* providerRegManager);
|
90 kumpf 1.1
|
91 kumpf 1.82 virtual ~IndicationService();
|
92 kumpf 1.1
|
93 mday 1.2 void handleEnqueue(Message* message);
|
94 kumpf 1.1
|
95 kumpf 1.82 virtual void handleEnqueue();
|
96 kumpf 1.1
|
97 kumpf 1.82 virtual void _handle_async_request(AsyncRequest* req);
|
98 kumpf 1.1
|
99 kumpf 1.54 /**
100 Gets a String containing the Provider Name, for use in a log message to
101 identify the provider.
102
103 @param provider provider instance
104
105 @return String containing the Provider Name
106 */
|
107 kumpf 1.82 static String getProviderLogString(CIMInstance& provider);
|
108 kumpf 1.54
|
109 venkat.puvvada 1.90 /**
110 Sends a Subscription Init Complete request to the Provider
111 Manager Service.
112 */
113 void sendSubscriptionInitComplete();
114
|
115 venkat.puvvada 1.91
|
116 kumpf 1.1 AtomicInt dienow;
117
118 /**
|
119 kumpf 1.5 Operation types for the NotifyProviderRegistration message
|
120 kumpf 1.1 */
|
121 kumpf 1.5 enum Operation {OP_CREATE = 1, OP_DELETE = 2, OP_MODIFY = 3};
|
122 kumpf 1.24
123 static Mutex _mutex;
|
124 kumpf 1.1
|
125 kumpf 1.5 private:
|
126 kumpf 1.1
|
127 kumpf 1.82 void _initialize();
|
128 kumpf 1.1
|
129 venkat.puvvada 1.91 /**
130 Reads active subscriptons from repository and sends create subscription
131 requests to the corresponding indication providers and initializes the
132 subscription repository and tables.
133 @param timeoutSeconds Timeout in seconds to complete the
134 initialization of active
135 subscriptions. Timeout value 0
136 means no time limit.
137
138 @return True, if the initialization completed within timeout period.
139 False, if the initialization can not completed within
140 timeout period.
141 */
142 Boolean _initializeActiveSubscriptionsFromRepository(Uint32 timeoutSeconds);
143
|
144 kumpf 1.82 void _terminate();
|
145 kumpf 1.1
|
146 kumpf 1.82 void _handleGetInstanceRequest(const Message* message);
|
147 kumpf 1.1
|
148 kumpf 1.82 void _handleEnumerateInstancesRequest(const Message* message);
|
149 kumpf 1.1
|
150 kumpf 1.82 void _handleEnumerateInstanceNamesRequest(const Message* message);
|
151 kumpf 1.1
|
152 kumpf 1.82 void _handleCreateInstanceRequest(const Message* message);
|
153 kumpf 1.1
|
154 kumpf 1.82 void _handleModifyInstanceRequest(const Message* message);
|
155 kumpf 1.1
156 void _handleDeleteInstanceRequest(const Message * message);
157
|
158 yi.zhou 1.83 void _handleProcessIndicationRequest(Message* message);
|
159 kumpf 1.1
|
160 venkat.puvvada 1.91 #ifdef PEGASUS_ENABLE_DMTF_INDICATION_PROFILE_SUPPORT
161
162 void _handleInvokeMethodRequest(Message* message);
163 /**
164 Sends CIMIndicationServiceDisabledRequestMessage to provider manager
165 service so that provider manager's resets _subscriptionInitComplete
166 flag.
167 */
168 void _sendIndicationServiceDisabled();
169
170 /**
171 Clears Subscription Table entries after sending delete subscription
172 requests to appropriate indication providers. Subscription state will
173 remain enabled.
174 @param timeoutSeconds Timeout in seconds to complete sending
175 the delete subscription requests to
176 all active indication providers.
177 Timeout value 0 means no time limit.
178
179 @return True, if the operation is completed within timeout period.
180 False, if the operation can not completed within
181 venkat.puvvada 1.91 timeout period.
182 */
183
184 Boolean _deleteActiveSubscriptions(Uint32 timeoutSeconds);
185
186 /**
187 Enables the indication service using method
188 _initializeActiveSubscriptionsFromRepository(). Sets the Service
189 EnabledState and HelathState properties appropriately.
190 @param timeoutSeconds Timeout in seconds to complete the
191 initialization of active
192 subscriptions. Timeout value 0
193 means no time limit.
194
195 @return _RETURNCODE_COMPLETEDWITHNOERROR, if the initialization
196 completed within timeout period. Service HealthState
197 is set to "OK" and EnabledState will be set to "Enabled".
198
199 _RETURNCODE_TIMEOUT, if the initialization can not completed
200 within timeout period. In this case, all active
201 subscriptions might not have been initialized. Service
202 venkat.puvvada 1.91 HealthState is set to "Degraded/Warning" and EnabledState
203 will be set to "Enabled".
204 */
205 Uint32 _enableIndicationService(Uint32 timeoutSeconds);
206
207 /**
208 Disables the indication service using _deleteActiveSubscriptions()
209 method. Sets the Service EnabledState and HelathState
210 properties appropriately.
211
212 @param timeoutSeconds Timeout in seconds to complete the
213 disabling of the service.
214 @param cimException Output parameter returned to calller
215 if there is an exception.
216
217 @return _RETURNCODE_COMPLETEDWITHNOERROR, if the disable
218 completed within timeout period. Service
219 HealthState is set to "OK" and EnabledState
220 will be set to "Disabled".
221
222 _RETURNCODE_TIMEOUT, if the disable cannot be completed
223 venkat.puvvada 1.91 within timeout period. In this case, all active
224 subscriptions might not have been disabled. Service
225 HealthState is set to "Degraded/Warning" and EnabledState
226 will remain "Enabled".
227 */
228 Uint32 _disableIndicationService(
229 Uint32 timeoutSeconds,
230 CIMException &cimException);
231
232 /**
233 Waits for async requets pending to complete. Returns true if there
234 are no async requests pending within timeout period.
235 */
236 Boolean _waitForAsyncRequestsComplete(
237 struct timeval* startTime,
238 Uint32 timeoutSeconds);
|
239 venkat.puvvada 1.94 /**
240 Sends the CIMNotifySubscriptionNotActiveRequestMessage to Handler
241 service when subscription has been disabled/deleted/expired.
242
243 @param subscriptionName The subscription instance path
244 */
245 void _sendSubscriptionNotActiveMessagetoHandlerService(
246 const CIMObjectPath &subscriptionName);
247
248 /**
249 Sends the CIMNotifyListenerNotActiveRequestMessage to Handler
250 service when listener has been deleted.
251
252 @param handlerName handler/listener instance path
253 */
254 void _sendListenerNotActiveMessagetoHandlerService(
255 const CIMObjectPath &handlerName);
|
256 venkat.puvvada 1.91 #endif
|
257 venkat.puvvada 1.94
|
258 venkat.puvvada 1.97 Uint16 _getEnabledState();
259 void _setEnabledState(Uint16 state);
260
|
261 venkat.puvvada 1.91 /**
262 Handles the CIM requests when IndicationService is not enabled. Very
263 few requests are handled by IndicationService when not enabled.
264 */
265 void _handleCimRequestWithServiceNotEnabled(Message *message);
266
267 void _handleCimRequest(Message *message);
268
|
269 kumpf 1.1 /**
|
270 kumpf 1.57 Asynchronous callback function for _handleProcessIndicationRequest.
271 The response from the Handler is checked, and if it is not success, the
|
272 carolann.graves 1.74 subscription's On Fatal Error Policy is implemented.
|
273 kumpf 1.57
274 @param operation shared data structure that controls message
275 processing
276 @param destination target queue of completion callback
277 @param userParameter user parameter for callback processing
278 */
|
279 kumpf 1.82 static void _handleIndicationCallBack(
280 AsyncOpNode* operation,
281 MessageQueue* destination,
282 void* userParameter);
|
283 kumpf 1.57
284 /**
|
285 kumpf 1.82 Notifies the Indication Service that a change in provider registration
286 has occurred. The Indication Service retrieves the subscriptions
287 affected by the registration change, sends the appropriate Create,
|
288 carolann.graves 1.74 Modify, and/or Delete requests to the provider, and sends an alert to
289 handler instances of subscriptions that are no longer served by the
|
290 kumpf 1.10 provider.
|
291 kumpf 1.1 */
|
292 kumpf 1.82 void _handleNotifyProviderRegistrationRequest(const Message* message);
|
293 kumpf 1.1
294 /**
|
295 carolann.graves 1.74 Notifies the Indication Service that a provider has been disabled.
|
296 kumpf 1.51 The Indication Service retrieves the subscriptions served by the
|
297 carolann.graves 1.74 disabled provider, and logs a message for each subscription that is no
|
298 kumpf 1.51 longer served by the provider.
|
299 kumpf 1.1 */
|
300 kumpf 1.82 void _handleNotifyProviderTerminationRequest(const Message* message);
|
301 kumpf 1.1
302 /**
|
303 carolann.graves 1.74 Notifies the Indication Service that a provider has been enabled.
304 The Indication Service retrieves the subscriptions that can be served
305 by the enabled provider, sends Create Subscription and Enable
306 Indications requests to the provider, and logs a message for each
|
307 kumpf 1.51 subscription that is now served by the provider.
308 */
|
309 kumpf 1.82 void _handleNotifyProviderEnableRequest(const Message* message);
|
310 kumpf 1.51
311 /**
|
312 carolann.graves 1.80 Notifies the Indication Service that failure of a provider module that
313 included at least one indication provider has been detected.
314 The Indication Service retrieves the subscriptions served by providers
315 in the failed module. The Indication Service returns in the response
316 the number of affected subscriptions, so the sender of the request
317 knows if any subscriptions were affected.
318 */
|
319 kumpf 1.82 void _handleNotifyProviderFailRequest(Message* message);
|
320 carolann.graves 1.80
321 /**
|
322 carolann.graves 1.74 Determines if it is legal to create an instance.
323 Checks for existence of all key and required properties. Checks that
324 properties that MUST NOT exist (based on values of other properties),
325 do not exist. For any property that has a default value, if it does
|
326 kumpf 1.5 not exist, adds the property with the default value.
327
328 @param instance instance to be created
329 @param nameSpace namespace for instance to be created
330
|
331 carolann.graves 1.73 @exception CIM_ERR_INVALID_PARAMETER if instance is invalid
|
332 carolann.graves 1.74 @exception CIM_ERR_NOT_SUPPORTED if the specified class is not
|
333 carolann.graves 1.73 supported
|
334 kumpf 1.5
|
335 kumpf 1.54 @return True, if the instance can be created;
|
336 kumpf 1.10 Otherwise throws an exception
|
337 kumpf 1.5 */
|
338 kumpf 1.82 Boolean _canCreate(
339 CIMInstance& instance,
340 const CIMNamespaceName& nameSpace);
|
341 kumpf 1.5
|
342 kumpf 1.21 /**
343 Validates the specified required property in the instance.
|
344 carolann.graves 1.74 If the property does not exist, or has a null value, or is not of the
|
345 kumpf 1.56 expected type, an exception is thrown, using the specified message.
|
346 kumpf 1.21
|
347 carolann.graves 1.74 This function is called by the _canCreate function, and is used to
|
348 kumpf 1.21 validate the Filter and Handler properties in Subscription instances,
|
349 carolann.graves 1.74 the Name, Query and Query Language properties in
350 Filter instances, the Name and Destination
351 properties in CIMXML Handler instances, and the Name,
|
352 kumpf 1.21 Trap Destination, and SNMP Version properties in SNMP Mapper instances.
353
354 @param instance instance to be validated
355 @param propertyName name of property to be validated
|
356 kumpf 1.56 @param expectedType expected CIMType of property value
|
357 kumpf 1.86 @param isKeyProperty indicates whether the property is a key
358 property (used for selection of error
359 message)
|
360 kumpf 1.82 @param isArray indicates whether the validated
361 property is array
|
362 kumpf 1.21
|
363 carolann.graves 1.73 @exception CIM_ERR_INVALID_PARAMETER if required property is missing
364 or null
|
365 kumpf 1.21 */
|
366 kumpf 1.82 void _checkRequiredProperty(
367 CIMInstance& instance,
368 const CIMName& propertyName,
|
369 kumpf 1.56 const CIMType expectedType,
|
370 kumpf 1.86 Boolean isKeyProperty,
371 Boolean isArray = false);
|
372 kumpf 1.20
|
373 kumpf 1.5 /**
|
374 carolann.graves 1.74 Validates the specified Uint16 (non-array) property and its
|
375 carolann.graves 1.69 corresponding String (non-array) Other___ property in the instance.
|
376 kumpf 1.15 If the property does not exist, it is added with the default value.
377 If the property exists, but its value is NULL, its value is set to
378 the default value.
379 If the value of the property is Other, but the corresponding Other___
|
380 kumpf 1.56 property either does not exist, has a value of NULL, or is not of the
|
381 carolann.graves 1.74 correct type, an exception is thrown.
|
382 kumpf 1.15 If the value of the property is not Other, but the corresponding
383 Other___ property exists and has a non-NULL value, an exception is
384 thrown.
|
385 carolann.graves 1.74 If the value of the property is not a supported value, an exception is
|
386 kumpf 1.56 thrown.
|
387 carolann.graves 1.74 This function is called by the _canCreate function, and is used to
388 validate the following pairs of properties in Subscription or Handler
389 instances: Subscription State, Other Subscription State, Repeat
390 Notification Policy, Other Repeat Notification Policy, On Fatal Error
391 Policy, Other On Fatal Error Policy, Persistence Type, Other
|
392 kumpf 1.15 Persistence Type.
393
394 @param instance instance to be validated
395 @param propertyName name of property to be validated
396 @param otherPropertyName name of Other___ property to be validated
397 @param defaultValue default value for property
398 @param otherValue "Other" value for property
|
399 kumpf 1.19 @param validValues set of valid values for property
|
400 kumpf 1.55 @param supportedValues set of supported values for property
|
401 kumpf 1.15
|
402 carolann.graves 1.73 @exception CIM_ERR_INVALID_PARAMETER if value of property or Other___
403 property is invalid
|
404 kumpf 1.15 */
|
405 kumpf 1.82 void _checkPropertyWithOther(
406 CIMInstance& instance,
407 const CIMName& propertyName,
408 const CIMName& otherPropertyName,
|
409 kumpf 1.15 const Uint16 defaultValue,
|
410 kumpf 1.19 const Uint16 otherValue,
|
411 kumpf 1.82 const Array<Uint16>& validValues,
412 const Array<Uint16>& supportedValues);
|
413 kumpf 1.20
|
414 kumpf 1.21 /**
415 Validates the specified property in the instance.
416 If the property does not exist, it is added with the default value.
417 If the property exists, but its value is NULL, its value is set to
418 the default value.
|
419 carolann.graves 1.74 This function is called by the _canCreate function, and is used to
|
420 carolann.graves 1.62 validate the Source Namespace property in Filter instances.
|
421 carolann.graves 1.74 This function is also called by the _initOrValidateStringProperty
422 function to validate the CreationClassName, SystemName, and
|
423 carolann.graves 1.69 SystemCreationClassName key properties in Filter and Handler instances.
|
424 kumpf 1.21
|
425 kumpf 1.56 Note: currently all properties validated by this function are of type
|
426 carolann.graves 1.74 String. To use this function in the future with properties of other
427 types, a type parameter would need to be added, and the default value
|
428 kumpf 1.56 would need to be passed as a CIMValue instead of a String.
429
|
430 carolann.graves 1.69 Note: currently all properties validated by this function are non-array
431 properties. To use this function in the future with both array and
|
432 carolann.graves 1.74 non-array properties, a Boolean isArray parameter would need to be
|
433 carolann.graves 1.69 added.
434
|
435 kumpf 1.21 @param instance instance to be validated
436 @param propertyName name of property to be validated
437 @param defaultValue default value for property
438
439 @return the value of the property
440 */
|
441 kumpf 1.82 String _checkPropertyWithDefault(
442 CIMInstance& instance,
443 const CIMName& propertyName,
444 const String& defaultValue);
|
445 kumpf 1.56
446 /**
447 Validates the specified property in the instance.
|
448 venkat.puvvada 1.93 If the property does not exist, it is added with the GUID value.
449 If the property exists, but its value is NULL, its value is set to
450 the GUID value.
451 This function is called by the _canCreate function, and is used to
452 set the name of the Handler instance.
453
454 @param instance instance to be validated
455 @param propertyName name of property to be validated
456 */
457 String _checkPropertyWithGuid(
458 CIMInstance& instance,
459 const CIMName& propertyName);
460
461 /**
462 Validates the specified property in the instance.
|
463 carolann.graves 1.62 If the property does not exist, it is added with the default value.
464 If the property exists, but its value is NULL, its value is set to
465 the default value.
|
466 carolann.graves 1.74 If the property exists and has a non-NULL value, its value is validated
467 against the default (expected) value. If the value is invalid, an
|
468 carolann.graves 1.62 exception is thrown.
|
469 carolann.graves 1.74 This function is called by the _canCreate function, and is used to
|
470 carolann.graves 1.62 validate the Creation Class Name, System Name and System Creation Class
471 Name properties in Filter and Handler instances.
472
473 Note: currently all properties validated by this function are of type
|
474 carolann.graves 1.74 String. To use this function in the future with properties of other
475 types, a type parameter would need to be added, and the default value
|
476 carolann.graves 1.62 would need to be passed as a CIMValue instead of a String.
477
|
478 carolann.graves 1.69 Note: currently all properties validated by this function are non-array
479 properties. To use this function in the future with both array and
|
480 carolann.graves 1.74 non-array properties, a Boolean isArray parameter would need to be
|
481 carolann.graves 1.69 added.
482
|
483 carolann.graves 1.62 @param instance instance to be validated
484 @param propertyName name of property to be validated
485 @param defaultValue default value for property
486
487 @return the value of the property
488 */
|
489 kumpf 1.82 String _initOrValidateStringProperty(
490 CIMInstance& instance,
491 const CIMName& propertyName,
492 const String& defaultValue);
|
493 carolann.graves 1.62
494 /**
495 Validates the specified property in the instance.
|
496 kumpf 1.56 If the property exists and its value is not NULL, but it is not of
497 the correct type, an exception is thrown.
|
498 carolann.graves 1.74 This function is called by the _canCreate function. It is used to
499 validate the FailureTriggerTimeInterval, TimeOfLastStateChange,
|
500 kumpf 1.56 SubscriptionDuration, SubscriptionStartTime, SubscriptionTimeRemaining,
501 RepeatNotificationInterval, RepeatNotificationGap, and
502 RepeatNotificationCount properties in Subscription instances, the Owner
|
503 carolann.graves 1.74 property in Handler instances, and the PortNumber, SNMPSecurityName,
|
504 kumpf 1.56 and SNMPEngineID properties in SNMP Mapper Handler instances.
505
|
506 carolann.graves 1.69 Note: currently all properties validated by this function are non-array
507 properties. To use this function in the future with both array and
|
508 carolann.graves 1.74 non-array properties, a Boolean isArray parameter would need to be
|
509 carolann.graves 1.69 added.
510
|
511 kumpf 1.56 @param instance instance to be validated
512 @param propertyName name of property to be validated
513 @param expectedType expected CIMType for property
|
514 yi.zhou 1.75 @param isArray indicates whether the validated
515 property is array
|
516 kumpf 1.56
|
517 carolann.graves 1.73 @exception CIM_ERR_INVALID_PARAMETER if property exists and is not
518 null but is not of the correct
519 type
|
520 kumpf 1.56 */
|
521 kumpf 1.82 void _checkProperty(
522 CIMInstance& instance,
523 const CIMName& propertyName,
|
524 yi.zhou 1.75 const CIMType expectedType,
525 const Boolean isArray = false);
|
526 kumpf 1.15
527 /**
|
528 carolann.graves 1.76 Validates that all properties in the instance are supported properties,
529 and throws an exception if an unknown, unsupported property is found.
530
531 @param instance instance to be validated
532
533 @exception CIM_ERR_NOT_SUPPORTED if instance includes an unknown,
534 unsupported property
535 */
|
536 kumpf 1.82 void _checkSupportedProperties(
537 const CIMInstance& instance);
|
538 carolann.graves 1.76
539 /**
|
540 kumpf 1.82 Validates value of the specified Uint16 property in the instance.
541 If the value of the property is not a valid value, or is not a
|
542 yi.zhou 1.77 supported value, an exception is thrown.
543
544 @param instance instance to be validated
545 @param propertyName name of property to be validated
546 @param validValues set of valid values for property
547 @param supportedValues set of supported values for property
|
548 kumpf 1.82
549 @exception CIM_ERR_NOT_SUPPORTED if the property value is not
|
550 yi.zhou 1.77 supported
|
551 kumpf 1.82 CIM_ERR_INVALID_PARAMETER if the property value is not
|
552 yi.zhou 1.77 valid
553 */
|
554 kumpf 1.82 void _checkValue(
555 const CIMInstance& instance,
556 const CIMName& propertyName,
557 const Array<Uint16>& validValues,
558 const Array<Uint16>& supportedValues);
|
559 yi.zhou 1.77
560 /**
|
561 kumpf 1.10 Determines if the user is authorized to modify the instance, and if the
|
562 carolann.graves 1.74 specified modification is supported. Currently, the only modification
563 supported is of the Subscription State property of the Subscription
|
564 kumpf 1.10 class.
|
565 kumpf 1.5
566 @param request modification request
567 @param instance instance to be modified
|
568 kumpf 1.37 @param modifiedInstance modified instance
|
569 kumpf 1.5
|
570 carolann.graves 1.73 @exception CIM_ERR_NOT_SUPPORTED if the specified modification is
571 not supported
572 @exception CIM_ERR_ACCESS_DENIED if the user is not authorized to
573 modify the instance
574 @exception CIM_ERR_INVALID_PARAMETER if the modifiedInstance is
575 invalid
|
576 kumpf 1.5
|
577 kumpf 1.54 @return True, if the instance can be modified;
|
578 kumpf 1.10 Otherwise throws an exception
|
579 kumpf 1.5 */
|
580 kumpf 1.82 Boolean _canModify(
581 const CIMModifyInstanceRequestMessage* request,
582 const CIMObjectPath& instanceReference,
583 const CIMInstance& instance,
584 CIMInstance& modifiedInstance);
|
585 kumpf 1.5
586 /**
|
587 carolann.graves 1.74 Determines if the user is authorized to delete the instance, and if it
588 is legal to delete the instance. If authorized, Subscription instances
589 may always be deleted. Filter and non-transient Handler instances may
590 only be deleted if they are not being referenced by any Subscription
591 instances. If the instance to be deleted is a transient Handler, any
|
592 kumpf 1.10 referencing Subscriptions are also deleted.
|
593 kumpf 1.5
594 @param instanceReference reference for instance to be deleted
595 @param nameSpace namespace for instance to be deleted
|
596 kumpf 1.10 @param currentUser current user
597
|
598 carolann.graves 1.73 @exception CIM_ERR_ACCESS_DENIED if the user is not authorized to
599 delete the instance
600 @exception CIM_ERR_FAILED if the instance to be deleted is
601 referenced by a subscription
|
602 kumpf 1.5
|
603 kumpf 1.54 @return True, if the instance can be deleted;
|
604 kumpf 1.10 Otherwise throws an exception
|
605 kumpf 1.1 */
|
606 kumpf 1.82 Boolean _canDelete(
607 const CIMObjectPath& instanceReference,
608 const CIMNamespaceName& nameSpace,
609 const String& currentUser);
|
610 kumpf 1.1
611 /**
612 Retrieves list of enabled subscription instances in all namespaces,
613 where the subscription indication class matches or is a superclass
|
614 kumpf 1.10 of the supported class, and the properties required to process the
615 subscription are all contained in the list of supported properties.
|
616 carolann.graves 1.74 If the checkProvider parameter value is True, a subscription is only
617 included in the list returned if the specified provider accepted the
618 subscription. If the checkProvider parameter value is False, the
|
619 kumpf 1.42 provider parameter is not used (ignored).
|
620 kumpf 1.1
|
621 kumpf 1.10 @param supportedClass the supported class
622 @param nameSpaces the list of supported namespaces
623 @param supportedProperties the list of supported properties
|
624 kumpf 1.42 @param checkProvider indicates whether provider acceptance is
625 checked
626 @param provider the provider (used if checkProvider True)
|
627 kumpf 1.1
|
628 kumpf 1.26 @return list of CIMInstance subscriptions
|
629 kumpf 1.1 */
|
630 kumpf 1.82 Array<CIMInstance> _getMatchingSubscriptions(
631 const CIMName& supportedClass,
632 const Array<CIMNamespaceName> nameSpaces,
633 const CIMPropertyList& supportedProperties,
|
634 kumpf 1.43 const Boolean checkProvider = false,
|
635 kumpf 1.82 const CIMInstance& provider = CIMInstance());
|
636 kumpf 1.1
637 /**
638 Retrieves lists of enabled subscription instances in all namespaces
639 that are either newly supported or previously supported, based on the
|
640 kumpf 1.9 supported class, the supported namespaces before and after modification,
|
641 carolann.graves 1.74 and the supported properties before and after modification. For
642 subscriptions based on the supported class, the newSubscriptions list
643 returned contains the subscriptions for which the properties required
644 to process the subscription are all contained in the new list of
645 supported properties, but are not all contained in the old list of
|
646 kumpf 1.9 supported properties, and/or the filter source namespace is contained in
|
647 carolann.graves 1.74 the new list if supported namespaces, but is not contained in the old
648 list of supported namespaces. The formerSubscriptions list returned
|
649 kumpf 1.9 contains the subscriptions for which the properties required to process
|
650 carolann.graves 1.74 the subscription are not all contained in the new list of supported
651 properties, but are all contained in the old list of supported
652 properties, and/or the filter source namespace is not contained in the
653 new list if supported namespaces, but is contained in the old list of
|
654 kumpf 1.9 supported namespaces.
655
|
656 kumpf 1.10 @param supportedClass the supported class
|
657 kumpf 1.9 @param newNameSpaces namespaces supported after modification
658 @param oldNameSpaces namespaces supported before modification
659 @param newProperties properties supported after modification
660 @param oldProperties properties supported before modification
|
661 kumpf 1.1 @param newSubscriptions the list of newly supported subscriptions
662 @param formerSubscriptions the list of previously supported
663 subscriptions
664 */
|
665 kumpf 1.82 void _getModifiedSubscriptions(
666 const CIMName& supportedClass,
667 const Array<CIMNamespaceName>& newNameSpaces,
668 const Array<CIMNamespaceName>& oldNameSpaces,
669 const CIMPropertyList& newProperties,
670 const CIMPropertyList& oldProperties,
671 Array<CIMInstance>& newSubscriptions,
672 Array<CIMInstance>& formerSubscriptions);
|
673 kumpf 1.1
674 /**
|
675 kumpf 1.9 Determines if all of the required properties in the specified list
676 are contained in the specified list of supported properties.
677
678 @param requiredProperties the required properties
|
679 kumpf 1.10 @param supportedProperties the supported properties
|
680 kumpf 1.9
|
681 kumpf 1.54 @return true, if all required properties are supported;
|
682 kumpf 1.9 false otherwise
683 */
|
684 kumpf 1.82 Boolean _inPropertyList(
685 const CIMPropertyList& requiredProperties,
686 const CIMPropertyList& supportedProperties);
|
687 kumpf 1.9
688 /**
|
689 chuck 1.64 Builds a QueryExpression from the filter query string,
690 the query language name, and the namespace in which the query
691 is to be run.
|
692 kumpf 1.1
693 @param filterQuery the filter query string
|
694 chuck 1.64 @param queryLanguage the query language name
695 @param ns query namespace
|
696 kumpf 1.1
|
697 chuck 1.64 @return QueryExpression representing the filter query
|
698 kumpf 1.1 */
|
699 kumpf 1.82 QueryExpression _getQueryExpression(
700 const String& filterQuery,
701 const String& queryLanguage,
702 const CIMNamespaceName& ns) const;
|
703 kumpf 1.1
704 /**
|
705 chuck 1.64 Extracts the indication class name from the specified query expression
706 (WQL or CQL), and validates that the name represents a subclass of the
|
707 kumpf 1.1 Indication class.
708
|
709 chuck 1.64 @param queryExpression the query expression
|
710 kumpf 1.1 @param nameSpaceName the namespace
711
712 @return String containing the indication class name
713 */
|
714 kumpf 1.82 CIMName _getIndicationClassName(
715 const QueryExpression& queryExpression,
716 const CIMNamespaceName& nameSpaceName) const;
|
717 kumpf 1.15
718 /**
|
719 kumpf 1.1 Retrieves the list of indication providers that serve the specified
720 indication subclasses.
721
|
722 chuck 1.64 @param queryExpression the query expression
723 @param nameSpace the namespace name
|
724 kumpf 1.1 @param indicationClassName the indication class name
725 @param indicationSubclasses the list of indication subclass names
726
727 @return list of ProviderClassList structs
728 */
|
729 kumpf 1.82 Array<ProviderClassList> _getIndicationProviders(
730 const QueryExpression& queryExpression,
731 const CIMNamespaceName& nameSpace,
732 const CIMName& indicationClassName,
733 const Array<CIMName>& indicationSubclasses) const;
|
734 kumpf 1.1
735 /**
|
736 carolann.graves 1.74 Retrieves the list of required properties (all the properties
737 referenced in the WHERE clause) for the specified filter query
|
738 carolann.graves 1.72 expression.
|
739 kumpf 1.1
|
740 chuck 1.64 @param queryExpression the query expression
|
741 kumpf 1.22 @param nameSpaceName the namespace
|
742 chuck 1.64 @param indicationClassName the indication class name
|
743 kumpf 1.1
|
744 carolann.graves 1.74 @return CIMPropertyList of required properties for the filter query
|
745 chuck 1.64 expression
|
746 kumpf 1.1 */
|
747 kumpf 1.82 CIMPropertyList _getPropertyList(
748 const QueryExpression& queryExpression,
749 const CIMNamespaceName& nameSpaceName,
750 const CIMName& indicationClassName) const;
|
751 kumpf 1.22
752 /**
|
753 carolann.graves 1.74 Checks if the property list includes all properties in the specified
|
754 kumpf 1.22 class. If so, a NULL CIMPropertyList is returned. Otherwise, a
|
755 carolann.graves 1.74 CIMPropertyList containing the properties is returned. The list of
756 property names in the specified indication class is also returned in
757 the indicationClassProperties parameter.
|
758 carolann.graves 1.60
759 @param propertyList the list of property names
760 @param nameSpaceName the namespace
761 @param indicationClassName the indication class name
762 @param indicationClassProperties the list of property names in the
763 specified indication class
|
764 kumpf 1.22
|
765 carolann.graves 1.74 @return CIMPropertyList of properties referenced by the filter query
|
766 kumpf 1.22 select statement
767 */
|
768 kumpf 1.82 CIMPropertyList _checkPropertyList(
769 const Array<CIMName>& propertyList,
770 const CIMNamespaceName& nameSpaceName,
771 const CIMName& indicationClassName,
772 Array<CIMName>& indicationClassProperties) const;
|
773 kumpf 1.1
774 /**
775 Extracts the condition (WHERE Clause) from the specified filter query
776 string.
777
778 @param filterQuery the filter query
779
780 @return String containing the filter query condition
781 */
|
782 kumpf 1.82 String _getCondition(
783 const String& filterQuery) const;
|
784 kumpf 1.1
785 /**
|
786 carolann.graves 1.74 Deletes subscriptions referencing the specified handler. All namespaces
787 are searched for subscriptions that reference the handler to be deleted.
|
788 kumpf 1.4
|
789 carolann.graves 1.74 @param nameSpace the name space of the handler being
790 deleted
|
791 kumpf 1.4 @param referenceProperty the name of the reference property in the
792 subscription instance
793 @param handler the handler reference
794 */
|
795 kumpf 1.82 void _deleteReferencingSubscriptions(
796 const CIMNamespaceName& nameSpace,
797 const CIMName& referenceProperty,
798 const CIMObjectPath& handler);
|
799 kumpf 1.4
800 /**
801 Determines if specified Subscription has expired
802
803 NOTE: It is assumed that the instance passed to this function is a
804 Subscription instance, and that the Subscription Duration and
805 Start Time properties exist
806
807 @param instance the subscription instance
808
|
809 kumpf 1.54 @return True, if the Subscription has expired;
|
810 kumpf 1.4 False otherwise
811 */
|
812 kumpf 1.82 Boolean _isExpired(
813 const CIMInstance& instance) const;
|
814 kumpf 1.4
815 /**
|
816 carolann.graves 1.74 Deletes specified subscription
|
817 kumpf 1.5
818 @param subscription the subscription reference
819 */
|
820 kumpf 1.82 void _deleteExpiredSubscription(
821 CIMObjectPath& subscription);
|
822 kumpf 1.21
823 /**
824 Gets the Subscription Time Remaining property
825
|
826 carolann.graves 1.74 Calculates time remaining from Subscription Start Time, Subscription
|
827 kumpf 1.21 Duration, and current date time. If the subscription has a non-null
|
828 carolann.graves 1.74 Duration, the Time Remaining is set, and True is returned. If the
829 subscription does not have a non-null Duration, it has no expiration
830 date, and the time remaining is unlimited. In this case, the Time
|
831 kumpf 1.21 Remaining is not set and False is returned.
|
832 carolann.graves 1.74
|
833 kumpf 1.21 NOTE: It is assumed that the instance passed to this function is a
|
834 carolann.graves 1.74 Subscription instance, and that the Start Time property exists and
|
835 kumpf 1.21 has a value
836
837 @param instance Input the subscription instance
838 @param timeRemaining Output the time remaining (seconds)
839
|
840 kumpf 1.54 @return True, if the subscription has a non-null Duration;
|
841 kumpf 1.21 False otherwise
842 */
|
843 kumpf 1.82 Boolean _getTimeRemaining(
844 const CIMInstance& instance,
845 Uint64& timeRemaining) const;
|
846 kumpf 1.5
847 /**
|
848 kumpf 1.4 Sets the Subscription Time Remaining property
849
|
850 carolann.graves 1.74 Calculates time remaining from Subscription Start Time, Subscription
|
851 kumpf 1.4 Duration, and current date time
|
852 carolann.graves 1.74
|
853 kumpf 1.4 NOTE: It is assumed that the instance passed to this function is a
854 Subscription instance, and that the Subscription Duration and
855 Start Time properties exist
856
857 @param instance the subscription instance
858 */
|
859 kumpf 1.82 void _setTimeRemaining(CIMInstance& instance);
|
860 kumpf 1.4
861 /**
|
862 kumpf 1.23 Gets the parameter values required to Create or Modify the subscription
|
863 kumpf 1.10 request.
|
864 carolann.graves 1.74 If no indication providers are found, condition and queryLanguage are
|
865 kumpf 1.3 set to empty string.
866
|
867 kumpf 1.33 @param subscriptionInstance Input subscription instance
|
868 carolann.graves 1.74 @param indicationSubclasses Output list of subclasses of indication
|
869 kumpf 1.33 class in filter query
|
870 kumpf 1.3 @param indicationProviders Output list of providers with associated
871 classes
872 @param propertyList Output list of properties required by the
873 subscription
|
874 kumpf 1.17 @param sourceNameSpace Output source namespace for filter query
|
875 kumpf 1.3 @param condition Output condition part of the filter query
|
876 kumpf 1.58 @param query Output filter query
|
877 kumpf 1.3 @param queryLanguage Output query language in which the filter
878 query is expressed
879 */
|
880 kumpf 1.82 void _getCreateParams(
881 const CIMInstance& subscriptionInstance,
882 Array<CIMName>& indicationSubclasses,
883 Array<ProviderClassList>& indicationProviders,
884 CIMPropertyList& propertyList,
885 CIMNamespaceName& sourceNameSpace,
886 String& condition,
887 String& query,
888 String& queryLanguage);
|
889 kumpf 1.10
890 /**
|
891 kumpf 1.23 Gets the parameter values required to Create or Modify the subscription
|
892 kumpf 1.10 request.
893
|
894 kumpf 1.33 @param subscriptionInstance Input subscription instance
|
895 carolann.graves 1.74 @param indicationSubclasses Output list of subclasses of indication
|
896 kumpf 1.33 class in filter query
|
897 kumpf 1.10 @param propertyList Output list of properties required by the
898 subscription
|
899 kumpf 1.17 @param sourceNameSpace Output source namespace for filter query
|
900 kumpf 1.10 @param condition Output condition part of the filter query
|
901 kumpf 1.58 @param query Output filter query
|
902 kumpf 1.10 @param queryLanguage Output query language in which the filter
903 query is expressed
904 */
|
905 kumpf 1.82 void _getCreateParams(
906 const CIMInstance& subscriptionInstance,
907 Array<CIMName>& indicationSubclasses,
908 CIMPropertyList& propertyList,
909 CIMNamespaceName& sourceNameSpace,
910 String& condition,
911 String& query,
912 String& queryLanguage);
|
913 kumpf 1.3
914 /**
|
915 kumpf 1.23 Gets the parameter values required to Delete the subscription request.
|
916 kumpf 1.5
|
917 kumpf 1.33 @param subscriptionInstance Input subscription instance
|
918 carolann.graves 1.74 @param indicationSubclasses Output list of subclasses of indication
|
919 kumpf 1.33 class in filter query
920 @param sourceNameSpace Output source namespace for filter query
|
921 kumpf 1.5
|
922 kumpf 1.23 @return List of providers with associated classes to Delete
|
923 kumpf 1.5 */
|
924 kumpf 1.82 Array<ProviderClassList> _getDeleteParams(
925 const CIMInstance& subscriptionInstance,
926 Array<CIMName>& indicationSubclasses,
927 CIMNamespaceName& sourceNameSpace);
|
928 mday 1.13
|
929 kumpf 1.5 /**
|
930 kumpf 1.23 Sends Create subscription request for the specified subscription
|
931 carolann.graves 1.68 to each provider in the list. The requests are sent using SendAsync,
|
932 carolann.graves 1.74 and the responses are aggregated in the callback methods. Create
933 Subscription requests are sent to the indication providers using
934 SendAsync in the following cases: (1) on creation of an enabled
|
935 venkat.puvvada 1.91 subscription instance, (2) on modification of a subscription
936 instance, when the state changes to enabled and (3) on initialization,
937 for each enabled subscription retrieved from the repository if timeout
938 is specified. In cases (1) and (2), there is an original Create Instance
939 or Modify Instance request to which the Indication Service must respond.
940 In case (3), there is no original request and no response is required.
|
941 kumpf 1.1
942 @param indicationProviders list of providers with associated classes
|
943 kumpf 1.54 @param nameSpace the nameSpace name of the resource being
|
944 carolann.graves 1.74 monitored, from the SourceNamespace
945 property of the CIM_IndicationFilter
946 instance for the specified
|
947 kumpf 1.54 subscription
|
948 kumpf 1.1 @param propertyList the properties referenced by the
949 subscription
950 @param condition the condition part of the filter query
|
951 kumpf 1.58 @param query the filter query
|
952 kumpf 1.1 @param queryLanguage the query language in which the filter
953 query is expressed
|
954 kumpf 1.23 @param subscription the subscription to be created
|
955 chuck 1.35 @param acceptLangs the language of the response, and
956 future indications
957 @param contentLangs the language of the subscription
|
958 carolann.graves 1.71 @param origRequest the original request (Create
|
959 carolann.graves 1.68 Instance, Modify Instance)
|
960 carolann.graves 1.74 @param indicationSubclasses the indication subclasses for the
|
961 kumpf 1.41 subscription
|
962 kumpf 1.9 @param userName the userName for authentication
963 @param authType the authentication type
964
|
965 kumpf 1.1 */
|
966 kumpf 1.82 void _sendAsyncCreateRequests(
967 const Array<ProviderClassList>& indicationProviders,
968 const CIMNamespaceName& nameSpace,
969 const CIMPropertyList& propertyList,
970 const String& condition,
971 const String& query,
972 const String& queryLanguage,
973 const CIMInstance& subscription,
974 const AcceptLanguageList& acceptLangs,
975 const ContentLanguageList& contentLangs,
|
976 kumpf 1.41 const CIMRequestMessage * origRequest,
|
977 kumpf 1.82 const Array<CIMName>& indicationSubclasses,
978 const String& userName,
979 const String& authType = String::EMPTY);
|
980 mday 1.13
|
981 kumpf 1.1 /**
|
982 carolann.graves 1.68 Sends Create subscription request for the specified subscription
983 to each provider in the list. The requests are sent using SendWait,
984 so no callback methods are required. Create Subscription requests are
985 sent to the indication providers using SendWait in the following cases:
|
986 carolann.graves 1.74 (1) on notification of a provider registration change newly enabling
987 the provider to serve the subscription, (2) on notification that a
988 provider has been enabled and may now serve the subscription, and
|
989 carolann.graves 1.71 (3) on initialization, for each enabled subscription retrieved from the
990 repository. In cases (1) and (2), there is an original Notify Provider
|
991 carolann.graves 1.74 Registration or Notify Provider Enable request to which the Indication
|
992 carolann.graves 1.71 Service must respond. In case (3), there is no original request and no
993 response is required.
|
994 carolann.graves 1.68
995 @param indicationProviders list of providers with associated classes
996 @param nameSpace the nameSpace name of the resource being
997 monitored, from the SourceNamespace
998 property of the CIM_IndicationFilter
999 instance for the specified
1000 subscription
1001 @param propertyList the properties referenced by the
1002 subscription
1003 @param condition the condition part of the filter query
1004 @param query the filter query
1005 @param queryLanguage the query language in which the filter
1006 query is expressed
1007 @param subscription the subscription to be created
1008 @param acceptLangs the language of the response, and
1009 future indications
1010 @param contentLangs the language of the subscription
1011 @param userName the userName for authentication
1012 @param authType the authentication type
1013
|
1014 carolann.graves 1.71 @return List of providers that accepted subscription
|
1015 carolann.graves 1.68 */
|
1016 kumpf 1.82 Array<ProviderClassList> _sendWaitCreateRequests(
1017 const Array<ProviderClassList>& indicationProviders,
1018 const CIMNamespaceName& nameSpace,
1019 const CIMPropertyList& propertyList,
1020 const String& condition,
1021 const String& query,
1022 const String& queryLanguage,
1023 const CIMInstance& subscription,
1024 const AcceptLanguageList& acceptLangs,
1025 const ContentLanguageList& contentLangs,
1026 const String& userName,
1027 const String& authType = String::EMPTY);
|
1028 carolann.graves 1.68
1029 /**
|
1030 kumpf 1.23 Sends Modify subscription request for the specified subscription
|
1031 carolann.graves 1.68 to each provider in the list. The requests are sent using SendWait,
1032 so no callback methods are required. Modify Subscription requests must
|
1033 carolann.graves 1.74 be sent to the indication providers on notification of a provider
1034 registration change, when the provider was formerly serving the
1035 subscription, and is still serving the subscription, in the following
1036 cases: (1) the provider is newly serving an additional indication
|
1037 carolann.graves 1.68 subclass specified by the subscription, or (2) the provider is
|
1038 carolann.graves 1.74 no longer serving an indication subclass specified by the subscription
|
1039 kumpf 1.41 (but is still serving at least one of the indication subclasses).
|
1040 carolann.graves 1.68 In cases (1) and (2), there is an original Notify Provider Registration
1041 request to which the Indication Service must respond.
|
1042 kumpf 1.1
1043 @param indicationProviders list of providers with associated classes
|
1044 kumpf 1.54 @param nameSpace the nameSpace name of the resource being
1045 monitored, from the SourceNamespace
1046 property of the CIM_IndicationFilter
|
1047 carolann.graves 1.74 instance for the specified
1048 subscription
|
1049 kumpf 1.1 @param propertyList the properties referenced by the
1050 subscription
1051 @param condition the condition part of the filter query
|
1052 kumpf 1.58 @param query the filter query
|
1053 kumpf 1.1 @param queryLanguage the query language in which the filter
1054 query is expressed
1055 @param subscription the subscription to be modified
|
1056 chuck 1.35 @param acceptLangs the language of the response, and
1057 future indications
|
1058 carolann.graves 1.74 @param contentLangs the language of the subscription
|
1059 kumpf 1.9 @param userName the userName for authentication
1060 @param authType the authentication type
|
1061 kumpf 1.1 */
|
1062 kumpf 1.82 void _sendWaitModifyRequests(
1063 const Array<ProviderClassList>& indicationProviders,
1064 const CIMNamespaceName& nameSpace,
1065 const CIMPropertyList& propertyList,
1066 const String& condition,
1067 const String& query,
1068 const String& queryLanguage,
1069 const CIMInstance& subscription,
1070 const AcceptLanguageList& acceptLangs,
1071 const ContentLanguageList& contentLangs,
1072 const String& userName,
1073 const String& authType = String::EMPTY);
|
1074 kumpf 1.1
1075 /**
|
1076 kumpf 1.23 Sends Delete subscription request for the specified subscription
|
1077 carolann.graves 1.68 to each provider in the list. The requests are sent using SendAsync,
|
1078 carolann.graves 1.74 and the responses are aggregated in the callback methods. Delete
1079 Subscription requests are sent to the indication providers using
1080 SendAsync in the following cases: (1) on deletion of an enabled
1081 subscription instance, (2) on modification of a subscription instance,
1082 when the state changes to disabled, (3) on deletion of an expired
|
1083 venkat.puvvada 1.91 subscription, (4) on deletion of a subscription referencing a
1084 deleted transient handler and (5) when indication service is disabled
1085 dynamically. In cases (1) and (2), there is an original
|
1086 carolann.graves 1.74 Delete Instance or Modify Instance request to which the Indication
|
1087 venkat.puvvada 1.91 Service must respond. In cases (3), (4) and (5) , there is no
1088 orginal request and no response is required.
|
1089 kumpf 1.1
1090 @param indicationProviders list of providers with associated classes
|
1091 carolann.graves 1.74 @param nameSpace the nameSpace name of the resource being
|
1092 kumpf 1.54 monitored, from the SourceNamespace
1093 property of the CIM_IndicationFilter
|
1094 carolann.graves 1.74 instance for the specified
1095 subscription
|
1096 kumpf 1.1 @param subscription the subscription to be modified
|
1097 chuck 1.35 @param acceptLangs the language of the response
|
1098 carolann.graves 1.74 @param contentLangs the language of the subscription
1099 @param origRequest the original request (Delete Instance,
|
1100 carolann.graves 1.68 Modify Instance)
|
1101 carolann.graves 1.74 @param indicationSubclasses the indication subclasses for the
|
1102 kumpf 1.41 subscription
|
1103 kumpf 1.9 @param userName the userName for authentication
1104 @param authType the authentication type
|
1105 kumpf 1.1 */
|
1106 kumpf 1.82 void _sendAsyncDeleteRequests(
1107 const Array<ProviderClassList>& indicationProviders,
1108 const CIMNamespaceName& nameSpace,
1109 const CIMInstance& subscription,
1110 const AcceptLanguageList& acceptLangs,
1111 const ContentLanguageList& contentLangs,
|
1112 kumpf 1.41 const CIMRequestMessage * origRequest,
|
1113 kumpf 1.82 const Array<CIMName>& indicationSubclasses,
1114 const String& userName,
1115 const String& authType = String::EMPTY);
|
1116 kumpf 1.1
1117 /**
|
1118 carolann.graves 1.68 Sends Delete subscription request for the specified subscription
1119 to each provider in the list. The requests are sent using SendWait,
1120 so no callback methods are required. Delete Subscription requests are
|
1121 carolann.graves 1.74 sent to the indication providers using SendWait in the following case:
1122 (1) on notification of a provider registration change newly preventing
1123 the provider from serving the subscription. In case (1), there is an
1124 original Notify Provider Registration request to which the Indication
1125 Service must respond.
|
1126 carolann.graves 1.68
1127 @param indicationProviders list of providers with associated classes
1128 @param nameSpace the nameSpace name of the resource being
1129 monitored, from the SourceNamespace
1130 property of the CIM_IndicationFilter
1131 instance for the specified
1132 subscription
1133 @param subscription the subscription to be modified
1134 @param acceptLangs the language of the response
1135 @param contentLangs the language of the subscription
1136 @param userName the userName for authentication
1137 @param authType the authentication type
1138 */
|
1139 kumpf 1.82 void _sendWaitDeleteRequests(
1140 const Array<ProviderClassList>& indicationProviders,
1141 const CIMNamespaceName& nameSpace,
1142 const CIMInstance& subscription,
1143 const AcceptLanguageList& acceptLangs,
1144 const ContentLanguageList& contentLangs,
1145 const String& userName,
1146 const String& authType = String::EMPTY);
|
1147 carolann.graves 1.68
1148 /**
|
1149 kumpf 1.41 Collects responses from providers for aggregation as they are received,
|
1150 carolann.graves 1.74 and stores them in the IndicationOperationAggregate instance. Calls
1151 _handleOperationResponseAggregation to process the responses, once all
|
1152 kumpf 1.41 expected responses have been received.
1153
|
1154 kumpf 1.57 @param operation shared data structure that controls message
|
1155 kumpf 1.41 processing
1156 @param destination target queue of completion callback
1157 @param userParameter user parameter for callback processing
1158 */
|
1159 kumpf 1.82 static void _aggregationCallBack(
|
1160 kumpf 1.41 AsyncOpNode * operation,
1161 MessageQueue * destination,
1162 void * userParameter);
1163
1164 /**
|
1165 carolann.graves 1.74 Calls the appropriate function to processes responses from providers,
|
1166 kumpf 1.41 based on the type of request sent to providers, once all responses have
|
1167 carolann.graves 1.74 been received.
|
1168 kumpf 1.41
|
1169 carolann.graves 1.74 @param operationAggregate the operation aggregate instance
|
1170 kumpf 1.41 */
|
1171 kumpf 1.82 void _handleOperationResponseAggregation(
|
1172 kumpf 1.41 IndicationOperationAggregate * operationAggregate);
1173
1174 /**
|
1175 carolann.graves 1.74 Processes create subscription responses from providers, once all have
1176 been received. Takes the appropriate action, based on the type of the
1177 original request, if any, and the responses received. Sends the
|
1178 kumpf 1.41 response to the original request, if required.
1179
|
1180 carolann.graves 1.74 @param operationAggregate the operation aggregate instance
|
1181 kumpf 1.41 */
|
1182 kumpf 1.82 void _handleCreateResponseAggregation(
|
1183 kumpf 1.41 IndicationOperationAggregate * operationAggregate);
1184
1185 /**
|
1186 carolann.graves 1.74 Processes modify subscription responses from providers, once all have
|
1187 kumpf 1.41 been received. Updates the subscription hash tables.
1188
|
1189 carolann.graves 1.74 @param operationAggregate the operation aggregate instance
|
1190 kumpf 1.41 */
|
1191 kumpf 1.82 void _handleModifyResponseAggregation(
|
1192 kumpf 1.41 IndicationOperationAggregate * operationAggregate);
1193
1194 /**
|
1195 carolann.graves 1.74 Processes delete subscription responses from providers, once all have
1196 been received. Updates the subscription hash tables appropriately,
1197 based on the type of the original request, if any. Sends the response
|
1198 kumpf 1.41 to the original request, if required.
1199
|
1200 carolann.graves 1.74 @param operationAggregate the operation aggregate instance
|
1201 kumpf 1.41 */
|
1202 kumpf 1.82 void _handleDeleteResponseAggregation(
|
1203 kumpf 1.41 IndicationOperationAggregate * operationAggregate);
1204
1205 /**
|
1206 kumpf 1.1 Creates an alert instance of the specified class.
1207
1208 @param alertClassName the alert class name
|
1209 kumpf 1.7 @param subscriptions subscriptions for which alert is to be
|
1210 kumpf 1.1 created
1211
1212 @return the created alert instance
1213 */
|
1214 kumpf 1.82 CIMInstance _createAlertInstance(
1215 const CIMName& alertClassName,
1216 const Array<CIMInstance>& subscriptions);
|
1217 mday 1.14
|
1218 kumpf 1.40 #if 0
|
1219 kumpf 1.82 /**
1220 Asynchronous completion routine for _sendAlerts
1221 */
1222
1223 static void _sendAlertsCallBack(
1224 AsyncOpNode* operation,
1225 MessageQueue* callback_destination,
1226 void* parameter);
|
1227 kumpf 1.1
1228 /**
1229 Sends specified alert to each unique handler instance for the
1230 specified subscriptions in the list.
1231
|
1232 kumpf 1.7 @param subscriptions subscriptions for which alert is to be
|
1233 kumpf 1.1 sent
1234 @param alertInstance the alert to be sent
1235 */
|
1236 kumpf 1.82 void _sendAlerts(
1237 const Array<CIMInstance>& subscriptions,
1238 /* const */ CIMInstance& alertInstance);
|
1239 kumpf 1.40 #endif
|
1240 carolann.graves 1.74
|
1241 kumpf 1.16 /**
|
1242 kumpf 1.37 Gets the value of the Creator property from the specified Subscription
|
1243 carolann.graves 1.74 instance. If this function returns False, the value of the creator
|
1244 kumpf 1.37 parameter is unchanged.
1245
1246 @param instance subscription instance
1247 @param creator value of Creator property if retrieved
1248
|
1249 kumpf 1.54 @return True, if the value of the Creator property was retrieved;
|
1250 kumpf 1.37 False if Creator property was missing, null, or of an
|
1251 kumpf 1.54 incorrect type
|
1252 kumpf 1.37 */
|
1253 kumpf 1.82 Boolean _getCreator(
1254 const CIMInstance& instance,
1255 String& creator) const;
|
1256 kumpf 1.37
1257 /**
|
1258 kumpf 1.54 Validates the specified SubscriptionState property value.
|
1259 kumpf 1.37
|
1260 kumpf 1.54 @param state SubscriptionState property value
|
1261 kumpf 1.37
|
1262 kumpf 1.54 @return True, if the SubscriptionState property value is valid;
1263 False otherwise
|
1264 kumpf 1.37 */
|
1265 kumpf 1.82 Boolean _validateState(
|
1266 kumpf 1.54 const Uint16 state) const;
|
1267 kumpf 1.37
|
1268 kumpf 1.46 /**
1269 This function peforms an authorization test based on the
1270 value of the enableSubscriptionForNonprivilegedUsers.
1271
1272 @param userName String
1273
|
1274 carolann.graves 1.74 @return True, if authentication is not enabled or the
|
1275 kumpf 1.54 user is a privileged system user;
1276 False, if authentication is enabled and the
1277 user is not privileged
|
1278 kumpf 1.46 */
|
1279 kumpf 1.82 void _checkNonprivilegedAuthorization(
1280 const String& userName);
|
1281 kumpf 1.46
|
1282 kumpf 1.48 /**
|
1283 kumpf 1.49 Updates the propertyList, in preparation for calling the Repository.
|
1284 carolann.graves 1.74 If the propertyList is not null, the Creator property must be added to
1285 the list. Also, if the request is for the Subscription class, the
1286 value of the Time Remaining property need only be calculated if it is
1287 requested. In that case, the Subscription Duration and Start Time
1288 properties must be added to the list if not already there.
|
1289 kumpf 1.49
1290 @param className class name for the request
1291 @param propertyList list of properties requested
1292 @param setTimeRemaining indicates whether Time Remaining property
1293 was requested
1294 @param startTimeAdded indicates whether Start Time property was
1295 added to the list
1296 @param durationAdded indicates whether Duration property was
1297 added to the list
1298 */
|
1299 kumpf 1.82 void _updatePropertyList(
1300 CIMName& className,
1301 CIMPropertyList& propertyList,
1302 Boolean& setTimeRemaining,
1303 Boolean& startTimeAdded,
1304 Boolean& durationAdded);
|
1305 kumpf 1.49
1306 /**
|
1307 carolann.graves 1.74 Gets a String containing the comma-separated Subscription Filter Name
|
1308 kumpf 1.48 and Handler Name, for use in a log message to identify the subscription.
1309
1310 @param subscription subscription instance
1311
1312 @return String containing the comma-separated Subscription Filter Name
1313 and Handler Name
1314 */
|
1315 kumpf 1.82 String _getSubscriptionLogString(CIMInstance& subscription);
|
1316 kumpf 1.48
|
1317 yi.zhou 1.83 /**
|
1318 kumpf 1.89 Retrieves list of enabled subscription instances based on the class
|
1319 yi.zhou 1.83 name and namespace of the generated indication. If the subscription
|
1320 kumpf 1.89 matches the class name and namespace of the generated indication
1321 and the provider who generated this indication accepted this
|
1322 yi.zhou 1.83 subscription, the subscription is added to the initial subscriptions
|
1323 kumpf 1.89 list.
1324 If the indication provider included subscriptions in the
1325 SubscriptionInstanceNamesContainer, the subset of subscriptions
|
1326 yi.zhou 1.83 specified by the indication provider that also appear in the initial
1327 subscriptions list is returned.
|
1328 kumpf 1.89 Any subscription included by the provider but not containing in the
|
1329 yi.zhou 1.83 initial subscriptions list is ignored.
|
1330 kumpf 1.89
1331 @param providedSubscriptionNames Subscriptions specified by the
|
1332 yi.zhou 1.83 indication provider
|
1333 kumpf 1.89 @param className The generated indication class
1334 name
1335 @param nameSpace The generated indication namespace
1336 @param indicationProvider The provider which generated
1337 the indication
|
1338 yi.zhou 1.84 @param subscriptions Output Array of subscription
1339 instances
1340 @param subscriptionKeys Output Array of keys associated
1341 with the subscriptions
|
1342 yi.zhou 1.83 */
|
1343 yi.zhou 1.84 void _getRelevantSubscriptions(
|
1344 yi.zhou 1.83 const Array<CIMObjectPath> & providedSubscriptionNames,
1345 const CIMName& className,
|
1346 kumpf 1.89 const CIMNamespaceName& nameSpace,
|
1347 yi.zhou 1.84 const CIMInstance& indicationProvider,
1348 Array<CIMInstance>& subscriptions,
1349 Array<String>& subscriptionKeys);
|
1350 yi.zhou 1.83
1351 /**
1352 Evaluate if the specified subscription matches the indication based on:
1353 1) Whether the properties (in WHERE clause) from filter query are
1354 supported by the indication provider;
1355 2) Whether the subscripton is expired;
1356 3) Whether the filter criteria are met by the generated indication
1357
1358 @param subscription The subscription to be evaluated
1359 @param indication The generated indication
1360 @param supportedPropertyList The properties are supported by the
1361 indication provider
1362 @param queryExpr The query expression of the evaluated
|
1363 kumpf 1.89 subscription which is used for
|
1364 yi.zhou 1.83 indication evaluation
1365 @param sourceNameSpace The source namespace of the filter
1366 instance
1367
1368 @return True, if the subscription is met all above conditions;
1369 False otherwise
1370 */
1371 Boolean _subscriptionMatch(
1372 const CIMInstance& subscription,
1373 const CIMInstance& indication,
1374 const CIMPropertyList& supportedPropertyList,
1375 QueryExpression& queryExpr,
1376 const CIMNamespaceName sourceNameSpace);
1377
1378 /**
1379 Format the generated indication based on:
1380 1) Use QueryExpression::applyProjection to remove properties not
1381 listed in the SELECT clause;
|
1382 kumpf 1.89 2) Remove any properties that may be left on the indication
|
1383 yi.zhou 1.83 that are not in the indication class. These are properties
1384 added by the provider incorrectly.
|
1385 kumpf 1.89
1386 @param formattedindication The generated indication to
|
1387 yi.zhou 1.83 be formatted
|
1388 kumpf 1.89 @param queryExpr, The query expression of the
|
1389 yi.zhou 1.83 matched subscription needs to be
|
1390 kumpf 1.89 used for indication projection
1391 @param ProviderSupportedProperties The properties are supported by
|
1392 yi.zhou 1.83 the indication provider
|
1393 kumpf 1.89 @param indicationClassProperties The indication class properties
|
1394 yi.zhou 1.83
1395 @return True, if the indication is formatted;
1396 False otherwise
1397 */
1398 Boolean _formatIndication(
1399 CIMInstance& formattedIndication,
1400 QueryExpression& queryExpr,
1401 const Array<CIMName>& providerSupportedProperties,
1402 const Array<CIMName>& indicationClassProperties);
1403
1404 /**
1405 Forward the formatted indication to the handler
1406
|
1407 kumpf 1.89 @param matchedSubscription The matched subscription
|
1408 yi.zhou 1.83 @param handlerInstance The handler instance for the matched
|
1409 kumpf 1.89 subscription
1410 @param formattedIndication The formatted indication
1411 @param namespaceName The generated indication namespace
1412 @param operationContext The operation context
|
1413 yi.zhou 1.83 */
1414 void _forwardIndToHandler(
1415 const CIMInstance& matchedSubscription,
1416 const CIMInstance& handlerInstance,
1417 const CIMInstance& formattedIndication,
1418 const CIMNamespaceName& namespaceName,
|
1419 karl 1.97.2.1 const OperationContext& operationContext,
1420 DeliveryStatusAggregator *deliveryStatusAggregator);
|
1421 yi.zhou 1.83
|
1422 venkat.puvvada 1.91 /**
1423 Updates the subscription table with the information of the providers
1424 those accepted the subscription. This method is called during indication
1425 service initialization.
1426
1427 @param subscription The accepted subscription.
1428 @param acceptedProviders Subscription accepted providers list.
1429 @param indicationSubclasses The indication subclasses for the
1430 subscription
1431 @param sourceNameSpace The nameSpace name of the resource being
1432 monitored, from the SourceNamespace
1433 property of the CIM_IndicationFilter
1434 instance for the specified
1435 subscription
1436
1437 */
1438 void _updateAcceptedSubscription(
1439 CIMInstance &subscription,
1440 const Array<ProviderClassList> &acceptedProviders,
1441 const Array<CIMName> &indicationSubclasses,
1442 const CIMNamespaceName &sourceNameSpace);
1443 venkat.puvvada 1.91
|
1444 venkat.puvvada 1.95 void _deliverWaitingIndications();
1445 void _beginCreateSubscription(const CIMObjectPath &objPath);
1446 void _cancelCreateSubscription(const CIMObjectPath &objPath);
1447 void _commitCreateSubscription(const CIMObjectPath &objPath);
1448
|
1449 venkat.puvvada 1.91
1450 AutoPtr<SubscriptionRepository> _subscriptionRepository;
|
1451 kumpf 1.51
|
1452 venkat.puvvada 1.91 AutoPtr<SubscriptionTable> _subscriptionTable;
|
1453 kumpf 1.6
|
1454 yi.zhou 1.84 #ifdef PEGASUS_ENABLE_INDICATION_COUNT
1455 ProviderIndicationCountTable _providerIndicationCountTable;
1456 #endif
1457
|
1458 venkat.puvvada 1.85 #ifdef PEGASUS_ENABLE_DMTF_INDICATION_PROFILE_SUPPORT
|
1459 venkat.puvvada 1.91
1460 /**
1461 Holds the number of async requests pending with the service.
1462 */
1463 AtomicInt _asyncRequestsPending;
1464
1465 /**
1466 Holds the number of threads processing the indications.
1467 */
1468 AtomicInt _processIndicationThreads;
1469
1470 AutoPtr<IndicationServiceConfiguration> _indicationServiceConfiguration;
|
1471 venkat.puvvada 1.97 #else
1472 Uint32 _enabledState;
|
1473 venkat.puvvada 1.85 #endif
1474
|
1475 kumpf 1.8 /**
|
1476 venkat.puvvada 1.95 Indications waiting for completion of pending create subscription
1477 requests.
1478 */
1479 List<Message, Mutex> _deliveryWaitIndications;
1480
1481 /**
|
1482 kumpf 1.8 Handle to Provider Registration Manager
1483 */
1484 ProviderRegistrationManager * _providerRegManager;
|
1485 kumpf 1.5
|
1486 carolann.graves 1.74 /**
|
1487 chuck 1.64 Pointer to CIMRepository, for use in building QueryExpression.
1488 */
1489 CIMRepository* _cimRepository;
1490
|
1491 kumpf 1.5 /**
1492 Integer representing queue ID for accessing Provider Manager Service
1493 */
1494 Uint32 _providerManager;
1495
1496 /**
1497 Integer representing queue ID for accessing Handler Manager Service
1498 */
1499 Uint32 _handlerService;
1500
1501 /**
|
1502 karl 1.97.2.1 Integer representing queue ID for accessing Module Controller
1503 */
1504 Uint32 _moduleController;
1505
1506 /**
|
1507 kumpf 1.46 Boolean indicating that the CIM Server has been configured to
1508 allow non-privileged users read and write access to the
1509 Subscription classes.
1510 */
1511 Boolean _enableSubscriptionsForNonprivilegedUsers;
1512
|
1513 kumpf 1.55 /**
|
1514 carolann.graves 1.80 Boolean indicating whether authentication is currently enabled in the
1515 CIM Server.
1516 */
1517 Boolean _authenticationEnabled;
1518
1519 /**
|
1520 kumpf 1.82 Gets the indication class specified by the subscription filter query.
|
1521 yi.zhou 1.66
|
1522 kumpf 1.82 @param instance the subscription instance
|
1523 yi.zhou 1.66
|
1524 kumpf 1.82 @return CIMClass object for the indication class
|
1525 yi.zhou 1.66 */
|
1526 kumpf 1.82 CIMClass _getIndicationClass(const CIMInstance& instance);
|
1527 yi.zhou 1.66
|
1528 karl 1.97.2.1 void _buildInternalControlProvidersRegistration();
1529
1530 Array<ProviderClassList> _getInternalIndProviders(
1531 const CIMNamespaceName& nameSpace,
1532 const Array<CIMName>& indicationSubclasses) const;
1533
|
1534 yi.zhou 1.66 /**
|
1535 kumpf 1.55 Arrays of valid and supported property values
1536
|
1537 carolann.graves 1.74 Notes:
|
1538 kumpf 1.55 Valid values are defined by the CIM Event Schema MOF
1539 Supported values are a subset of the valid values
1540 Some valid values, as defined in the MOF, are not currently supported
1541 by the Pegasus IndicationService
1542
|
1543 carolann.graves 1.74 Supported Values
|
1544 kumpf 1.55 SubscriptionState: Enabled, Disabled
1545 RepeatNotificationPolicy: Unknown, Other, None, Suppress, Delay
1546 OnFatalErrorPolicy: Ignore, Disable, Remove
1547 PersistenceType: Permanent, Transient
|
1548 yi.zhou 1.77 SNMPVersion: SNMPv1 Trap, SNMPv2C Trap
|
1549 kumpf 1.55 */
|
1550 kumpf 1.82 Array<Uint16> _validStates;
1551 Array<Uint16> _validRepeatPolicies;
1552 Array<Uint16> _validErrorPolicies;
1553 Array<Uint16> _validPersistenceTypes;
1554 Array<Uint16> _validSNMPVersion;
1555 Array<Uint16> _supportedStates;
1556 Array<Uint16> _supportedRepeatPolicies;
1557 Array<Uint16> _supportedErrorPolicies;
1558 Array<Uint16> _supportedPersistenceTypes;
1559 Array<Uint16> _supportedSNMPVersion;
|
1560 yi.zhou 1.66
|
1561 carolann.graves 1.76 /**
1562 Arrays of names of supported properties for each class
1563 */
|
1564 kumpf 1.82 Array<CIMName> _supportedSubscriptionProperties;
1565 Array<CIMName> _supportedFormattedSubscriptionProperties;
1566 Array<CIMName> _supportedFilterProperties;
1567 Array<CIMName> _supportedCIMXMLHandlerProperties;
1568 Array<CIMName> _supportedCIMXMLListenerDestinationProperties;
1569 Array<CIMName> _supportedSNMPHandlerProperties;
1570 Array<CIMName> _supportedSyslogListenerDestinationProperties;
1571 Array<CIMName> _supportedEmailListenerDestinationProperties;
|
1572 karl 1.97.2.1 ControlProvIndRegTable _controlProvIndRegTable;
|
1573 kumpf 1.1 };
1574
|
1575 venkat.puvvada 1.91 // Use with AutoPtr to automatically decrement AtomicInt
1576 struct DecAtomicInt
1577 {
1578 void operator()(AtomicInt* ptr)
1579 {
1580 if (ptr)
1581 {
1582 ptr->dec();
1583 }
1584 }
1585 };
1586
|
1587 karl 1.97.2.1 struct ExpectedResponseCountSetDone
1588 {
1589 void operator()(DeliveryStatusAggregator* ptr)
1590 {
1591 if (ptr)
1592 {
1593 ptr->expectedResponseCountSetDone();
1594 }
1595 }
1596 };
1597
|
1598 kumpf 1.1 PEGASUS_NAMESPACE_END
1599
|
1600 kumpf 1.41 #endif /* Pegasus_IndicationService_h */
|