Hi, I tried sipxCallRedirect these days. It happens that the uri specified in the szForwardURL parameter doesn't match the Contact header in the 302 message.
I check out "http://scm.sipfoundry.org/rep/sipX/branches/sipXtapi" at version 8101, run OnDo Server at 192.168.0.176:5060, run my sipXtapi based Win32 console program at 192.168.0.178:5080 (register as sip:[EMAIL PROTECTED]), run XXX soft phone at 192.168.0.178:9873 (register as sip:[EMAIL PROTECTED]) and run another XXX soft phone at 192.168.0.104:9208 (register as sip:[EMAIL PROTECTED]). I let my Win32 console program redirect all incoming calls to "sip:[EMAIL PROTECTED]". But when test3 call test1, test1 redirect test3 to "[EMAIL PROTECTED]:5080" (see the Contact header in the 10th packet in the attachment). ========= here is my sipXtapi based Win32 console program ====== #include <stdio.h> #include "tapi/sipXtapi.h" #include "tapi/sipXtapiEvents.h" SIPX_CALL g_hCall = 0; bool EventCallbackProc( SIPX_EVENT_CATEGORY category, void *pInfo, void *pUserData ) { SIPX_RESULT result; char szText[1024]; sipxEventToString(category, pInfo, szText, 1020); ::strcat(szText, "\r\n"); ::printf(szText); switch (category) { case EVENT_CATEGORY_CALLSTATE: { SIPX_CALLSTATE_INFO* pCallInfo = (SIPX_CALLSTATE_INFO*) pInfo; printf("hCall %d\n", g_hCall = pCallInfo->hCall); char szInfo[1024]; szInfo[0]=0; result = sipxCallGetRequestURI(g_hCall, szInfo, 1024); printf("sipxCallGetRequestURI(%s) = %d\n", szInfo, result); result = sipxCallGetRemoteUserAgent(g_hCall, szInfo, 1024); printf("sipxCallGetRemoteUserAgent(%s) = %d\n", szInfo, result); result = sipxCallGetRemoteID(g_hCall, szInfo, 1024); printf("sipxCallGetRemoteID(%s) = %d\n", szInfo, result); result = sipxCallGetRemoteContact(g_hCall, szInfo, 1024); printf("sipxCallGetRemoteContact(%s) = %d\n", szInfo, result); result = sipxCallGetLocalID(g_hCall, szInfo, 1024); printf("sipxCallGetLocalID(%s) = %d\n", szInfo, result); result = sipxCallGetID(g_hCall, szInfo, 1024); printf("sipxCallGetID(%s) = %d\n", szInfo, result); switch (pCallInfo->event) { case CALLSTATE_OFFERING: sipxCallRedirect(pCallInfo->hCall, "sip:[EMAIL PROTECTED]:5060"); break; case CALLSTATE_ALERTING: sipxCallAnswer(pCallInfo->hCall); break; case CALLSTATE_CONNECTED: break; case CALLSTATE_DISCONNECTED: result = sipxCallDestroy(pCallInfo->hCall); printf("CALLSTATE_DISCONNECTED = %d\n", result); break; } break; } } return true; } int main() { SIPX_RESULT result; SIPX_INST hInst; SIPX_LINE hLine; result = sipxInitialize(&hInst, 5080, 5080, -1, -2); { result = sipxEventListenerAdd(hInst, EventCallbackProc, NULL); result = sipxConfigEnableRport(hInst, true); // dumpLocalContacts { SIPX_CONTACT_ADDRESS contacts[10] ; size_t nContacts; SIPX_RESULT status = sipxConfigGetLocalContacts( hInst, contacts, 10, nContacts) ; if (status == SIPX_RESULT_SUCCESS) { for (size_t i = 0; i<nContacts; i++) { const char* szType = "UNKNOWN" ; switch (contacts[i].eContactType) { case CONTACT_LOCAL: szType = "LOCAL" ; break ; case CONTACT_NAT_MAPPED: szType = "NAT_MAPPED" ; break ; case CONTACT_RELAY: szType = "RELAY" ; break ; case CONTACT_CONFIG: szType = "CONFIG" ; break ; } printf("<-> Type %s, Interface: %s, Ip %s, Port %d\n", szType, contacts[i].cInterface, contacts[i].cIpAddress, contacts[i].iPort) ; } } else { printf("<-> Unable to query local contact addresses\n") ; } } result = sipxConfigSetOutboundProxy(hInst, "192.168.0.176"); { result = sipxLineAdd(hInst, "[EMAIL PROTECTED]", &hLine); ::Sleep(500); result = sipxLineAddCredential( hLine, "user1", "password1", ""); printf("\nregister\n"); result = sipxLineRegister(hLine, true); ::Sleep(6000); { printf("\nCall me\n"); ::Sleep(20000); printf("sipxCallDestroy(%d) =", g_hCall); result = sipxCallDestroy(g_hCall); printf("%d\n", result); ::Sleep(1000); } printf("\nunregister\n"); result = sipxLineRegister(hLine, false); ::Sleep(1000); result = sipxLineRemove(hLine); ::Sleep(1000); } result = sipxEventListenerRemove(hInst, EventCallbackProc, NULL); ::Sleep(1000); } result = sipxUnInitialize(hInst); ::Sleep(1000); return 0; } ============================================================= when i run it, it says: <-> Type LOCAL, Interface: eth0, Ip 192.168.0.178, Port 5080 <-> Type LOCAL, Interface: eth0, Ip 192.168.0.178, Port 5080 EVENT_CATEGORY_LINESTATE::PROVISIONED::PROVISIONED_NORMAL register EVENT_CATEGORY_LINESTATE::REGISTERING::REGISTERING_NORMAL EVENT_CATEGORY_LINESTATE::REGISTERED::REGISTERED_NORMAL Call me EVENT_CATEGORY_CALLSTATE::NEWCALL::CAUSE_NORMAL hCall 1 sipxCallGetRequestURI(sip:[EMAIL PROTECTED]:5080) = 0 sipxCallGetRemoteUserAgent(CounterPath eyeBeam release 3013o stamp 23916) = 0 sipxCallGetRemoteID("test3"<sip:[EMAIL PROTECTED]>) = 0 sipxCallGetRemoteContact(sip:) = 0 sipxCallGetLocalID(<sip:[EMAIL PROTECTED]:5060>;tag=9851) = 0 sipxCallGetID([EMAIL PROTECTED]) = 0 EVENT_CATEGORY_CALLSTATE::OFFERING::CAUSE_NORMAL hCall 1 sipxCallGetRequestURI(sip:[EMAIL PROTECTED]:5080) = 0 sipxCallGetRemoteUserAgent(CounterPath eyeBeam release 3013o stamp 23916) = 0 sipxCallGetRemoteID("test3"<sip:[EMAIL PROTECTED]>) = 0 sipxCallGetRemoteContact(sip:) = 0 sipxCallGetLocalID(<sip:[EMAIL PROTECTED]:5060>;tag=9851) = 0 sipxCallGetID([EMAIL PROTECTED]) = 0 EVENT_CATEGORY_CALLSTATE::DISCONNECTED::CAUSE_REDIRECTED hCall 1 sipxCallGetRequestURI(sip:[EMAIL PROTECTED]:5080) = 0 sipxCallGetRemoteUserAgent(CounterPath eyeBeam release 3013o stamp 23916) = 0 sipxCallGetRemoteID("test3"<sip:[EMAIL PROTECTED]>;tag=025b9425) = 0 sipxCallGetRemoteContact(sip:) = 0 sipxCallGetLocalID(<sip:[EMAIL PROTECTED]:5060>;tag=9851) = 0 sipxCallGetID([EMAIL PROTECTED]) = 0 CALLSTATE_DISCONNECTED = 0 EVENT_CATEGORY_CALLSTATE::DESTROYED::CAUSE_NORMAL hCall 1 sipxCallGetRequestURI() = 0 sipxCallGetRemoteUserAgent() = 1 sipxCallGetRemoteID() = 1 sipxCallGetRemoteContact() = 1 sipxCallGetLocalID() = 1 sipxCallGetID() = 1 EVENT_CATEGORY_CALLSTATE::NEWCALL::CAUSE_NORMAL hCall 2 sipxCallGetRequestURI(sip:[EMAIL PROTECTED]:5080) = 0 sipxCallGetRemoteUserAgent(CounterPath eyeBeam release 3013o stamp 23916) = 0 sipxCallGetRemoteID("test3"<sip:[EMAIL PROTECTED]>) = 0 sipxCallGetRemoteContact(sip:) = 0 sipxCallGetLocalID(<sip:[EMAIL PROTECTED]>;tag=20817) = 0 sipxCallGetID([EMAIL PROTECTED]) = 0 EVENT_CATEGORY_CALLSTATE::OFFERING::CAUSE_NORMAL hCall 2 sipxCallGetRequestURI(sip:[EMAIL PROTECTED]:5080) = 0 sipxCallGetRemoteUserAgent(CounterPath eyeBeam release 3013o stamp 23916) = 0 sipxCallGetRemoteID("test3"<sip:[EMAIL PROTECTED]>) = 0 sipxCallGetRemoteContact(sip:) = 0 sipxCallGetLocalID(<sip:[EMAIL PROTECTED]>;tag=20817) = 0 sipxCallGetID([EMAIL PROTECTED]) = 0 EVENT_CATEGORY_CALLSTATE::DISCONNECTED::CAUSE_REDIRECTED hCall 2 sipxCallGetRequestURI(sip:[EMAIL PROTECTED]:5080) = 0 sipxCallGetRemoteUserAgent(CounterPath eyeBeam release 3013o stamp 23916) = 0 sipxCallGetRemoteID("test3"<sip:[EMAIL PROTECTED]>;tag=025b9425) = 0 sipxCallGetRemoteContact(sip:) = 0 sipxCallGetLocalID(<sip:[EMAIL PROTECTED]>;tag=20817) = 0 sipxCallGetID([EMAIL PROTECTED]) = 0 CALLSTATE_DISCONNECTED = 0 EVENT_CATEGORY_CALLSTATE::DESTROYED::CAUSE_NORMAL hCall 2 sipxCallDestroy(2) =0 unregister sipxCallGetRequestURI() = 0 sipxCallGetRemoteUserAgent() = 1 sipxCallGetRemoteID() = 1 sipxCallGetRemoteContact() = 1 sipxCallGetLocalID() = 1 sipxCallGetID() = 1 anything wrong with my code? yuhang
CapturedPackets.rar
Description: Binary data
MyWinConsoleProgram.rar
Description: Binary data
_______________________________________________ sipxtapi-dev mailing list [email protected] List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/
