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