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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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(); 
Note: See TracChangeset for help on using the changeset viewer.