version 1.289, 2013/05/14 06:17:24
|
version 1.290, 2013/06/11 11:18:32
|
|
|
| |
stopWatch.start(); | stopWatch.start(); |
#endif | #endif |
|
|
|
if (message->getType() == CIM_PROCESS_INDICATION_RESPONSE_MESSAGE) |
|
{ |
|
_handleProcessIndicationResponse(message); |
|
return; |
|
} |
|
|
CIMRequestMessage* cimRequest = dynamic_cast<CIMRequestMessage *>(message); | CIMRequestMessage* cimRequest = dynamic_cast<CIMRequestMessage *>(message); |
PEGASUS_ASSERT(cimRequest); | PEGASUS_ASSERT(cimRequest); |
| |
|
|
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
} | } |
| |
|
void IndicationService::_handleProcessIndicationResponse(Message* message) |
|
{ |
|
PEG_METHOD_ENTER(TRC_INDICATION_SERVICE, |
|
"IndicationService::_handleProcessIndicationResponse"); |
|
|
|
CIMProcessIndicationResponseMessage* response = dynamic_cast< |
|
CIMProcessIndicationResponseMessage*> (message); |
|
PEGASUS_ASSERT(response != 0); |
|
|
|
CIMInstance instance = response->subscription; |
|
try |
|
{ |
|
|
|
if (!_subscriptionRepository->reconcileFatalError(instance)) |
|
{ |
|
delete message; |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
String creator = instance.getProperty (instance.findProperty |
|
(PEGASUS_PROPERTYNAME_INDSUB_CREATOR)).getValue ().toString (); |
|
|
|
AcceptLanguageList acceptLangs; |
|
Uint32 propIndex = instance.findProperty |
|
(PEGASUS_PROPERTYNAME_INDSUB_ACCEPTLANGS); |
|
if (propIndex != PEG_NOT_FOUND) |
|
{ |
|
String acceptLangsString; |
|
instance.getProperty(propIndex).getValue().get(acceptLangsString); |
|
if (acceptLangsString.size()) |
|
{ |
|
acceptLangs = LanguageParser::parseAcceptLanguageHeader( |
|
acceptLangsString); |
|
} |
|
} |
|
ContentLanguageList contentLangs; |
|
propIndex = instance.findProperty( |
|
PEGASUS_PROPERTYNAME_INDSUB_CONTENTLANGS); |
|
|
|
if (propIndex != PEG_NOT_FOUND) |
|
{ |
|
String contentLangsString; |
|
instance.getProperty(propIndex).getValue().get(contentLangsString); |
|
if (contentLangsString.size()) |
|
{ |
|
contentLangs = LanguageParser::parseContentLanguageHeader( |
|
contentLangsString); |
|
} |
|
} |
|
Array<NamespaceClassList> indicationSubclasses; |
|
Array<ProviderClassList> indicationProviders; |
|
indicationProviders = _getDeleteParams(instance, indicationSubclasses); |
|
PEGASUS_ASSERT(indicationProviders.size() > 0); |
|
|
|
_subscriptionTable->removeSubscription( |
|
instance, |
|
indicationSubclasses, |
|
indicationProviders); |
|
|
|
_sendWaitDeleteRequests ( |
|
indicationProviders, |
|
instance, |
|
acceptLangs, |
|
contentLangs, |
|
creator); |
|
#ifdef PEGASUS_ENABLE_DMTF_INDICATION_PROFILE_SUPPORT |
|
_sendSubscriptionNotActiveMessagetoHandlerService(instance.getPath()); |
|
#endif |
|
} |
|
catch(const Exception &e) |
|
{ |
|
PEG_TRACE ((TRC_DISCARDED_DATA, Tracer::LEVEL2, |
|
"Exception caught trying to reconcile the subscription's" |
|
" OnFatalErrorPolicy %s", |
|
(const char *) e.getMessage ().getCString())); |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE ((TRC_DISCARDED_DATA, Tracer::LEVEL2, |
|
"Unknown exception caught trying to reconcile the subscription's" |
|
" OnFatalErrorPolicy")); |
|
} |
|
delete message; |
|
PEG_METHOD_EXIT(); |
|
} |
|
|
|
|
// l10n TODO - might need to globalize another flow and another consumer | // l10n TODO - might need to globalize another flow and another consumer |
// interface (ie. mdd's) if we can't agree on one export flow and consumer | // interface (ie. mdd's) if we can't agree on one export flow and consumer |
// interface (see PEP67) | // interface (see PEP67) |