📄 ospusage.c
字号:
/**########################################################################*########################################################################*########################################################################* * COPYRIGHT (c) 1998, 1999 by TransNexus, LLC * * This software contains proprietary and confidential information * of TransNexus, LLC. Except as may be set forth in the license * agreement under which this software is supplied, use, disclosure, * or reproduction is prohibited without the prior, express, written* consent of TransNexus, LLC. * *******#########################################################################*#########################################################################*#########################################################################*//* * ospusage.c - OSP usage detail functions */#include "osp.h"#include "osperrno.h"#include "ospbfr.h"#include "osplist.h"#include "ospxmlattr.h"#include "ospxmlelem.h"#include "ospmsgattr.h"#include "ospmsgelem.h"#include "ospusage.h"#include "ospmsg.h"/**//*-----------------------------------------------------------------------* * OSPPUsageFromElement() - get usage detail from an XML element *-----------------------------------------------------------------------*/unsigned /* returns error code */OSPPUsageFromElement( OSPTXMLELEM *ospvElem, /* input is XML element */ unsigned *ospvUsage /* where to put usage value */){ unsigned ospvErrCode = OSPC_ERR_NO_ERROR; OSPTXMLELEM *elem = OSPC_OSNULL; unsigned gotAmount = OSPC_FALSE; unsigned gotIncrement = OSPC_FALSE; unsigned gotUnit = OSPC_FALSE; unsigned long amount=0; unsigned long increment=0; if (ospvElem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } if (ospvUsage == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_DATA_NO_USAGE; } if (ospvErrCode == OSPC_ERR_NO_ERROR) { for ( elem = (OSPTXMLELEM *)OSPPXMLElemFirstChild(ospvElem); (elem != (OSPTXMLELEM *)OSPC_OSNULL) && (ospvErrCode == OSPC_ERR_NO_ERROR); elem = (OSPTXMLELEM *)OSPPXMLElemNextChild(ospvElem, elem) ) { switch (OSPPMsgGetElemPart(OSPPXMLElemGetName(elem))) { case ospeElemAmount: gotAmount = OSPC_TRUE; ospvErrCode = OSPPMsgNumFromElement(elem, &amount); break; case ospeElemIncrement: ospvErrCode = OSPPMsgNumFromElement(elem, &increment); gotIncrement = OSPC_TRUE; break; case ospeElemService: /* we don't do anything with service at this point */ break; case ospeElemUnit: gotUnit = OSPC_TRUE; /* * The only unit we support is seconds. If this is * different, then we declare an error. */ if (OSPM_STRCMP(OSPPXMLElemGetValue(elem), "s") != 0) { ospvErrCode = OSPC_ERR_BAD_SERVICE; } 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 (gotAmount && gotIncrement && gotUnit) { *ospvUsage = (unsigned)increment * (unsigned)amount; } else { ospvErrCode = OSPC_ERR_XML_BAD_ELEMENT; } } return(ospvErrCode);}/**//*-----------------------------------------------------------------------* * OSPPUsageToElement() - create an XML element from usage detail *-----------------------------------------------------------------------*/unsigned /* returns error code */OSPPUsageToElement( unsigned ospvUsage, /* usage value */ OSPTXMLELEM **ospvElem /* where to put XML element pointer */){ unsigned ospvErrCode = OSPC_ERR_NO_ERROR; OSPTXMLELEM *elem = OSPC_OSNULL; if (ospvElem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } if (ospvErrCode == OSPC_ERR_NO_ERROR) { /* create the parent element */ *ospvElem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemUsageDetail), ""); if (*ospvElem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } } /* now add the children - start with the service */ /* the service is blank for basic service */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { elem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemService), ""); if (elem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); } /* now add the amount (which is the usage) */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { ospvErrCode = OSPPMsgNumToElement(ospvUsage, (const unsigned char *)OSPPMsgGetElemName(ospeElemAmount), &elem); } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); } /* now add the increment - for us always 1 */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { ospvErrCode = OSPPMsgNumToElement(1, (const unsigned char *)OSPPMsgGetElemName(ospeElemIncrement), &elem); } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); } /* the units are seconds */ if (ospvErrCode == OSPC_ERR_NO_ERROR) { elem = OSPPXMLElemNew(OSPPMsgGetElemName(ospeElemUnit), "s"); if (elem == OSPC_OSNULL) { ospvErrCode = OSPC_ERR_XML_NO_ELEMENT; } } if (ospvErrCode == OSPC_ERR_NO_ERROR) { OSPPXMLElemAddChild(*ospvElem, elem); } /* if for any reason we found an error - destroy any elements created */ if ((ospvErrCode != OSPC_ERR_NO_ERROR) && (*ospvElem != OSPC_OSNULL)) { OSPPXMLElemDelete(ospvElem); } return(ospvErrCode);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -