예제 #1
0
파일: cfm_LBP.c 프로젝트: yanni4night/CFM
/*
Without Ethernet-Header,VLAN-Tag or any TLV
*/
static lbmpdu_t generateLbmPdu(void * mp,int mpFlag)//Modified 10:50,07-22
{
	CFMHeader_t header ;
	lbmpdu_t pdu ;
	MEP_t mep;
	
	if(mp==NULL)return faultMsg("mp is NULL in generateLbmPdu");
	if(mpFlag==MEP)mep=(MEP_t)mp;
	else return NULL;
	
	pdu = (lbmpdu_t)alloc(sizeof(struct lbmpdu_st));
	if(pdu==NULL)return faultMsg("Cannot alloc <pdu> in generateLbmPdu()");

	header = generateCFMHeader(mep->MEPBasic.ma->MDPointer->MDLevel,type_LBM, 0);
		
	pdu->header = header ;
	pdu->ltransId = mep->lbpm->nextLBMtransID;
	pdu->endTLVOffset = 0 ;
	
	return pdu ;
}
예제 #2
0
   virtual bool execute(const HttpRequestContext& requestContext, ///< request context
                        UtlSList& params,                         ///< request param list
                        void* userData,                           ///< user data
                        XmlRpcResponse& response,                 ///< request response
                        ExecutionStatus& status
                        )
      {
         UtlString* dbName = dynamic_cast<UtlString*>(params.at(0));

         if (dbName && !dbName->isNull())
         {
            OsReadLock lock(*ConfigRPC::spDatabaseLock);
            ConfigRPC* db = ConfigRPC::find(*dbName);

            if (db)
            {
               status = db->mCallback->accessAllowed(requestContext, ConfigRPC_Callback::Version);
               if ( XmlRpcMethod::OK == status )
               {
                  response.setResponse(&db->mVersion);
               }
               else
               {
                  UtlString faultMsg("Access Denied");
                  response.setFault(XmlRpcMethod::FAILED, faultMsg.data());
               }
            }
            else
            {
               UtlString faultMsg;
               faultMsg.append("db lookup failed for '");
               faultMsg.append(*dbName);
               faultMsg.append("'");
               response.setFault( XmlRpcResponse::UnregisteredMethod, faultMsg.data());
               status = XmlRpcMethod::FAILED;
            }
         }
         else
         {
            response.setFault( XmlRpcResponse::EmptyParameterValue
                              ,"'dbname' parameter is missing or invalid type"
                              );
            status = XmlRpcMethod::FAILED;
         }

         return true;
      }
