📄 ospusagecnf.c
字号:
{ OSPTXMLATTR *attr = (OSPTXMLATTR *)OSPC_OSNULL; /* look for the component id attribute */ for (attr = (OSPTXMLATTR *)OSPPXMLElemFirstAttr(ospvElem); (attr != (OSPTXMLATTR *)OSPC_OSNULL); attr = (OSPTXMLATTR *)OSPPXMLElemNextAttr(ospvElem, attr)) { if (OSPPMsgGetAttrPart(OSPPXMLAttrGetName(attr)) == ospeAttrComponentId) { /* we found the component attribute. Get the value */ *ospvComponentId = (const unsigned char *)OSPPXMLAttrGetValue(attr); } } return;}/**//*-----------------------------------------------------------------------* * OSPPUsageCnfFromElement() - get usage confirmation from an XML element *-----------------------------------------------------------------------*/unsigned /* returns error code */OSPPUsageCnfFromElement( OSPTXMLELEM *ospvElem, /* input is XML element */ OSPTLIST *ospvUsageCnf /* where to put usage cnf list */){ unsigned ospvErrCode = OSPC_ERR_NO_ERROR; OSPTXMLELEM *elem = OSPC_OSNULL; OSPTXMLELEM *elem1 = OSPC_OSNULL; OSPTUSAGECNF *usagecnf = OSPC_OSNULL; OSPTTIME t = 0; unsigned char *compid = OSPC_OSNULL; unsigned char *messageId = OSPC_OSNULL; OSPTXMLELEM *ospvParent = OSPC_OSNULL; if (ospvElem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } if (ospvUsageCnf == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_DATA_NO_USAGECNF; } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPListNew(ospvUsageCnf); if (ospvErrCode == OSPC_ERR_NO_ERROR) { if(OSPPMsgGetElemPart(OSPPXMLElemGetName(ospvElem))==ospeElemMessage) { OSPPUsageCnfMessageIdFromElement(ospvElem, &messageId); /* ospvElem is pointing to the Message element. * The first child contains the Component element. * The following two lines of code change ospvElem from * pointing to the Message element to the Component element. */ ospvParent = ospvElem; ospvElem = (OSPTXMLELEM *)OSPPXMLElemFirstChild(ospvParent); } for(elem1 = (OSPTXMLELEM *)OSPPListFirst((OSPTLIST *)ospvElem); (elem1 != OSPC_OSNULL) && (ospvErrCode == OSPC_ERR_NO_ERROR); elem1 = (OSPTXMLELEM *)OSPPListNext((OSPTLIST *)ospvElem, elem1)) { /* create the usage confirmation object */ usagecnf = OSPPUsageCnfNew(); if (usagecnf == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_DATA_NO_USAGECNF; } else { /* * The Usage Confirmation element should consist of several child * elements. We'll run through what's there and pick out * the information we need. */ if(messageId != OSPC_OSNULL) { OSPPUsageCnfSetMessageId(usagecnf, messageId); } if(OSPPMsgGetElemPart(OSPPXMLElemGetName(elem1)) == ospeElemUsageCnf) { /* Get ComponentId */ if(elem1 != OSPC_OSNULL) { OSPPUsageCnfComponentIdFromElement(elem1,(const unsigned char**) &compid); if(compid != OSPC_OSNULL) { OSPPUsageCnfSetComponentId(usagecnf, compid); } } for (elem = (OSPTXMLELEM *)OSPPXMLElemFirstChild(elem1); (elem != (OSPTXMLELEM *)OSPC_OSNULL) && (ospvErrCode == OSPC_ERR_NO_ERROR); elem = (OSPTXMLELEM *)OSPPXMLElemNextChild(elem1, elem) ) { switch (OSPPMsgGetElemPart(OSPPXMLElemGetName(elem))) { case ospeElemMessage: if(OSPPMsgGetElemPart(OSPPXMLElemGetName(elem))==ospeElemMessage) { OSPPUsageCnfMessageIdFromElement(elem, &messageId); if(messageId != OSPC_OSNULL) { OSPPUsageCnfSetMessageId(usagecnf, messageId); } } break; case ospeElemUsageCnf: OSPPUsageCnfComponentIdFromElement(elem,(const unsigned char **) &compid); if(compid != OSPC_OSNULL) { OSPPUsageCnfSetComponentId(usagecnf, compid); } break; case ospeElemTimestamp: ospvErrCode = OSPPMsgTimeFromElement(elem, &t); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPUsageCnfSetTimestamp(usagecnf, t); } break; case ospeElemStatus: if(usagecnf->ospmUsageCnfStatus == OSPC_OSNULL) { /* usagecnf->ospmUsageCnfStatus = OSPPStatusNew(); */ ospvErrCode = OSPPStatusFromElement(elem, &(usagecnf->ospmUsageCnfStatus)); } break; case ospeElemTNAudit: ospvErrCode = OSPPTNAuditFromElement(elem, &(usagecnf->ospmUsageCnfTNAudit)); break; case ospeElemCSAuditTrigger: ospvErrCode = OSPPCSAuditFromElement(elem, &(usagecnf->ospmUsageCnfCSAudit)); break; default: /* * This is an element we don't understand. If it's * critical, then we have to report an error. * Otherwise we can ignore it. */ if (OSPPMsgElemIsCritical(elem)) { ospvErrCode = OSPC_ERR_XML_BAD_ELEMENT; } break; } } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { if(usagecnf != OSPC_OSNULL) { OSPPListAppend(ospvUsageCnf, usagecnf); usagecnf = OSPC_OSNULL; } } } } } } /* clean up */ if(ospvErrCode != OSPC_ERR_NO_ERROR) { if(ospvUsageCnf != OSPC_OSNULL) { while(!OSPPListEmpty(ospvUsageCnf)) { usagecnf = (OSPTUSAGECNF *)OSPPListRemove(ospvUsageCnf); if(usagecnf != OSPC_OSNULL) { OSPPUsageCnfDelete(&(usagecnf)); } } OSPPListDelete(ospvUsageCnf); } } if(usagecnf != OSPC_OSNULL) { OSPPUsageCnfDelete(&usagecnf); } return ospvErrCode;}/*-----------------------------------------------------------------------* * OSPPUsageCnfHasMessageId() - is the message id set ? *-----------------------------------------------------------------------*/unsigned /* returns non-zero if message id is set */OSPPUsageCnfHasMessageId( OSPTUSAGECNF *ospvUsageCnf){ return (ospvUsageCnf->ospmUsageCnfMessageId != OSPC_OSNULL);}/*-----------------------------------------------------------------------* * OSPPUsageCnfSetMessageId() - creates space and copies in the string. *-----------------------------------------------------------------------*/void OSPPUsageCnfSetMessageId( OSPTUSAGECNF *ospvUsageCnf, /* In - pointer to Usage Indication struct */ unsigned char *ospvMessageId /* In - pointer to message id string */ ){ int len = OSPM_STRLEN((const char *)ospvMessageId); if(ospvUsageCnf != OSPC_OSNULL) { if(ospvUsageCnf->ospmUsageCnfMessageId != OSPC_OSNULL) { OSPM_FREE(ospvUsageCnf->ospmUsageCnfMessageId); } OSPM_MALLOC(ospvUsageCnf->ospmUsageCnfMessageId, unsigned char, len + 1); OSPM_MEMSET(ospvUsageCnf->ospmUsageCnfMessageId, 0, len + 1); OSPM_MEMCPY(ospvUsageCnf->ospmUsageCnfMessageId, ospvMessageId, len); } return;}/* -----------------------------------------------------------------------------* * OSPPUsageCnfMessageIdFromElement() - Get message id attribute from element. * -----------------------------------------------------------------------------*/void OSPPUsageCnfMessageIdFromElement( OSPTXMLELEM *ospvElemIn, unsigned char **ospvMessageId){ OSPTXMLATTR *attr = (OSPTXMLATTR *)OSPC_OSNULL; /* look for the message id attribute */ for (attr = (OSPTXMLATTR *)OSPPXMLElemFirstAttr(ospvElemIn); (attr != (OSPTXMLATTR *)OSPC_OSNULL); attr = (OSPTXMLATTR *)OSPPXMLElemNextAttr(ospvElemIn, attr)) { if (OSPPMsgGetAttrPart(OSPPXMLAttrGetName(attr)) == ospeAttrMessageId) { /* we found the message attribute. Get the value */ *ospvMessageId = (unsigned char *)OSPPXMLAttrGetValue(attr); break; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -