⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ospusage.c

📁 mgcp协议源代码。支持多种编码:g711
💻 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 + -