version 1.29, 2006/05/09 19:09:36
|
version 1.31, 2006/07/21 18:44:08
|
|
|
{ | { |
public: | public: |
OutstandingRequestEntry( | OutstandingRequestEntry( |
String messageId_, |
String originalMessageId_, |
CIMRequestMessage* requestMessage_, | CIMRequestMessage* requestMessage_, |
CIMResponseMessage*& responseMessage_, | CIMResponseMessage*& responseMessage_, |
Semaphore* responseReady_) | Semaphore* responseReady_) |
: messageId(messageId_), |
: originalMessageId(originalMessageId_), |
requestMessage(requestMessage_), | requestMessage(requestMessage_), |
responseMessage(responseMessage_), | responseMessage(responseMessage_), |
responseReady(responseReady_) | responseReady(responseReady_) |
{ | { |
} | } |
| |
String messageId; |
/** |
|
A unique value is substituted as the request messageId attribute to |
|
allow responses to be definitively correllated with requests. |
|
The original messageId value is stored here to avoid a race condition |
|
between the processing of a response chunk and the resetting of the |
|
original messageId in the request message. |
|
*/ |
|
String originalMessageId; |
CIMRequestMessage* requestMessage; | CIMRequestMessage* requestMessage; |
CIMResponseMessage*& responseMessage; | CIMResponseMessage*& responseMessage; |
Semaphore* responseReady; | Semaphore* responseReady; |
|
|
i != 0; i++) | i != 0; i++) |
{ | { |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
String("Completing messageId \"") + i.value()->messageId + |
String("Completing messageId \"") + i.key() + |
"\" with a null response."); | "\" with a null response."); |
i.value()->responseMessage = response; | i.value()->responseMessage = response; |
i.value()->responseReady->signal(); | i.value()->responseReady->signal(); |
|
|
// | // |
Semaphore waitSemaphore(0); | Semaphore waitSemaphore(0); |
OutstandingRequestEntry outstandingRequestEntry( | OutstandingRequestEntry outstandingRequestEntry( |
uniqueMessageId, request, response, &waitSemaphore); |
originalMessageId, request, response, &waitSemaphore); |
| |
// | // |
// Lock the Provider Agent Container while initializing the | // Lock the Provider Agent Container while initializing the |
|
|
// Get the provider module from the ProviderIdContainer to see if | // Get the provider module from the ProviderIdContainer to see if |
// we can optimize out the transmission of this instance to the | // we can optimize out the transmission of this instance to the |
// Provider Agent. (See the _providerModuleCache description.) | // Provider Agent. (See the _providerModuleCache description.) |
try |
if(request->operationContext.contains(ProviderIdContainer::NAME)) |
{ | { |
ProviderIdContainer pidc = request->operationContext.get( | ProviderIdContainer pidc = request->operationContext.get( |
ProviderIdContainer::NAME); | ProviderIdContainer::NAME); |
|
|
doProviderModuleOptimization = true; | doProviderModuleOptimization = true; |
} | } |
} | } |
catch (...) |
|
{ |
|
// No ProviderIdContainer to optimize |
|
} |
|
| |
// | // |
// Write the message to the pipe | // Write the message to the pipe |
|
|
| |
// Put the original message ID into the response | // Put the original message ID into the response |
response->messageId = | response->messageId = |
_outstandingRequestEntry->requestMessage->messageId; |
_outstandingRequestEntry->originalMessageId; |
| |
// Call the response chunk callback to process the chunk | // Call the response chunk callback to process the chunk |
_responseChunkCallback( | _responseChunkCallback( |
|
|
| |
if (userContext == PG_PROVMODULE_USERCTXT_REQUESTOR) | if (userContext == PG_PROVMODULE_USERCTXT_REQUESTOR) |
{ | { |
try |
if(request->operationContext.contains(IdentityContainer::NAME)) |
{ | { |
// User Name is in the OperationContext | // User Name is in the OperationContext |
IdentityContainer ic = (IdentityContainer) | IdentityContainer ic = (IdentityContainer) |
request->operationContext.get(IdentityContainer::NAME); | request->operationContext.get(IdentityContainer::NAME); |
userName = ic.getUserName(); | userName = ic.getUserName(); |
} | } |
catch (Exception&) |
//else |
{ |
//{ |
// If no IdentityContainer is present, default to the CIM | // If no IdentityContainer is present, default to the CIM |
// Server's user context | // Server's user context |
} |
//} |
| |
// If authentication is disabled, use the CIM Server's user context | // If authentication is disabled, use the CIM Server's user context |
if (!userName.size()) | if (!userName.size()) |