📄 sipxtapitesttransfer.cpp
字号:
// // Setup Listeners // resetAutoAnswerCallback() ; resetAutoAnswerCallback2() ; sipxRC = sipxEventListenerAdd(g_hInst, UniversalEventValidatorCallback, &validatorSource) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst2, UniversalEventValidatorCallback, &validatorCalled1) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst2, AutoAnswerCallback, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst3, UniversalEventValidatorCallback, &validatorCalled2) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerAdd(g_hInst3, AutoAnswerCallback2, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Create Lines sipxRC = sipxLineAdd(g_hInst, "sip:foo@127.0.0.1:8000", &hLine) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorSource.waitForLineEvent(hLine, LINESTATE_PROVISIONED, LINESTATE_PROVISIONED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; sipxRC = sipxLineAdd(g_hInst2, "sip:foo@127.0.0.1:9100", &hReceivingLine1, CONTACT_AUTO) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorCalled1.waitForLineEvent(hReceivingLine1, LINESTATE_PROVISIONED, LINESTATE_PROVISIONED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; sipxRC = sipxLineAdd(g_hInst3, "sip:foo@127.0.0.1:10000", &hReceivingLine2, CONTACT_AUTO) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorCalled2.waitForLineEvent(hReceivingLine2, LINESTATE_PROVISIONED, LINESTATE_PROVISIONED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; // Create Conference sipxRC = sipxConferenceCreate(g_hInst, &hConf) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Setup call to transfer source (transferee) sipxRC = sipxConferenceAdd(hConf, hLine, "sip:foo@127.0.0.1:9100", &hCallSource) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Validate Calling Side: Transferee bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_DIALTONE, CALLSTATE_DIALTONE_CONFERENCE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_REMOTE_OFFERING, CALLSTATE_REMOTE_OFFERING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_REMOTE_ALERTING, CALLSTATE_REMOTE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; // Validated Called Side: Transferee bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_NEWCALL, CALLSTATE_NEW_CALL_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_OFFERING, CALLSTATE_OFFERING_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_ALERTING, CALLSTATE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; // Make sure we don't have any unexpected events CPPUNIT_ASSERT(!validatorSource.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorCalled1.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorCalled2.validateNoWaitingEvent()) ; // Setup call to transfer target (Transfer Target) sipxRC = sipxConferenceAdd(hConf, hLine, "sip:foo@127.0.0.1:10000", &hCallTarget) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Validate Calling Side: Transfer Target bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_DIALTONE, CALLSTATE_DIALTONE_CONFERENCE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_REMOTE_OFFERING, CALLSTATE_REMOTE_OFFERING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_REMOTE_ALERTING, CALLSTATE_REMOTE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; // Validated Called Side: Transfer Target bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_NEWCALL, CALLSTATE_NEW_CALL_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_OFFERING, CALLSTATE_OFFERING_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_ALERTING, CALLSTATE_ALERTING_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START) ; CPPUNIT_ASSERT(bRC) ; // Make sure we don't have any unexpected events CPPUNIT_ASSERT(!validatorSource.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorCalled1.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorCalled2.validateNoWaitingEvent()) ; // Kick off transfer sipxRC = sipxCallTransfer(hCallSource, hCallTarget) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Validate Calling Side validatorSource.setMaxLookhead(8) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_TRANSFER, CALLSTATE_TRANSFER_INITIATED, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_TRANSFER, CALLSTATE_TRANSFER_ACCEPTED, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_TRANSFER, CALLSTATE_TRANSFER_SUCCESS, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallSource, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_INACTIVE, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorSource.waitForCallEvent(hLine, hCallTarget, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; // Validate remote Transferee Side (called1) bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD, false) ; CPPUNIT_ASSERT(bRC) ; // BUG: Line handle should not be 0?? bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_NEWCALL, CALLSTATE_NEW_CALL_TRANSFER, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_REMOTE_OFFERING, CALLSTATE_REMOTE_OFFERING_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(g_hAutoAnswerCallbackLine, g_hAutoAnswerCallbackCall, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; // Validate remote Transfer Target Side (called2) bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2Other, CALLSTATE_NEWCALL, CALLSTATE_NEW_CALL_TRANSFERRED, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2Other, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2Other, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_START, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL, false) ; CPPUNIT_ASSERT(bRC) ; // Make sure we don't have any unexpected events CPPUNIT_ASSERT(!validatorSource.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorCalled1.validateNoWaitingEvent()) ; CPPUNIT_ASSERT(!validatorCalled2.validateNoWaitingEvent()) ; // Destroy calls. sipxRC = sipxConferenceDestroy(hConf) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; // Drop other calls SIPX_CALL hDestroy = g_hAutoAnswerCallbackCallOther ; sipxRC = sipxCallDestroy(hDestroy) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; hDestroy = g_hAutoAnswerCallbackCall2Other ; sipxRC = sipxCallDestroy(hDestroy) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_CONNECTED, CALLSTATE_CONNECTED_ACTIVE_HELD) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled1.waitForCallEvent(0, g_hAutoAnswerCallbackCallOther, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2Other, CALLSTATE_AUDIO_EVENT, CALLSTATE_AUDIO_STOP) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2Other, CALLSTATE_DISCONNECTED, CALLSTATE_DISCONNECTED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; bRC = validatorCalled2.waitForCallEvent(g_hAutoAnswerCallbackLine2, g_hAutoAnswerCallbackCall2Other, CALLSTATE_DESTROYED, CALLSTATE_DESTROYED_NORMAL) ; CPPUNIT_ASSERT(bRC) ; // Remove Listeners sipxRC = sipxEventListenerRemove(g_hInst, UniversalEventValidatorCallback, &validatorSource) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst2, UniversalEventValidatorCallback, &validatorCalled1) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst2, AutoAnswerCallback, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst3, UniversalEventValidatorCallback, &validatorCalled2) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxEventListenerRemove(g_hInst3, AutoAnswerCallback2, NULL) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxLineRemove(hLine) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxLineRemove(hReceivingLine1) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; sipxRC = sipxLineRemove(hReceivingLine2) ; CPPUNIT_ASSERT(sipxRC == SIPX_RESULT_SUCCESS) ; } OsTask::delay(TEST_DELAY) ; checkForLeaks() ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -