PJSUA can't send ACK to outbound proxy but try use dns resolve a route proxy name

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Pjsip team:
I am use PJSUA to test with an IMS server, I configure a outbound as  --outbound sip:xxx.5060;transport=tcp, I assume all sip traffic should send to the server directly, but when it get a 200 OK to INVITE, it try to send ACK to the server located in route, is it the expected behavior or bug, because the same test case, doubango client will send to outbound proxy always.


The code is in your sip_dialog.c:
PJ_DEF(pj_status_t) pjsip_dlg_send_request(...) {
    if (msg->line.req.method.id != PJSIP_ACK_METHOD) {
        ...
status = pjsip_tsx_send_msg(tsx, tdata); // This msg will send to outbound proxy
        ...
    } else {
/* Set transport selector */
pjsip_tx_data_set_transport(tdata, &dlg->tp_sel);
/* Send request */
status = pjsip_endpt_send_request_stateless(dlg->endpt, tdata,
   NULL, NULL); //This sending will be wrong and try to get route header and run dns resolve, because now my route server is an internal domain and can't be resolved.
    }


My client version and configuration is below:
04:55:29.705 os_core_unix.c !pjlib 2.1 for POSIX initialized
04:55:29.708 sip_endpoint.c  .Creating endpoint instance...
04:55:29.709          pjlib  .select() I/O Queue created (0xde7d30)
04:55:29.709 sip_endpoint.c  .Module "mod-msg-print" registered
04:55:29.709 sip_transport.  .Transport manager created.
04:55:29.710   pjsua_core.c  .PJSUA state changed: NULL --> CREATED
04:55:29.710       config.c  PJLIB (c)2008-2009 Teluu Inc.
04:55:29.710       config.c  Dumping configurations:
04:55:29.710       config.c   PJ_VERSION                : 2.1
04:55:29.710       config.c   PJ_M_NAME                 : x86_64
04:55:29.710       config.c   PJ_HAS_PENTIUM            : 0
04:55:29.711       config.c   PJ_OS_NAME                : x86_64-unknown-linux-gnu
04:55:29.711       config.c   PJ_CC_NAME/VER_(1,2,3)    : gcc-4.6.3
04:55:29.711       config.c   PJ_IS_(BIG/LITTLE)_ENDIAN : little-endian
04:55:29.711       config.c   PJ_HAS_INT64              : 1
04:55:29.711       config.c   PJ_HAS_FLOATING_POINT     : 1
04:55:29.711       config.c   PJ_DEBUG                  : 1
04:55:29.712       config.c   PJ_FUNCTIONS_ARE_INLINED  : 0
04:55:29.712       config.c   PJ_LOG_MAX_LEVEL          : 5
04:55:29.712       config.c   PJ_LOG_MAX_SIZE           : 4000
04:55:29.712       config.c   PJ_LOG_USE_STACK_BUFFER   : 1
04:55:29.712       config.c   PJ_POOL_DEBUG             : 0
04:55:29.712       config.c   PJ_HAS_POOL_ALT_API       : 0
04:55:29.712       config.c   PJ_HAS_TCP                : 1
04:55:29.712       config.c   PJ_MAX_HOSTNAME           : 128
04:55:29.713       config.c   ioqueue type              : select
04:55:29.713       config.c   PJ_IOQUEUE_MAX_HANDLES    : 64
04:55:29.713       config.c   PJ_IOQUEUE_HAS_SAFE_UNREG : 1
04:55:29.713       config.c   PJ_HAS_THREADS            : 1
04:55:29.713       config.c   PJ_LOG_USE_STACK_BUFFER   : 1
04:55:29.713       config.c   PJ_HAS_SEMAPHORE          : 1
04:55:29.713       config.c   PJ_HAS_EVENT_OBJ          : 1
04:55:29.713       config.c   PJ_ENABLE_EXTRA_CHECK     : 1
04:55:29.714       config.c   PJ_HAS_EXCEPTION_NAMES    : 1
04:55:29.714       config.c   PJ_MAX_EXCEPTION_ID       : 16
04:55:29.714       config.c   PJ_EXCEPTION_USE_WIN32_SEH: 0
04:55:29.714       config.c   PJ_TIMESTAMP_USE_RDTSC:   : 0
04:55:29.714       config.c   PJ_OS_HAS_CHECK_STACK     : 0
04:55:29.714       config.c   PJ_HAS_HIGH_RES_TIMER     : 1






At 2015-01-13 15:41:34, "Alberto Bitto" <alberto.bitto at gmail.com> wrote:

I checked the server configuration and I figured out I made a mistake: the Kamailio server is set up to use TLS.
Since pjsip libraries are already built with SSL, I just changed the transport setup:


        pjsua_transport_config cfg;
        pjsua_transport_config_default(&cfg);
        cfg.port = 5080;


        status = pjsua_transport_create(PJSIP_TRANSPORT_TLS, &cfg, NULL);


and the account configuration:


            cfg.id = pj_str("sips:"SIP_USER"@"SIP_URL);
            cfg.reg_uri = pj_str("sips:"SIP_URL";transport=tls");


Nevertheless, I'm still getting the same route error.


2015-01-12 17:25 GMT+01:00 Bill Gardner <billg at wavearts.com>:

Maybe because you're using port 5061 it requires additional SSL setup? Try 5060 perhaps? - Bill



On 1/12/2015 11:18 AM, Alberto Bitto wrote:

Hello,


I'm trying to implement a very simple iOS app that uses pjsua. I succesfully built and imported the pjsip library in my sample project, have a Kamailio remote server up and running and now I'm trying to make a very simple call to the server.


Using the code found on this tutorial http://www.xianwenchen.com/blog/2014/06/30/how-to-make-an-ios-voip-app-with-pjsip-part-3/, I do the following:


1) create pjsua status:


        status = pjsua_create();



