cimoperationrequestencoder.cpp

来自「Pegasus is an open-source implementation」· C++ 代码 · 共 931 行 · 第 1/3 页

CPP
931
字号
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================////%/////////////////////////////////////////////////////////////////////////////#include <Pegasus/Common/Config.h>#include <iostream>#include <Pegasus/Common/Constants.h>#include <Pegasus/Common/XmlWriter.h>#include <Pegasus/Common/HTTPMessage.h>#include "CIMOperationRequestEncoder.h"PEGASUS_USING_STD;PEGASUS_NAMESPACE_BEGINCIMOperationRequestEncoder::CIMOperationRequestEncoder(    MessageQueue* outputQueue,    const String& hostName,    ClientAuthenticator* authenticator,    Uint32 showOutput)    :    MessageQueue(PEGASUS_QUEUENAME_OPREQENCODER),    _outputQueue(outputQueue),    _hostName(hostName.getCString()),    _authenticator(authenticator),    _showOutput(showOutput){    dataStore_prt=NULL;}CIMOperationRequestEncoder::~CIMOperationRequestEncoder(){}void CIMOperationRequestEncoder::handleEnqueue(){    Message* message = dequeue();    if (!message)        return;    _authenticator->setRequestMessage(message);    switch (message->getType())    {        case CIM_CREATE_CLASS_REQUEST_MESSAGE:            _encodeCreateClassRequest(                (CIMCreateClassRequestMessage*)message);            break;        case CIM_GET_CLASS_REQUEST_MESSAGE:            _encodeGetClassRequest((CIMGetClassRequestMessage*)message);            break;        case CIM_MODIFY_CLASS_REQUEST_MESSAGE:            _encodeModifyClassRequest(                (CIMModifyClassRequestMessage*)message);            break;        case CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE:            _encodeEnumerateClassNamesRequest(                (CIMEnumerateClassNamesRequestMessage*)message);            break;        case CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE:            _encodeEnumerateClassesRequest(                (CIMEnumerateClassesRequestMessage*)message);            break;        case CIM_DELETE_CLASS_REQUEST_MESSAGE:            _encodeDeleteClassRequest(                (CIMDeleteClassRequestMessage*)message);            break;        case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:            _encodeCreateInstanceRequest(                (CIMCreateInstanceRequestMessage*)message);            break;        case CIM_GET_INSTANCE_REQUEST_MESSAGE:            _encodeGetInstanceRequest((CIMGetInstanceRequestMessage*)message);            break;        case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:            _encodeModifyInstanceRequest(                (CIMModifyInstanceRequestMessage*)message);            break;        case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:            _encodeEnumerateInstanceNamesRequest(                (CIMEnumerateInstanceNamesRequestMessage*)message);            break;        case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:            _encodeEnumerateInstancesRequest(                (CIMEnumerateInstancesRequestMessage*)message);            break;        case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:            _encodeDeleteInstanceRequest(                (CIMDeleteInstanceRequestMessage*)message);            break;        case CIM_SET_QUALIFIER_REQUEST_MESSAGE:            _encodeSetQualifierRequest(                (CIMSetQualifierRequestMessage*)message);            break;        case CIM_GET_QUALIFIER_REQUEST_MESSAGE:            _encodeGetQualifierRequest(                (CIMGetQualifierRequestMessage*)message);            break;        case CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE:            _encodeEnumerateQualifiersRequest(                (CIMEnumerateQualifiersRequestMessage*)message);            break;        case CIM_DELETE_QUALIFIER_REQUEST_MESSAGE:            _encodeDeleteQualifierRequest(                (CIMDeleteQualifierRequestMessage*)message);            break;        case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:            _encodeReferenceNamesRequest(                (CIMReferenceNamesRequestMessage*)message);            break;        case CIM_REFERENCES_REQUEST_MESSAGE:            _encodeReferencesRequest(                (CIMReferencesRequestMessage*)message);            break;        case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:            _encodeAssociatorNamesRequest(                (CIMAssociatorNamesRequestMessage*)message);            break;        case CIM_ASSOCIATORS_REQUEST_MESSAGE:            _encodeAssociatorsRequest(                (CIMAssociatorsRequestMessage*)message);            break;        case CIM_EXEC_QUERY_REQUEST_MESSAGE:            _encodeExecQueryRequest(                (CIMExecQueryRequestMessage*)message);            break;        case CIM_GET_PROPERTY_REQUEST_MESSAGE:            _encodeGetPropertyRequest((CIMGetPropertyRequestMessage*)message);            break;        case CIM_SET_PROPERTY_REQUEST_MESSAGE:            _encodeSetPropertyRequest((CIMSetPropertyRequestMessage*)message);            break;        case CIM_INVOKE_METHOD_REQUEST_MESSAGE:            _encodeInvokeMethodRequest(                (CIMInvokeMethodRequestMessage*)message);            break;    }    //ATTN: Do not delete the message here.    //    // ClientAuthenticator needs this message for resending the request on    // authentication challenge from the server. The message is deleted in    // the decoder after receiving the valid response from thr server.    //    //delete message;}void CIMOperationRequestEncoder::setDataStorePointer(    ClientPerfDataStore* perfDataStore_ptr){   dataStore_prt = perfDataStore_ptr;}// l10n Added accept language and content language support starting herevoid CIMOperationRequestEncoder::_encodeCreateClassRequest(    CIMCreateClassRequestMessage* message){    Buffer params;    XmlWriter::appendClassIParameter(params, "NewClass", message->newClass);    Buffer buffer = XmlWriter::formatSimpleIMethodReqMessage(        _hostName,        message->nameSpace, CIMName ("CreateClass"), message->messageId,        message->getHttpMethod(),        _authenticator->buildRequestAuthHeader(),        ((AcceptLanguageListContainer)message->operationContext.get(            AcceptLanguageListContainer::NAME)).getLanguages(),        ((ContentLanguageListContainer)message->operationContext.get(            ContentLanguageListContainer::NAME)).getLanguages(),        params);    _sendRequest(buffer);}void CIMOperationRequestEncoder::_encodeGetClassRequest(    CIMGetClassRequestMessage* message){    Buffer params;    XmlWriter::appendClassNameIParameter(        params, "ClassName", message->className);    if (message->localOnly != true)        XmlWriter::appendBooleanIParameter(params, "LocalOnly", false);    if (message->includeQualifiers != true)        XmlWriter::appendBooleanIParameter(params, "IncludeQualifiers", false);    if (message->includeClassOrigin != false)        XmlWriter::appendBooleanIParameter(params, "IncludeClassOrigin", true);    if (!message->propertyList.isNull())        XmlWriter::appendPropertyListIParameter(            params, message->propertyList);    Buffer buffer = XmlWriter::formatSimpleIMethodReqMessage(        _hostName, message->nameSpace, CIMName ("GetClass"), message->messageId,        message->getHttpMethod(),        _authenticator->buildRequestAuthHeader(),        ((AcceptLanguageListContainer)message->operationContext.get(            AcceptLanguageListContainer::NAME)).getLanguages(),        ((ContentLanguageListContainer)message->operationContext.get(            ContentLanguageListContainer::NAME)).getLanguages(),        params);    _sendRequest(buffer);}void CIMOperationRequestEncoder::_encodeModifyClassRequest(    CIMModifyClassRequestMessage* message){    Buffer params;    XmlWriter::appendClassIParameter(        params, "ModifiedClass", message->modifiedClass);    Buffer buffer = XmlWriter::formatSimpleIMethodReqMessage(_hostName,        message->nameSpace, CIMName ("ModifyClass"), message->messageId,        message->getHttpMethod(),        _authenticator->buildRequestAuthHeader(),        ((AcceptLanguageListContainer)message->operationContext.get(            AcceptLanguageListContainer::NAME)).getLanguages(),        ((ContentLanguageListContainer)message->operationContext.get(            ContentLanguageListContainer::NAME)).getLanguages(),        params);    _sendRequest(buffer);}void CIMOperationRequestEncoder::_encodeEnumerateClassNamesRequest(    CIMEnumerateClassNamesRequestMessage* message){    Buffer params;    if (!message->className.isNull())        XmlWriter::appendClassNameIParameter(            params, "ClassName", message->className);    if (message->deepInheritance != false)        XmlWriter::appendBooleanIParameter(params, "DeepInheritance", true);    Buffer buffer = XmlWriter::formatSimpleIMethodReqMessage(_hostName,        message->nameSpace, CIMName ("EnumerateClassNames"), message->messageId,        message->getHttpMethod(),        _authenticator->buildRequestAuthHeader(),        ((AcceptLanguageListContainer)message->operationContext.get(            AcceptLanguageListContainer::NAME)).getLanguages(),        ((ContentLanguageListContainer)message->operationContext.get(            ContentLanguageListContainer::NAME)).getLanguages(),        params);    _sendRequest(buffer);}void CIMOperationRequestEncoder::_encodeEnumerateClassesRequest(    CIMEnumerateClassesRequestMessage* message){    Buffer params;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?