예제 #3
0
파일: cfm_LBP.c 프로젝트: yanni4night/CFM
/*
Add Ethernet-Header,VLAN-Tag and TLVs to char[]
*/
static dataStream_t lbmpdu_format(uint8 destination_address[ADDR_LEN],uint8 priority,void * mp,int mpFlag)//Modified 11:00 07-22
{
	int tlv_total_len=0,cnt=0 ,sender_id_tlv_len=0;
	lbmpdu_t pdu ;
	dataStream_t datas ;
	MEP_t mep=NULL;
	if(mpFlag==MEP)mep=(MEP_t)mp;
	
	datas=(dataStream_t)alloc(sizeof(struct dataStream_st));
	if(datas==NULL)
	{
		return faultMsg("Cannot alloc <datas> in lbmpdu_format()");
	}

	pdu = generateLbmPdu( mep,mpFlag);
	#if 1
		
		if(mep->lbpm->senderID_TLV_Contained)
		{

			switch(mep->MEPBasic.ma->SenderIDPermission)
			{
           case None:break;
		   case Chassis:;sender_id_tlv_len=gCfm->TLV.Sender_ID_TLV.chassis_ID_Length+2;break;
		   case Manage:sender_id_tlv_len=gCfm->TLV.Sender_ID_TLV.management_Address_Domain_Length+gCfm->TLV.Sender_ID_TLV.management_Address_Length+3;break;
		   case ChassisManage:
		   	sender_id_tlv_len=gCfm->TLV.Sender_ID_TLV.chassis_ID_Length+gCfm->TLV.Sender_ID_TLV.management_Address_Domain_Length+gCfm->TLV.Sender_ID_TLV.management_Address_Length+4;
			break;

			}
			tlv_total_len+=sender_id_tlv_len+3;
			
		}
		if(mep->lbpm->data_TLV_Contained)
		{
			tlv_total_len+=mep->lbpm->Data_TLV.length+3;
		}
		if(mep->lbpm->orgSpecificTLVContained)
		{
			tlv_total_len+=gCfm->TLV.Organization_Specific_TLV.length+3;
		}
#endif

	datas->length=ETHERNETHEAD_LEN+LBM_HEAD_LEN+VLAN_TAG_LEN+tlv_total_len ;
    
	memcpy(datas->data,destination_address,ADDR_LEN);
	memcpy(datas->data+ADDR_LEN,mep->MEPStatus.MACAddress,ADDR_LEN);
    
	cnt=ADDR_LEN*2 ;
	datas->data[cnt++]=0x81 ;
	//Vlan-Tag
	datas->data[cnt++]=0x00 ;
    
	datas->data[cnt++]=(uint8)(priority<<5)+(uint8)(mep->MEPBasic.PrimaryVlan>>8);
	datas->data[cnt++]=(uint8)(mep->MEPBasic.PrimaryVlan&0xFF);
	//VlanId
    
	datas->data[cnt++]=0x89 ;
	//802.1agCFM Tag
	datas->data[cnt++]=0x02 ;
    
    
	datas->data[cnt++]=pdu->header->mdLevel_version ;
	//CFM Header
	datas->data[cnt++]=pdu->header->opCode ;
	datas->data[cnt++]=pdu->header->flags ;
	datas->data[cnt++]=pdu->header->firstTLVOffset ;
    
	datas->data[cnt++]=(uint8)(pdu->ltransId>>24);
	//LBM-TransID
	datas->data[cnt++]=(uint8)((pdu->ltransId>>16)&0xFF);
	datas->data[cnt++]=(uint8)((pdu->ltransId>>8)&0xFF);
	datas->data[cnt++]=(uint8)(pdu->ltransId);
    
    

    #if 1
	if(mep->lbpm->senderID_TLV_Contained)
	{
		datas->data[cnt++]=gCfm->TLV.Sender_ID_TLV.type;
		datas->data[cnt++]=(uint8)(sender_id_tlv_len>>8);
		datas->data[cnt++]=(uint8)(sender_id_tlv_len&0x00FF);

		if(mep->MEPBasic.ma->SenderIDPermission==Chassis||mep->MEPBasic.ma->SenderIDPermission==ChassisManage)
		{
			datas->data[cnt++]=gCfm->TLV.Sender_ID_TLV.chassis_ID_Length;
			datas->data[cnt++]=gCfm->TLV.Sender_ID_TLV.chassis_ID_Subtype;
			memcpy(datas->data+cnt,gCfm->TLV.Sender_ID_TLV.chassis_ID,gCfm->TLV.Sender_ID_TLV.chassis_ID_Length);
			cnt+=gCfm->TLV.Sender_ID_TLV.chassis_ID_Length;
	    	}
		if(mep->MEPBasic.ma->SenderIDPermission==Manage){
			datas->data[cnt++] = 0x00;
		}
		if(mep->MEPBasic.ma->SenderIDPermission==Manage||mep->MEPBasic.ma->SenderIDPermission==ChassisManage)
		{
			datas->data[cnt++]=gCfm->TLV.Sender_ID_TLV.management_Address_Domain_Length;
			memcpy(datas->data+cnt,gCfm->TLV.Sender_ID_TLV.management_Address_Domain,gCfm->TLV.Sender_ID_TLV.management_Address_Domain_Length);
			cnt+=gCfm->TLV.Sender_ID_TLV.management_Address_Domain_Length;
			datas->data[cnt++]=gCfm->TLV.Sender_ID_TLV.management_Address_Length;
			memcpy(datas->data+cnt,gCfm->TLV.Sender_ID_TLV.management_Address,gCfm->TLV.Sender_ID_TLV.management_Address_Length);
			cnt+=gCfm->TLV.Sender_ID_TLV.management_Address_Length;
		}
	}
예제 #4
0
   virtual bool execute(const HttpRequestContext& requestContext, ///< request context
                        UtlSList& params,                         ///< request param list
                        void* userData,                           ///< user data
                        XmlRpcResponse& response,                 ///< request response
                        ExecutionStatus& status
                        )
      {
         UtlString* dbName = dynamic_cast<UtlString*>(params.at(0));

         if (dbName && !dbName->isNull())
         {
            OsReadLock lock(*ConfigRPC::spDatabaseLock);

            ConfigRPC* db = ConfigRPC::find(*dbName);
            if (db)
            {
               status = db->mCallback->accessAllowed(requestContext, ConfigRPC_Callback::Set);
               if ( XmlRpcMethod::OK == status )
               {
                  // read in the dataset
                  OsConfigDb dataset;
                  OsStatus datasetStatus = db->load(dataset);
                  if ( OS_SUCCESS == datasetStatus )
                  {
                     // get the list of names that the request is trying to delete
                     UtlContainable* secondParam = params.at(1);
                     if ( secondParam )
                     {
                        UtlSList* nameList = dynamic_cast<UtlSList*>(secondParam);
                        if (nameList)
                        {
                           /*
                            * Iterate over the names
                            * - For each name found, delete it from the dataset and count it
                            */
                           UtlSListIterator deleteNames(*nameList);
                           UtlString* deleteName = NULL;
                           size_t deleted = 0;

                           while ((deleteName = dynamic_cast<UtlString*>(deleteNames())))
                           {
                              if (OS_SUCCESS == dataset.remove(*deleteName))
                              {
                                 deleted++;
                              }
                           }

                           if (OS_SUCCESS == db->store(dataset))
                           {
                              status = XmlRpcMethod::OK;
                              UtlInt deletedCount(deleted);
                              response.setResponse(&deletedCount);
                           }
                           else
                           {
                              response.setFault( ConfigRPC::storeFailed
                                                ,"error storing dataset"
                                                );
                              status = XmlRpcMethod::FAILED;
                           }
                        }
                        else
                        {
                           // The second parameter was not a list
                           response.setFault( ConfigRPC::invalidType
                                             ,"namelist parameter is not an array"
                                             );
                           status = XmlRpcMethod::FAILED;
                        }
                     }
                     else // No second parameter
                     {
                        response.setFault( ConfigRPC::invalidType
                                          ,"no second parameter list of names to delete"
                                          );
                        status = XmlRpcMethod::FAILED;
                     }
                  }
                  else
                  {
                     UtlString faultMsg("dataset load failed");
                     response.setFault(ConfigRPC::loadFailed, faultMsg);
                     status = XmlRpcMethod::FAILED;
                  }
               }
               else
               {
                  UtlString faultMsg("Access Denied");
                  response.setFault(XmlRpcMethod::FAILED, faultMsg.data());
               }
            }
            else
            {
               UtlString faultMsg;
               faultMsg.append("db lookup failed for '");
               faultMsg.append(*dbName);
               faultMsg.append("'");
               response.setFault( XmlRpcResponse::UnregisteredMethod, faultMsg.data());
               status = XmlRpcMethod::FAILED;
            }
         }
         else
         {
            response.setFault( XmlRpcResponse::EmptyParameterValue
                              ,"'dbname' parameter is missing or invalid type"
                              );
            status = XmlRpcMethod::FAILED;
         }

         return true;
      }
예제 #5
0
   virtual bool execute(const HttpRequestContext& requestContext, ///< request context
                        UtlSList& params,                         ///< request param list
                        void* userData,                           ///< user data
                        XmlRpcResponse& response,                 ///< request response
                        ExecutionStatus& status
                        )
      {
         UtlString* dbName = dynamic_cast<UtlString*>(params.at(0));

         if (dbName && !dbName->isNull())
         {
            OsReadLock lock(*ConfigRPC::spDatabaseLock);

            ConfigRPC* db = ConfigRPC::find(*dbName);
            if (db)
            {
               status = db->mCallback->accessAllowed(requestContext, ConfigRPC_Callback::Set);
               if ( XmlRpcMethod::OK == status )
               {
                  // read in the dataset
                  OsConfigDb dataset;
                  OsStatus datasetStatus = db->load(dataset);
                  if ( OS_SUCCESS == datasetStatus )
                  {
                     // get the list of names that the request is asking for
                     UtlContainable* secondParam = params.at(1);
                     if ( secondParam )
                     {
                        UtlHashMap* paramList = dynamic_cast<UtlHashMap*>(secondParam);
                        if (paramList)
                        {
                           /*
                            * Iterate over the requested name/value pairs
                            */
                           UtlHashMapIterator params(*paramList);
                           UtlContainable* nextParam = NULL;
                           size_t paramsSet = 0;

                           while (    XmlRpcMethod::OK == status
                                  && (nextParam = params())
                                  )
                           {
                              UtlString* name = dynamic_cast<UtlString*>(params.key());
                              if ( name )
                              {
                                 UtlString* value = dynamic_cast<UtlString*>(params.value());
                                 if (value)
                                 {
                                    dataset.set(*name, *value);
                                    paramsSet++;
                                 }
                                 else
                                 {
                                    UtlString faultMsg;
                                    faultMsg.append("parameter name '");
                                    faultMsg.append(*name);
                                    faultMsg.append("' value is not a string");
                                    response.setFault(ConfigRPC::invalidType, faultMsg.data());
                                    status = XmlRpcMethod::FAILED;
                                 }
                              }
                              else
                              {
                                 UtlString faultMsg;
                                 faultMsg.append("parameter number ");
                                 char paramIndex[10];
                                 sprintf(paramIndex,"%zu", paramsSet + 1);
                                 faultMsg.append(paramIndex);
                                 faultMsg.append(" name is not a string");
                                 response.setFault(ConfigRPC::invalidType, faultMsg.data());
                                 status = XmlRpcMethod::FAILED;
                              }
                           }

                           if ( XmlRpcMethod::OK == status )
                           {
                              if (OS_SUCCESS == db->store(dataset))
                              {
                                 UtlInt numberSet(paramList->entries());
                                 response.setResponse(&numberSet);
                              }
                              else
                              {
                                 response.setFault( ConfigRPC::storeFailed
                                                   ,"error storing dataset"
                                                   );
                                 status = XmlRpcMethod::FAILED;
                              }
                           }
                        }
                        else
                        {
                           // The second parameter was not a list
                           response.setFault( ConfigRPC::invalidType
                                             ,"second parameter is not a struct"
                                             );
                           status = XmlRpcMethod::FAILED;
                        }
                     }
                     else // no parameter names specified
                     {
                        // No second parameter
                        response.setFault( ConfigRPC::invalidType
                                          ,"no second parameter of name/value pairs"
                                          );
                        status = XmlRpcMethod::FAILED;
                     }
                  }
                  else
                  {
                     UtlString faultMsg("dataset load failed");
                     response.setFault(ConfigRPC::loadFailed, faultMsg);
                     status = XmlRpcMethod::FAILED;
                  }
               }
               else
               {
                  UtlString faultMsg("Access Denied");
                  response.setFault(XmlRpcMethod::FAILED, faultMsg.data());
               }
            }
            else
            {
               UtlString faultMsg;
               faultMsg.append("db lookup failed for '");
               faultMsg.append(*dbName);
               faultMsg.append("'");
               response.setFault( XmlRpcResponse::UnregisteredMethod, faultMsg.data());
               status = XmlRpcMethod::FAILED;
            }
         }
         else
         {
            response.setFault( XmlRpcResponse::EmptyParameterValue
                              ,"'dbname' parameter is missing or invalid type"
                              );
            status = XmlRpcMethod::FAILED;
         }

         return true;
      }
예제 #6
0
   virtual bool execute(const HttpRequestContext& requestContext, ///< request context
                        UtlSList& params,                         ///< request param list
                        void* userData,                           ///< user data
                        XmlRpcResponse& response,                 ///< request response
                        ExecutionStatus& status
                        )
      {
         UtlString* dbName = dynamic_cast<UtlString*>(params.at(0));

         if (dbName && !dbName->isNull())
         {
            OsReadLock lock(*ConfigRPC::spDatabaseLock);

            // find the dataset registered with this name
            ConfigRPC* db = ConfigRPC::find(*dbName);
            if (db)
            {
               // check with the application to see if this request is authorized on this dataset
               status = db->mCallback->accessAllowed(requestContext, ConfigRPC_Callback::Get);
               if ( XmlRpcMethod::OK == status )
               {
                  // read in the dataset
                  OsConfigDb dataset;
                  OsStatus datasetStatus = db->load(dataset);
                  if ( OS_SUCCESS == datasetStatus )
                  {
                     // get the list of names that the request is asking for
                     UtlContainable* secondParam = params.at(1);
                     if ( secondParam )
                     {
                        UtlSList* nameList = dynamic_cast<UtlSList*>(secondParam);
                        if (nameList)
                        {
                           /*
                            * Iterate over the requested names
                            * - All must be present or the request is an error
                            * - For each name found, add the name and value to the
                            *   selectedParams hash to be returned in a success response.
                            */
                           UtlHashMap selectedParams;
                           UtlSListIterator requestedNames(*nameList);
                           UtlString* requestedName = NULL;
                           bool allNamesFound = true;

                           while (   allNamesFound
                                  && (requestedName = dynamic_cast<UtlString*>(requestedNames()))
                                  )
                           {
                              UtlString* paramValue = new UtlString();
                              if ( OS_SUCCESS == dataset.get(*requestedName, *paramValue) )
                              {
                                 UtlString* paramName  = new UtlString(*requestedName);
                                 // put it into the results
                                 selectedParams.insertKeyAndValue(paramName, paramValue);
                              }
                              else
                              {
                                 allNamesFound = false;
                                 delete paramValue;
                              }
                           }

                           if (allNamesFound)
                           {
                              // all were found - return the name/value pairs
                              response.setResponse(&selectedParams);
                           }
                           else
                           {
                              // at least one name was not found - return an error.
                              UtlString faultMsg;
                              faultMsg.append("parameter name '");
                              faultMsg.append(*requestedName);
                              faultMsg.append("' not found");
                              response.setFault(ConfigRPC::nameNotFound, faultMsg.data());
                              status = XmlRpcMethod::FAILED;
                           }

                           selectedParams.destroyAll();
                        }
                        else
                        {
                           // The second parameter was not a list
                           response.setFault( ConfigRPC::invalidType
                                             ,"namelist parameter is not an array"
                                             );
                           status = XmlRpcMethod::FAILED;
                        }
                     }
                     else // no parameter names specified
                     {
                        // return all names
                        UtlHashMap allParams;
                        UtlString  lastKey;
                        OsStatus   iterateStatus;
                        UtlString* paramName;
                        UtlString* paramValue;
                        bool       notEmpty = false;

                        for ( ( paramName  = new UtlString()
                               ,paramValue = new UtlString()
                               ,iterateStatus = dataset.getNext(lastKey, *paramName, *paramValue)
                               );
                              OS_SUCCESS == iterateStatus;
                              ( lastKey       = *paramName
                               ,paramName     = new UtlString()
                               ,paramValue    = new UtlString()
                               ,iterateStatus = dataset.getNext(lastKey, *paramName, *paramValue)
                               )
                             )
                        {
                           notEmpty = true; // got at least one parameter
                           // put it into the result array
                           allParams.insertKeyAndValue(paramName, paramValue);
                        }
                        // on the final iteration these were not used
                        delete paramName;
                        delete paramValue;

                        if (notEmpty)
                        {
                           response.setResponse(&allParams);
                           allParams.destroyAll();
                        }
                        else
                        {
                           // there is no way to send a well-formed but empty response,
                           // so a 'get all' on an empty dataset returns a fault.
                           UtlString faultMsg;
                           faultMsg.append("dataset '");
                           faultMsg.append(*dbName);
                           faultMsg.append("' has no parameters");
                           response.setFault(ConfigRPC::emptyDataset, faultMsg);
                           status = XmlRpcMethod::FAILED;
                        }
                     }
                  }
                  else
                  {
                     UtlString faultMsg("dataset load failed");
                     response.setFault(ConfigRPC::loadFailed, faultMsg);
                     status = XmlRpcMethod::FAILED;
                  }
               }
               else
               {
                  UtlString faultMsg("Access Denied");
                  response.setFault(XmlRpcMethod::FAILED, faultMsg.data());
               }
            }
            else
            {
               UtlString faultMsg;
               faultMsg.append("db lookup failed for '");
               faultMsg.append(*dbName);
               faultMsg.append("'");
               response.setFault( XmlRpcResponse::UnregisteredMethod, faultMsg.data());
               status = XmlRpcMethod::FAILED;
            }
         }
         else
         {
            response.setFault( XmlRpcResponse::EmptyParameterValue
                              ,"'dbname' parameter is missing or invalid type"
                              );
            status = XmlRpcMethod::FAILED;
         }

         return true;
      }
예제 #7
0
bool XmlRpcDispatch::parseXmlRpcRequest(const UtlString& requestContent,
                                        XmlRpcMethodContainer*& methodContainer,
                                        UtlSList& params,
                                        XmlRpcResponse& response)
{
   bool result = false;

   // Parse the XML-RPC response
   TiXmlDocument doc("XmlRpcRequest.xml");
   
   doc.Parse(requestContent);   
   if (!doc.Error())
   {
      TiXmlNode* rootNode = doc.FirstChild ("methodCall");
      
      if (rootNode != NULL)
      {
         // Positive response example
         // 
         // <methodCall>
         //   <methodName>examples.getStateName</methodName>
         //   <params>
         //     <param>
         //       <value><i4>41</i4></value>
         //     </param>
         //   </params>
         // </methodCall>
                  
         TiXmlNode* methodNode = rootNode->FirstChild("methodName");
         
         if (methodNode)
         {
            // Check whether the method exists or not. If not, send back a fault response
            UtlString methodCall = methodNode->FirstChild()->Value();
            methodContainer = (XmlRpcMethodContainer*) mMethods.findValue(&methodCall);
            if (methodContainer)
            {
               /*
                * Since params are optional,
                * assume all is well until proven otherwise now
                */
               result = true; 
               TiXmlNode* paramsNode = rootNode->FirstChild("params");
               
               if (paramsNode)
               {
                  int index = 0;
                  for (TiXmlNode* paramNode = paramsNode->FirstChild("param");
                       result /* stop if any error */ && paramNode /* or no more param nodes */; 
                       paramNode = paramNode->NextSibling("param"))
                  {
                     TiXmlNode* subNode = paramNode->FirstChild("value");
                     
                     if (subNode)
                     {
                        UtlString parseErrorMsg;
                        UtlContainable* param = XmlRpcBody::parseValue(subNode, 0, parseErrorMsg);
                        if (param)
                        {
                           params.append(param);
                           index++;
                        }
                        else
                        {
                           char errorLoc[200];
                           sprintf(errorLoc," in param %d",
                                   index);
                           OsSysLog::add(FAC_XMLRPC, PRI_ERR,
                                         "XmlRpcDispatch::parseXmlRpcRequest"
                                         " invalid <value> contents %s of %s",
                                         errorLoc, requestContent.data());
                           parseErrorMsg.append(errorLoc);
                           response.setFault(EMPTY_PARAM_VALUE_FAULT_CODE,
                                             parseErrorMsg.data());
                           result=false;
                        }
                     }
                     else
                     {
                        char errorLoc[200];
                        sprintf(errorLoc,"no <value> element in param %d.",
                                index);
                        OsSysLog::add(FAC_XMLRPC, PRI_ERR,
                                      "XmlRpcDispatch::parseXmlRpcRequest %s of: %s",
                                      errorLoc, requestContent.data());
                        response.setFault(EMPTY_PARAM_VALUE_FAULT_CODE,
                                          errorLoc);
                        result=false;
                     }
                  }
               }
               else
               {
                  OsSysLog::add(FAC_XMLRPC, PRI_ERR,
                                "XmlRpcDispatch::parseXmlRpcRequest no <params> element found");
                  response.setMethod(methodCall);
                  response.setFault(ILL_FORMED_CONTENTS_FAULT_CODE, "no <params> element");
                  result = false;
               }
            }
            else
            {
               OsSysLog::add(FAC_XMLRPC, PRI_ERR,
                             "XmlRpcDispatch::parseXmlRpcRequest no method '%s' registered",
                             methodCall.data());
               response.setMethod(methodCall);
               response.setFault(UNREGISTERED_METHOD_FAULT_CODE, UNREGISTERED_METHOD_FAULT_STRING);
               result = false;
            }
         }
         else
         {
            UtlString faultMsg(INVALID_ELEMENT_FAULT_STRING);
            faultMsg.append("methodName not found");
            OsSysLog::add(FAC_XMLRPC, PRI_ERR,
                          "XmlRpcDispatch::parseXmlRpcRequest %s", faultMsg.data());
            response.setFault(INVALID_ELEMENT, faultMsg.data());
            result = false;
         }
      }
      else
      {
         UtlString faultMsg(INVALID_ELEMENT_FAULT_STRING);
         faultMsg.append("methodCall not found");
         OsSysLog::add(FAC_XMLRPC, PRI_ERR,
                       "XmlRpcDispatch::parseXmlRpcRequest %s", faultMsg.data());
         response.setFault(INVALID_ELEMENT, faultMsg.data());
         result = false;
      }
   }
   else
   {
      OsSysLog::add(FAC_XMLRPC, PRI_ERR,
                    "XmlRpcDispatch::parseXmlRpcRequest"
                    " ill-formed XML contents in %s. Parsing error = %s",
                     requestContent.data(), doc.ErrorDesc());
      response.setFault(ILL_FORMED_CONTENTS_FAULT_CODE, ILL_FORMED_CONTENTS_FAULT_STRING);
      result = false;
   }
   
   return result;   
}