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

📄 ospusageind.c

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 C
📖 第 1 页 / 共 3 页
字号:
            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 + -