📄 ospusageind.c
字号:
OSPPStatisticsDelete(&((*ospvUsageInd)->ospmUsageIndTNStats)); } OSPPListDelete(&((*ospvUsageInd)->ospmUsageIndDestinationAlternate)); OSPM_FREE(*ospvUsageInd); *ospvUsageInd = OSPC_OSNULL; } return;}/**//*-----------------------------------------------------------------------* * OSPPUsageIndSetCallId() - sets the call ID for an usage *-----------------------------------------------------------------------*/void /* nothing returned */OSPPUsageIndSetCallId( OSPTUSAGEIND *ospvUsageInd, /* usage indication */ OSPTCALLID *ospvCallId /* call ID */){ if (ospvUsageInd != OSPC_OSNULL) { if ((ospvCallId) != OSPC_OSNULL) { if ((ospvUsageInd)->ospmUsageIndCallId != OSPC_OSNULL) { OSPPCallIdDelete(&((ospvUsageInd)->ospmUsageIndCallId)); } (ospvUsageInd)->ospmUsageIndCallId = OSPPCallIdNew((ospvCallId)->ospmCallIdLen, (ospvCallId)->ospmCallIdVal); } }}/**//*-----------------------------------------------------------------------* * OSPPUsageIndHasTNStatistics() - does usageind have statistics? *-----------------------------------------------------------------------*/OSPTBOOL OSPPUsageIndHasTNStatistics( OSPTUSAGEIND *ospvUsageInd ){ OSPTBOOL hasstats = OSPC_FALSE; if(ospvUsageInd != OSPC_OSNULL) { if(ospvUsageInd->ospmUsageIndTNStats != OSPC_OSNULL) { hasstats = OSPC_TRUE; } } return hasstats;}/**//*-----------------------------------------------------------------------* * OSPPUsageIndSetTNStatistics() - set values for statistics in usageind *-----------------------------------------------------------------------*/voidOSPPUsageIndSetTNStatistics( OSPTUSAGEIND *ospvUsageInd, /* In - ptr to usage ind */ OSPTSTATISTICS *ospvStatistics /* In - ptr to completed stats struct*/){ if((ospvUsageInd != OSPC_OSNULL) && (ospvStatistics != OSPC_OSNULL)) { ospvUsageInd->ospmUsageIndTNStats = OSPPStatisticsNew(); OSPM_MEMCPY(ospvUsageInd->ospmUsageIndTNStats, ospvStatistics, sizeof(OSPTSTATISTICS)); } return;}/**//*-----------------------------------------------------------------------* * OSPPUsageIndToElement() - create an XML element from a usage ind *-----------------------------------------------------------------------*/int /* returns error code */OSPPUsageIndToElement( OSPTLIST *ospvUsageInd, /* usage ind list */ OSPTXMLELEM **ospvElem /* where to put XML element pointer */){ int ospvErrCode = OSPC_ERR_NO_ERROR; OSPTXMLELEM *usgindelem = OSPC_OSNULL, *subelem = OSPC_OSNULL; OSPTXMLATTR *attr = OSPC_OSNULL; int len = 0; OSPTTRXID trxid = 0; OSPTALTINFO *altinfo = OSPC_OSNULL; OSPTUSAGEIND *usage = OSPC_OSNULL; char random[OSPC_MAX_RANDOM]; OSPTBOOL isbase64 = OSPC_TRUE; OSPM_MEMSET(random, 0, OSPC_MAX_RANDOM); if (ospvElem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } if (ospvUsageInd == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_DATA_NO_USAGEIND; } if(ospvErrCode == OSPC_ERR_NO_ERROR) { /* create the "Message" element as the parent */ *ospvElem = OSPPXMLElemNew("Message", ""); if(*ospvElem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } else { attr = OSPPXMLAttrNew((const unsigned char *)OSPPMsgGetAttrName(ospeAttrMessageId), (const unsigned char *)"1"); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(*ospvElem, attr); attr = OSPC_OSNULL; } else { ospvErrCode = OSPC_ERR_XML_NO_ATTR; } /* random */ if((OSPPUtilGetRandom(random, 0) > 0) && (ospvErrCode == OSPC_ERR_NO_ERROR)) { attr = OSPPXMLAttrNew((const unsigned char *)OSPPMsgGetAttrName(ospeAttrRandom), (const unsigned char *)random); if (attr != OSPC_OSNULL) { OSPPXMLElemAddAttr(*ospvElem, attr); attr = OSPC_OSNULL; } else { ospvErrCode = OSPC_ERR_XML_NO_ATTR; } } } } if(ospvErrCode == OSPC_ERR_NO_ERROR) { /* Build multiple usage ind if there are more than one */ for(usage = (OSPTUSAGEIND *)OSPPListFirst(ospvUsageInd); (ospvErrCode == OSPC_ERR_NO_ERROR) && (usage != OSPC_OSNULL); usage = (OSPTUSAGEIND *)OSPPListNext(ospvUsageInd, usage)) { /* create the usage element */ usgindelem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemUsageInd), ""); if (usgindelem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } /* now add the attributes to the parent -- in this case the component id */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew((const unsigned char *)OSPPMsgGetAttrName(ospeAttrComponentId), (OSPPUsageIndHasComponentId(usage))?(const unsigned char *)(usage->ospmUsageIndComponentId): (const unsigned char *)"NULL"); if (attr == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ATTR; } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddAttr(usgindelem, attr); attr = OSPC_OSNULL; } /* now add the children - start with timestamp */ if ((ospvErrCode == OSPC_ERR_NO_ERROR) && OSPPUsageIndHasTimestamp(usage)) { ospvErrCode = OSPPMsgTimeToElement(OSPPUsageIndGetTimestamp(usage), (const unsigned char *)OSPPMsgGetElemName(ospeElemTimestamp), &subelem); } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } /* add role */ if ((ospvErrCode == OSPC_ERR_NO_ERROR) && OSPPUsageIndHasRole(usage)) { ospvErrCode = OSPPMsgRoleToElement(OSPPUsageIndGetRole(usage), (const unsigned char *) OSPPMsgGetElemName(ospeElemRole), &subelem); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } /* add the transaction ID */ if ((ospvErrCode == OSPC_ERR_NO_ERROR) && OSPPUsageIndHasTransactionId(usage)) { len = sizeof(OSPTTRXID); trxid = OSPPUsageIndGetTransactionId(usage); ospvErrCode = OSPPMsgTXToElement(trxid, (const unsigned char *)OSPPMsgGetElemName(ospeElemTransId), &subelem); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } /* add the call ID */ if ((ospvErrCode == OSPC_ERR_NO_ERROR) && OSPPUsageIndHasCallId(usage)) { ospvErrCode = OSPPCallIdToElement(OSPPUsageIndGetCallId(usage), &subelem, isbase64); } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } /* add the source number */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { subelem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemSrcInfo), (const char *)OSPPUsageIndGetSourceNumber(usage)); if (subelem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew((const unsigned char *)OSPPMsgGetAttrName(ospeAttrType), (const unsigned char *)"e164"); if (attr == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ATTR; } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddAttr(subelem, attr); attr = OSPC_OSNULL; } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } /* add the source alternates */ if ((ospvErrCode == OSPC_ERR_NO_ERROR) && OSPPUsageIndHasSourceAlt(usage)) { for (altinfo = (OSPTALTINFO *)OSPPUsageIndFirstSourceAlt(usage); ((altinfo != (OSPTALTINFO *)OSPC_OSNULL) && (ospvErrCode == OSPC_ERR_NO_ERROR)); altinfo = (OSPTALTINFO *)OSPPUsageIndNextSourceAlt(usage, altinfo)) { ospvErrCode = OSPPAltInfoToElement(altinfo, &subelem, ospeElemSrcAlt); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } } /* add the destination number */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { subelem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemDestInfo), (const char *)OSPPUsageIndGetDestNumber(usage)); if (subelem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { attr = OSPPXMLAttrNew((const unsigned char *)OSPPMsgGetAttrName(ospeAttrType), (const unsigned char *)"e164"); if (attr == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ATTR; } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddAttr(subelem, attr); attr = OSPC_OSNULL; } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } /* add the destination alternates */ if ((ospvErrCode == OSPC_ERR_NO_ERROR) && OSPPUsageIndHasDestinationAlt(usage)) { for (altinfo = (OSPTALTINFO *)OSPPUsageIndFirstDestinationAlt(usage); ((altinfo != (OSPTALTINFO *)OSPC_OSNULL) && (ospvErrCode == OSPC_ERR_NO_ERROR)); altinfo = (OSPTALTINFO *)OSPPUsageIndNextDestinationAlt(usage, altinfo)) { ospvErrCode = OSPPAltInfoToElement(altinfo, &subelem, ospeElemDestAlt); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } } /* add usage detail (if appropriate) */ if ((ospvErrCode == OSPC_ERR_NO_ERROR) && OSPPUsageIndHasDuration(usage)) { ospvErrCode = OSPPUsageToElement( (unsigned)OSPPUsageIndGetDuration(usage), &subelem); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } /* now add the transnexus extensions (if available) */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { if (OSPPUsageIndHasTNCustId(usage)) { ospvErrCode = OSPPMsgNumToElement( OSPPUsageIndGetTNCustId(usage), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNCustId), &subelem); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; if (OSPPUsageIndHasTNDeviceId(usage)) { ospvErrCode = OSPPMsgNumToElement( OSPPUsageIndGetTNDeviceId(usage), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNDeviceId), &subelem); if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } } } } /* Failure reason */ if(ospvErrCode == OSPC_ERR_NO_ERROR) { if(OSPPUsageIndHasTNFailReason(usage)) { ospvErrCode = OSPPMsgNumToElement( OSPPUsageIndGetTNFailReason(usage), (const unsigned char *)OSPPMsgGetElemName(ospeElemTNFailReason), &subelem); if(ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } } /* Statistics */ if(ospvErrCode == OSPC_ERR_NO_ERROR) { if(OSPPUsageIndHasTNStatistics(usage)) { ospvErrCode = OSPPStatisticsToElement(usage->ospmUsageIndTNStats, &subelem); if(ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(usgindelem, subelem); subelem = OSPC_OSNULL; } } } if(ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, usgindelem); usgindelem = OSPC_OSNULL; } } /* end for */ } /* if for any reason we found an error - destroy any elements created */ if (ospvErrCode != OSPC_ERR_NO_ERROR) { if(*ospvElem != OSPC_OSNULL) { OSPPXMLElemDelete(ospvElem); } } if(usgindelem != OSPC_OSNULL) { OSPPXMLElemDelete(&usgindelem); } if(subelem != OSPC_OSNULL) { OSPPXMLElemDelete(&subelem); } if(attr != OSPC_OSNULL) { OSPPXMLAttrDelete(&attr); } return(ospvErrCode);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -