Changeset 597


Ignore:
Timestamp:
Jul 10, 2006 2:40:21 PM (18 years ago)
Author:
bennylp
Message:

Fixed bug in PJSUA API re: account selection and Contact header for accounts

Location:
pjproject/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/config.c

    r563 r597  
    2222 
    2323static const char *id = "config.c"; 
    24 const char *PJ_VERSION = "0.5.6.1"; 
     24const char *PJ_VERSION = "0.5.6.5"; 
    2525 
    2626PJ_DEF(void) pj_dump_config(void) 
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r582 r597  
    468468                return PJ_EINVAL; 
    469469            } 
    470             cur_acc->contact = pj_str(pj_optarg); 
     470            cur_acc->force_contact = pj_str(pj_optarg); 
    471471            break; 
    472472 
     
    715715 
    716716    /* Contact */ 
    717     if (acc_cfg->contact.slen) { 
     717    if (acc_cfg->force_contact.slen) { 
    718718        pj_ansi_sprintf(line, "--contact %.*s\n",  
    719                         (int)acc_cfg->contact.slen,  
    720                         acc_cfg->contact.ptr); 
     719                        (int)acc_cfg->force_contact.slen,  
     720                        acc_cfg->force_contact.ptr); 
    721721        pj_strcat2(result, line); 
    722722    } 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua.h

    r582 r597  
    10231023     * automatically based on the transport address. 
    10241024     */ 
    1025     pj_str_t        contact; 
     1025    pj_str_t        force_contact; 
    10261026 
    10271027    /** 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua_internal.h

    r563 r597  
    8181    int              index;         /**< Index in accounts array.       */ 
    8282    pj_str_t         user_part;     /**< User part of local URI.        */ 
    83     pj_str_t         host_part;     /**< Host part of local URI.        */ 
    8483    pj_str_t         real_contact;  /**< Real contact address.          */ 
     84 
     85    pj_str_t         srv_domain;    /**< Host part of reg server.       */ 
     86    int              srv_port;      /**< Port number of reg server.     */ 
    8587 
    8688    pjsip_regc      *regc;          /**< Client registration session.   */ 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r582 r597  
    5656    pj_strdup_with_null(pool, &dst->id, &src->id); 
    5757    pj_strdup_with_null(pool, &dst->reg_uri, &src->reg_uri); 
    58     pj_strdup_with_null(pool, &dst->contact, &src->contact); 
     58    pj_strdup_with_null(pool, &dst->force_contact, &src->force_contact); 
    5959 
    6060    dst->proxy_cnt = src->proxy_cnt; 
     
    104104    pjsua_acc *acc = &pjsua_var.acc[acc_id]; 
    105105    pjsip_uri *uri; 
    106     pjsip_sip_uri *sip_uri; 
     106    pjsip_sip_uri *sip_uri, *sip_reg_uri; 
    107107    unsigned i; 
    108108 
     
    129129 
    130130    /* Get the SIP URI object: */ 
    131  
    132131    sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri(uri); 
     132 
     133 
     134    /* Parse registrar URI, if any */ 
     135    if (acc_cfg->reg_uri.slen) { 
     136        pjsip_uri *reg_uri; 
     137 
     138        reg_uri = pjsip_parse_uri(pjsua_var.pool, acc_cfg->reg_uri.ptr, 
     139                                  acc_cfg->reg_uri.slen, 0); 
     140        if (reg_uri == NULL) { 
     141            pjsua_perror(THIS_FILE, "Invalid registrar URI",  
     142                         PJSIP_EINVALIDURI); 
     143            return PJSIP_EINVALIDURI; 
     144        } 
     145 
     146        /* Registrar URI MUST be a SIP or SIPS: */ 
     147        if (!PJSIP_URI_SCHEME_IS_SIP(reg_uri) &&  
     148            !PJSIP_URI_SCHEME_IS_SIPS(reg_uri))  
     149        { 
     150            pjsua_perror(THIS_FILE, "Invalid registar URI",  
     151                         PJSIP_EINVALIDSCHEME); 
     152            return PJSIP_EINVALIDSCHEME; 
     153        } 
     154 
     155        sip_reg_uri = (pjsip_sip_uri*) pjsip_uri_get_uri(reg_uri); 
     156 
     157    } else { 
     158        sip_reg_uri = NULL; 
     159    } 
     160 
    133161 
    134162    /* Save the user and domain part. These will be used when finding an  
     
    136164     */ 
    137165    acc->user_part = sip_uri->user; 
    138     acc->host_part = sip_uri->host; 
    139  
     166    acc->srv_domain = sip_uri->host; 
     167    acc->srv_port = 0; 
     168 
     169    if (sip_reg_uri) { 
     170        acc->srv_port = sip_reg_uri->port; 
     171    } 
    140172 
    141173    /* Create Contact header if not present. */ 
    142     if (acc_cfg->contact.slen == 0) { 
    143         acc_cfg->contact = acc_cfg->id; 
    144     } 
     174    //if (acc_cfg->contact.slen == 0) { 
     175    //  acc_cfg->contact = acc_cfg->id; 
     176    //} 
    145177 
    146178    PJ_TODO(attach_account_to_transport); 
     
    704736    sip_uri = pjsip_uri_get_uri(uri); 
    705737 
    706     /* Find matching domain */ 
     738    /* Find matching domain AND port */ 
    707739    for (acc_id=0; acc_id<PJ_ARRAY_SIZE(pjsua_var.acc); ++acc_id) { 
    708740        if (!pjsua_var.acc[acc_id].valid) 
    709741            continue; 
    710         if (pj_stricmp(&pjsua_var.acc[acc_id].host_part, &sip_uri->host)==0) 
     742        if (pj_stricmp(&pjsua_var.acc[acc_id].srv_domain, &sip_uri->host)==0 && 
     743            pjsua_var.acc[acc_id].srv_port == sip_uri->port) 
    711744            break; 
     745    } 
     746 
     747    /* If no match, try to match the domain part only */ 
     748    if (acc_id == PJ_ARRAY_SIZE(pjsua_var.acc)) { 
     749        /* Just use default account */ 
     750        for (acc_id=0; acc_id<PJ_ARRAY_SIZE(pjsua_var.acc); ++acc_id) { 
     751            if (!pjsua_var.acc[acc_id].valid) 
     752                continue; 
     753            if (pj_stricmp(&pjsua_var.acc[acc_id].srv_domain, &sip_uri->host)==0) 
     754                break; 
     755        } 
    712756    } 
    713757 
     
    754798 
    755799        if (pj_stricmp(&acc->user_part, &sip_uri->user)==0 && 
    756             pj_stricmp(&acc->host_part, &sip_uri->host)==0)  
     800            pj_stricmp(&acc->srv_domain, &sip_uri->host)==0)  
    757801        { 
    758802            /* Match ! */ 
     
    767811        pjsua_acc *acc = &pjsua_var.acc[acc_id]; 
    768812 
    769         if (pj_stricmp(&acc->host_part, &sip_uri->host)==0) { 
     813        if (pj_stricmp(&acc->srv_domain, &sip_uri->host)==0) { 
    770814            /* Match ! */ 
    771815            PJSUA_UNLOCK(); 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c

    r582 r597  
    235235    /* Create outgoing dialog: */ 
    236236    status = pjsip_dlg_create_uac( pjsip_ua_instance(),  
    237                                    &acc->cfg.id, &acc->cfg.contact, 
     237                                   &acc->cfg.id, &acc->real_contact, 
    238238                                   dest_uri, dest_uri, &dlg); 
    239239    if (status != PJ_SUCCESS) { 
     
    442442    /* Create dialog: */ 
    443443    status = pjsip_dlg_create_uas( pjsip_ua_instance(), rdata, 
    444                                    &pjsua_var.acc[acc_id].cfg.contact,  
     444                                   &pjsua_var.acc[acc_id].real_contact,  
    445445                                   &dlg); 
    446446    if (status != PJ_SUCCESS) { 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_core.c

    r582 r597  
    6969static pj_bool_t logging_on_rx_msg(pjsip_rx_data *rdata) 
    7070{ 
    71     PJ_LOG(4,(THIS_FILE, "RX %d bytes %s from %s:%d:\n" 
    72                          "%s\n" 
     71    PJ_LOG(4,(THIS_FILE, "RX %d bytes %s from %s %s:%d:\n" 
     72                         "%.*s\n" 
    7373                         "--end msg--", 
    7474                         rdata->msg_info.len, 
    7575                         pjsip_rx_data_get_info(rdata), 
     76                         rdata->tp_info.transport->type_name, 
    7677                         rdata->pkt_info.src_name, 
    7778                         rdata->pkt_info.src_port, 
     79                         (int)rdata->msg_info.len, 
    7880                         rdata->msg_info.msg_buf)); 
    7981     
     
    9294     */ 
    9395 
    94     PJ_LOG(4,(THIS_FILE, "TX %d bytes %s to %s:%d:\n" 
    95                          "%s\n" 
     96    PJ_LOG(4,(THIS_FILE, "TX %d bytes %s to %s %s:%d:\n" 
     97                         "%.*s\n" 
    9698                         "--end msg--", 
    9799                         (tdata->buf.cur - tdata->buf.start), 
    98100                         pjsip_tx_data_get_info(tdata), 
     101                         tdata->tp_info.transport->type_name, 
    99102                         tdata->tp_info.dst_name, 
    100103                         tdata->tp_info.dst_port, 
     104                         (int)(tdata->buf.cur - tdata->buf.start), 
    101105                         tdata->buf.start)); 
    102106 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_im.c

    r503 r597  
    441441        pjsip_generic_string_hdr_create(tdata->pool,  
    442442                                        &STR_CONTACT, 
    443                                         &pjsua_var.acc[acc_id].cfg.contact)); 
     443                                        &pjsua_var.acc[acc_id].real_contact)); 
    444444 
    445445    /* Create IM data to keep message details and give it back to 
     
    522522        pjsip_generic_string_hdr_create(tdata->pool,  
    523523                                        &STR_CONTACT, 
    524                                         &pjsua_var.acc[acc_id].cfg.contact)); 
     524                                        &pjsua_var.acc[acc_id].real_contact)); 
    525525 
    526526 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_pres.c

    r582 r597  
    466466    /* Create UAS dialog: */ 
    467467    status = pjsip_dlg_create_uas(pjsip_ua_instance(), rdata,  
    468                                   &acc->cfg.contact, 
     468                                  &acc->real_contact, 
    469469                                  &dlg); 
    470470    if (status != PJ_SUCCESS) { 
     
    771771    acc = &pjsua_var.acc[acc_id]; 
    772772 
     773    PJ_LOG(4,(THIS_FILE, "Using account %d for buddy %d subscription", 
     774                         acc_id, index)); 
     775 
    773776    /* Create UAC dialog */ 
    774777    status = pjsip_dlg_create_uac( pjsip_ua_instance(),  
    775778                                   &acc->cfg.id, 
    776                                    &acc->cfg.contact, 
     779                                   &acc->real_contact, 
    777780                                   &buddy->uri, 
    778781                                   NULL, &dlg); 
Note: See TracChangeset for help on using the changeset viewer.