2) init configuration and logging:


        pjsua_config cfg;
        pjsua_config_default (&cfg);


        cfg.cb.on_incoming_call = &on_incoming_call;
        cfg.cb.on_call_media_state = &on_call_media_state;
        cfg.cb.on_call_state = &on_call_state;


        pjsua_logging_config log_cfg;
        pjsua_logging_config_default(&log_cfg);
        log_cfg.console_level = 4;


        status = pjsua_init(&cfg, &log_cfg, NULL);


3) add UDP and TCP transport:


        pjsua_transport_config cfg;
        pjsua_transport_config_default(&cfg);
        cfg.port = 5080;


        status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, NULL);


(and the same for TCP)


4) start pjsua:


            status = pjsua_start();


5) register the account on the server:


            pjsua_acc_id acc_id;
            pjsua_acc_config cfg;


            pjsua_acc_config_default(&cfg);


            cfg.id = pj_str("sip:"SIP_USER"@"SIP_URL);
            cfg.reg_uri = pj_str("sip:"SIP_URL);
            cfg.cred_count = 1;
            cfg.cred_info[0].realm = pj_str(SIP_REALM);
            cfg.cred_info[0].scheme = pj_str("digest");
            cfg.cred_info[0].username = pj_str(SIP_USER);
            cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
            cfg.cred_info[0].data = pj_str(SIP_PASSWD);


            status = pjsua_acc_add(&cfg, PJ_TRUE, &acc_id);


where SIP_URL is the IP of my Kamailio server and SIP_REALM = "*"


6) if everything is fine, make the call:


            pj_str_t uri = pj_str(SIP_URL ":"SIP_PORT);
            status = pjsua_call_make_call(acc_id, &uri, 0, NULL, NULL, NULL);


where SIP_PORT is the port 5061 on the Kamailio server.


When I run the app and actually make the call, on the log I can see the pjsua status change from NULL up to RUNNING and the account successfully added to the server; when it tries to make the call, after the sound media setup, I get this error:


Error making call: Missing route set (for tel: URI) (PJSIP_ENOROUTESET) [status=171005]


and pjsua starts to shut everything down.


What am I missing?


Thanks in advance.


Alberto Bitto



_______________________________________________
Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip at lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org



_______________________________________________
Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip at lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20150114/698e25f9/attachment.html>


[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux