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

📄 callbacks.cpp

📁 基于sipfoundy 公司开发的sipx协议API
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//// Copyright (C) 2005 Pingtel Corp.// // $$//////////////////////////////////////////////////////////////////////////////#include <cppunit/CompilerOutputter.h>#include <cppunit/extensions/TestFactoryRegistry.h>#include <cppunit/ui/text/TestRunner.h>#include "sipXtapiTest.h"#include "EventValidator.h"#include "EventRecorder.h"extern SIPX_INST g_hInst;extern EventRecorder g_recorder ;extern EventRecorder g_lineRecorder; extern EventRecorder g_lineRecorder2; extern SIPX_INST g_hInst2;extern EventRecorder g_recorder2 ;extern SIPX_INST g_hInst3;extern EventRecorder g_recorder3 ;extern bool g_bCallbackCalled;extern SIPX_CALL ghCallHangup;SIPX_CALL g_hAutoAnswerCallbackCall ;SIPX_CALL g_hAutoAnswerCallbackCallOther ;SIPX_LINE g_hAutoAnswerCallbackLine ;SIPX_CALL g_hAutoAnswerCallbackCall2 ;SIPX_CALL g_hAutoAnswerCallbackCall2Other ;SIPX_LINE g_hAutoAnswerCallbackLine2 ;SIPX_CALL g_hAutoAnswerHangupCallbackCall ;SIPX_LINE g_hAutoAnswerHangupCallbackLine ;SIPX_CALL g_hAutoRejectCallbackCall ;SIPX_LINE g_hAutoRejectCallbackLine ;SIPX_CALL g_hAutoRedirectCallbackCall ;SIPX_LINE g_hAutoRedirectCallbackLine ;bool UniversalEventValidatorCallback(SIPX_EVENT_CATEGORY category,                                     void* pInfo,                                     void* pUserData){    EventValidator* pValidator = (EventValidator*) pUserData ;    assert(pValidator) ;    pValidator->addEvent(category, pInfo) ;    // Uncomment for debugging purposes...    // char cBuffer[1000];     // printf("%s: %s\n", pValidator->getTitle(), sipxEventToString(category, pInfo, cBuffer, 1000)) ;    return true ;}void resetAutoAnswerCallback() {    g_hAutoAnswerCallbackCall = 0 ;    g_hAutoAnswerCallbackCallOther = 0 ;}bool AutoAnswerCallback(SIPX_EVENT_CATEGORY category,                         void* pInfo,                         void* pUserData){    if (category == EVENT_CATEGORY_CALLSTATE)    {        SIPX_CALLSTATE_INFO* pCallInfo = (SIPX_CALLSTATE_INFO*) pInfo;        if (g_hAutoAnswerCallbackCall == 0)        {            g_hAutoAnswerCallbackCall = pCallInfo->hCall;        }        else if (g_hAutoAnswerCallbackCall != pCallInfo->hCall)        {            g_hAutoAnswerCallbackCallOther = pCallInfo->hCall ;        }        g_hAutoAnswerCallbackLine = pCallInfo->hLine;                        // If we have user data verify the line url against it        if (pUserData)        {            char szBuffer[500] ;             size_t nBuffer ;            if (strlen((const char*) pUserData))            {                if (pCallInfo->hLine)  // hLine can be 0, and therefore, sipxLineGetURI should fail)                {                    CPPUNIT_ASSERT_EQUAL(sipxLineGetURI(pCallInfo->hLine, szBuffer, sizeof(szBuffer), nBuffer), SIPX_RESULT_SUCCESS) ;                }            }        }        switch(pCallInfo->event)        {            case CALLSTATE_OFFERING:                sipxCallAccept(pCallInfo->hCall) ;                break ;            case CALLSTATE_ALERTING:                sipxCallAnswer(pCallInfo->hCall) ;                break ;            case CALLSTATE_DISCONNECTED:                {                    SIPX_CALL hDestroy = pCallInfo->hCall ;                    sipxCallDestroy(hDestroy) ;                 }                break ;            default:                break ;        }    }             return true;}void resetAutoAnswerCallback2() {    g_hAutoAnswerCallbackCall2 = 0 ;    g_hAutoAnswerCallbackCall2Other = 0 ;}bool AutoAnswerCallback2(SIPX_EVENT_CATEGORY category,                          void* pInfo,                          void* pUserData){    if (category == EVENT_CATEGORY_CALLSTATE)    {        SIPX_CALLSTATE_INFO* pCallInfo = (SIPX_CALLSTATE_INFO*) pInfo;        if (g_hAutoAnswerCallbackCall2 == 0)        {            g_hAutoAnswerCallbackCall2 = pCallInfo->hCall;        }        else if (g_hAutoAnswerCallbackCall2 != pCallInfo->hCall)        {            g_hAutoAnswerCallbackCall2Other = pCallInfo->hCall;        }        g_hAutoAnswerCallbackLine2 = pCallInfo->hLine;                        // If we have user data verify the line url against it        if (pUserData)        {            char szBuffer[500] ;             size_t nBuffer ;            if (strlen((const char*) pUserData))            {                if (pCallInfo->hLine)  // hLine can be 0, and therefore, sipxLineGetURI should fail)                {                    CPPUNIT_ASSERT_EQUAL(sipxLineGetURI(pCallInfo->hLine, szBuffer, sizeof(szBuffer), nBuffer), SIPX_RESULT_SUCCESS) ;                }            }        }        switch(pCallInfo->event)        {            case CALLSTATE_OFFERING:                sipxCallAccept(pCallInfo->hCall) ;                break ;            case CALLSTATE_ALERTING:                sipxCallAnswer(pCallInfo->hCall) ;                break ;            case CALLSTATE_DISCONNECTED:                {                    SIPX_CALL hDestroy = pCallInfo->hCall ;                    sipxCallDestroy(hDestroy) ;                 }                break ;            case CALLSTATE_DESTROYED:                {                    int i ;                    i = 2;                 }                break ;            default:                break ;        }    }             return true;}bool AutoAnswerHangupCallback(SIPX_EVENT_CATEGORY category,                               void* pInfo,                               void* pUserData){    if (category == EVENT_CATEGORY_CALLSTATE)    {        SIPX_CALLSTATE_INFO* pCallInfo = (SIPX_CALLSTATE_INFO*) pInfo;        g_hAutoAnswerHangupCallbackCall = pCallInfo->hCall;        g_hAutoAnswerHangupCallbackLine = pCallInfo->hLine;                        // If we have user data verify the line url against it        if (pUserData)        {            char szBuffer[500] ;             size_t nBuffer ;            if (strlen((const char*) pUserData))            {                if (g_hAutoAnswerHangupCallbackLine)  // hLine can be 0, and therefore, sipxLineGetURI should fail)                {                    CPPUNIT_ASSERT_EQUAL(sipxLineGetURI(g_hAutoAnswerHangupCallbackLine, szBuffer, sizeof(szBuffer), nBuffer), SIPX_RESULT_SUCCESS) ;                }            }        }        switch(pCallInfo->event)        {            case CALLSTATE_OFFERING:                sipxCallAccept(g_hAutoAnswerHangupCallbackCall) ;                break ;            case CALLSTATE_ALERTING:                {                    sipxCallAnswer(g_hAutoAnswerHangupCallbackCall) ;                    OsTask::delay(CALL_DELAY);                    SIPX_CALL hDestroy = g_hAutoAnswerHangupCallbackCall ;                    sipxCallDestroy(hDestroy) ;                }                break ;            default:                break ;        }    }             return true;}bool AutoRejectCallback(SIPX_EVENT_CATEGORY category,                         void* pInfo,                         void* pUserData) {    if (category == EVENT_CATEGORY_CALLSTATE)    {        SIPX_CALLSTATE_INFO* pCallInfo = (SIPX_CALLSTATE_INFO*) pInfo;        g_hAutoRejectCallbackCall = pCallInfo->hCall;        g_hAutoRejectCallbackLine = pCallInfo->hLine;                        // If we have user data verify the line url against it        if (pUserData)        {            char szBuffer[500] ;             size_t nBuffer ;            if (strlen((const char*) pUserData))            {                if (g_hAutoRejectCallbackLine)  // hLine can be 0, and therefore, sipxLineGetURI should fail)                {                    CPPUNIT_ASSERT_EQUAL(sipxLineGetURI(g_hAutoRejectCallbackLine, szBuffer, sizeof(szBuffer), nBuffer), SIPX_RESULT_SUCCESS) ;                }            }        }        switch(pCallInfo->event)        {            case CALLSTATE_OFFERING:                sipxCallReject(g_hAutoRejectCallbackCall) ;                break ;                        case CALLSTATE_DISCONNECTED:                {                    SIPX_CALL hDestroy = g_hAutoRejectCallbackCall ;                    sipxCallDestroy(hDestroy) ;                }                break ;            default:                break ;        }    }             return true;}bool AutoRedirectCallback(SIPX_EVENT_CATEGORY category,                           void* pInfo,                           void* pUserData) {    if (category == EVENT_CATEGORY_CALLSTATE)    {        SIPX_CALLSTATE_INFO* pCallInfo = (SIPX_CALLSTATE_INFO*) pInfo;        g_hAutoRedirectCallbackCall = pCallInfo->hCall;        g_hAutoRedirectCallbackLine = pCallInfo->hLine;                        // If we have user data verify the line url against it        if (pUserData)        {            char szBuffer[500] ;             size_t nBuffer ;            if (strlen((const char*) pUserData))            {                if (g_hAutoRedirectCallbackLine)  // hLine can be 0, and therefore, sipxLineGetURI should fail)                {                    CPPUNIT_ASSERT_EQUAL(sipxLineGetURI(g_hAutoRedirectCallbackLine, szBuffer, sizeof(szBuffer), nBuffer), SIPX_RESULT_SUCCESS) ;                }            }        }        switch(pCallInfo->event)        {            case CALLSTATE_OFFERING:                sipxCallRedirect(g_hAutoRedirectCallbackCall, "sip:foo@127.0.0.1:10000");				                                break ;            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -