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

📄 ospusagecnf.c

📁 mgcp协议源代码。支持多种编码:g711
💻 C
📖 第 1 页 / 共 2 页
字号:
{    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 + -