From 6b1f00599e829d6e85574403425bb67468b673a3 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Mon, 31 Dec 2007 11:27:35 +0000 Subject: Open access point establishment selection before starting the Symbian application. Also added IP addressing test in symbian_ua git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1648 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/symbian_ua/ua.cpp | 162 +++++++++++++++++++++++++++++++++++---- 1 file changed, 148 insertions(+), 14 deletions(-) (limited to 'pjsip-apps/src') diff --git a/pjsip-apps/src/symbian_ua/ua.cpp b/pjsip-apps/src/symbian_ua/ua.cpp index bb3b8102..371512c4 100644 --- a/pjsip-apps/src/symbian_ua/ua.cpp +++ b/pjsip-apps/src/symbian_ua/ua.cpp @@ -21,6 +21,7 @@ #include "ua.h" #define THIS_FILE "symbian_ua.cpp" +#define LOG_LEVEL 4 // // Basic config. @@ -31,7 +32,7 @@ // // Destination URI (to make call, or to subscribe presence) // -#define SIP_DST_URI "sip:192.168.0.11:5060" +#define SIP_DST_URI "sip:192.168.0.13" // // Account @@ -57,7 +58,7 @@ // // STUN server -#if 0 +#if 1 // Use this to have the STUN server resolved normally # define STUN_DOMAIN NULL # define STUN_SERVER "stun.fwdnet.net" @@ -74,7 +75,7 @@ // // Use ICE? // -#define USE_ICE 0 +#define USE_ICE 1 // @@ -268,7 +269,10 @@ static pj_status_t app_startup() pj_status_t status; /* Redirect log before pjsua_init() */ - pj_log_set_log_func((void (*)(int,const char*,int)) &log_writer); + pj_log_set_log_func(&log_writer); + + /* Set log level */ + pj_log_set_level(LOG_LEVEL); /* Create pjsua first! */ status = pjsua_create(); @@ -455,14 +459,14 @@ static void PrintMenu() " P Dump pool factory\n" " l Start loopback audio device\n" " L Stop loopback audio device\n" - " 1 Call " SIP_DST_URI "\n" - " 2 Answer call\n" - " 3 Hangup all calls\n" + " m Call " SIP_DST_URI "\n" + " a Answer call\n" + " g Hangup all calls\n" " s Subscribe " SIP_DST_URI "\n" " S Unsubscribe presence\n" " o Set account online\n" " O Set account offline\n" - " 9 Quit\n")); + " w Quit\n")); } // Implementation: called when read has completed. @@ -472,7 +476,7 @@ void ConsoleUI::RunL() pj_bool_t reschedule = PJ_TRUE; switch (kc) { - case '9': + case 'w': asw_->AsyncStop(); reschedule = PJ_FALSE; break; @@ -490,7 +494,7 @@ void ConsoleUI::RunL() case 'L': pjsua_conf_disconnect(0, 0); break; - case '1': + case 'm': if (g_call_id != PJSUA_INVALID_ID) { PJ_LOG(3,(THIS_FILE, "Another call is active")); break; @@ -504,11 +508,11 @@ void ConsoleUI::RunL() PJ_LOG(3,(THIS_FILE, "Invalid SIP URI")); } break; - case '2': + case 'a': if (g_call_id != PJSUA_INVALID_ID) pjsua_call_answer(g_call_id, 200, NULL, NULL); break; - case '3': + case 'g': pjsua_call_hangup_all(); break; case 's': @@ -532,16 +536,143 @@ void ConsoleUI::RunL() Run(); } +#if 0 +// IP networking related testing +static pj_status_t test_addr(void) +{ + int af; + unsigned i, count; + pj_addrinfo ai[8]; + pj_sockaddr ifs[8]; + const pj_str_t *hostname; + pj_hostent he; + pj_status_t status; + + pj_log_set_log_func(&log_writer); + + status = pj_init(); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "pj_init() error", status); + return status; + } + + af = pj_AF_INET(); + + // Hostname + hostname = pj_gethostname(); + if (hostname == NULL) { + status = PJ_ERESOLVE; + pjsua_perror(THIS_FILE, "pj_gethostname() error", status); + goto on_return; + } + + PJ_LOG(3,(THIS_FILE, "Hostname: %.*s", hostname->slen, hostname->ptr)); + + // Gethostbyname + status = pj_gethostbyname(hostname, &he); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "pj_gethostbyname() error", status); + } else { + PJ_LOG(3,(THIS_FILE, "gethostbyname: %s", + pj_inet_ntoa(*(pj_in_addr*)he.h_addr))); + } + + // Getaddrinfo + count = PJ_ARRAY_SIZE(ai); + status = pj_getaddrinfo(af, hostname, &count, ai); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "pj_getaddrinfo() error", status); + } else { + for (i=0; i //////////////////////////////////////////////////////////////////////////// int ua_main() { + RSocketServ aSocketServer; + RConnection aConn; + TInt err; + pj_symbianos_params sym_params; pj_status_t status; + // Initialize RSocketServ + if ((err=aSocketServer.Connect()) != KErrNone) + return PJ_STATUS_FROM_OS(err); + + // Open up a connection + if ((err=aConn.Open(aSocketServer)) != KErrNone) { + aSocketServer.Close(); + return PJ_STATUS_FROM_OS(err); + } + + if ((err=aConn.Start()) != KErrNone) { + aSocketServer.Close(); + return PJ_STATUS_FROM_OS(err); + } + + // Set Symbian OS parameters in pjlib. + // This must be done before pj_init() is called. + pj_bzero(&sym_params, sizeof(sym_params)); + sym_params.rsocketserv = &aSocketServer; + sym_params.rconnection = &aConn; + pj_symbianos_set_params(&sym_params); + // Initialize pjsua status = app_startup(); - if (status != PJ_SUCCESS) + //status = test_addr(); + if (status != PJ_SUCCESS) { + aConn.Close(); + aSocketServer.Close(); return status; + } // Run the UI CActiveSchedulerWait *asw = new CActiveSchedulerWait; @@ -558,7 +689,10 @@ int ua_main() // Shutdown pjsua pjsua_destroy(); -on_return: + // Close connection and socket server + aConn.Close(); + aSocketServer.Close(); + return status; } -- cgit v1.2.3