Ignore:
Timestamp:
Dec 2, 2007 3:40:52 PM (16 years ago)
Author:
bennylp
Message:

More ticket #421: fixed SIP messaging components to support IPv6 format

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r1569 r1610  
    326326    pjsua_acc_config cfg; 
    327327    pjsua_transport_data *t = &pjsua_var.tpdata[tid]; 
     328    const char *beginquote, *endquote; 
     329    char transport_param[32]; 
    328330    char uri[PJSIP_MAX_URL_SIZE]; 
    329331 
     
    340342    --cfg.priority; 
    341343 
     344    /* Enclose IPv6 address in square brackets */ 
     345    if (t->type & PJSIP_TRANSPORT_IPV6) { 
     346        beginquote = "["; 
     347        endquote = "]"; 
     348    } else { 
     349        beginquote = endquote = ""; 
     350    } 
     351 
     352    /* Don't add transport parameter if it's UDP */ 
     353    if ((t->type & PJSIP_TRANSPORT_UDP) == 0) { 
     354        pj_ansi_snprintf(transport_param, sizeof(transport_param), 
     355                         ";transport=%s", 
     356                         pjsip_transport_get_type_name(t->type)); 
     357    } else { 
     358        transport_param[0] = '\0'; 
     359    } 
     360 
    342361    /* Build URI for the account */ 
    343362    pj_ansi_snprintf(uri, PJSIP_MAX_URL_SIZE, 
    344                      "<sip:%.*s:%d;transport=%s>",  
     363                     "<sip:%s%.*s%s:%d%s>",  
     364                     beginquote, 
    345365                     (int)t->local_name.host.slen, 
    346366                     t->local_name.host.ptr, 
     367                     endquote, 
    347368                     t->local_name.port, 
    348                      pjsip_transport_get_type_name(t->type)); 
     369                     transport_param); 
    349370 
    350371    cfg.id = pj_str(uri); 
     
    13621383    int secure; 
    13631384    int local_port; 
     1385    const char *beginquote, *endquote; 
     1386    char transport_param[32]; 
     1387 
    13641388     
    13651389    PJ_ASSERT_RETURN(pjsua_acc_is_valid(acc_id), PJ_EINVAL); 
     
    14061430        return PJSIP_EUNSUPTRANSPORT; 
    14071431 
     1432    /* If destination URI specifies IPv6, then set transport type 
     1433     * to use IPv6 as well. 
     1434     */ 
     1435    if (pj_strchr(suri, ':')) 
     1436        tp_type = (pjsip_transport_type_e)(((int)tp_type) + PJSIP_TRANSPORT_IPV6); 
     1437 
    14081438    flag = pjsip_transport_get_flag_from_type(tp_type); 
    14091439    secure = (flag & PJSIP_TRANSPORT_SECURE) != 0; 
     
    14191449        return status; 
    14201450 
     1451    /* Enclose IPv6 address in square brackets */ 
     1452    if (tp_type & PJSIP_TRANSPORT_IPV6) { 
     1453        beginquote = "["; 
     1454        endquote = "]"; 
     1455    } else { 
     1456        beginquote = endquote = ""; 
     1457    } 
     1458 
     1459    /* Don't add transport parameter if it's UDP */ 
     1460    if ((tp_type & PJSIP_TRANSPORT_UDP) == 0) { 
     1461        pj_ansi_snprintf(transport_param, sizeof(transport_param), 
     1462                         ";transport=%s", 
     1463                         pjsip_transport_get_type_name(tp_type)); 
     1464    } else { 
     1465        transport_param[0] = '\0'; 
     1466    } 
     1467 
     1468 
    14211469    /* Create the contact header */ 
    14221470    contact->ptr = (char*)pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE); 
    14231471    contact->slen = pj_ansi_snprintf(contact->ptr, PJSIP_MAX_URL_SIZE, 
    1424                                      "%.*s%s<%s:%.*s%s%.*s:%d;transport=%s>", 
     1472                                     "%.*s%s<%s:%.*s%s%s%.*s%s:%d%s>", 
    14251473                                     (int)acc->display.slen, 
    14261474                                     acc->display.ptr, 
     
    14301478                                     acc->user_part.ptr, 
    14311479                                     (acc->user_part.slen?"@":""), 
     1480                                     beginquote, 
    14321481                                     (int)local_addr.slen, 
    14331482                                     local_addr.ptr, 
     1483                                     endquote, 
    14341484                                     local_port, 
    1435                                      pjsip_transport_get_type_name(tp_type)); 
     1485                                     transport_param); 
    14361486 
    14371487    return PJ_SUCCESS; 
     
    14621512    int secure; 
    14631513    int local_port; 
     1514    const char *beginquote, *endquote; 
     1515    char transport_param[32]; 
    14641516     
    14651517    PJ_ASSERT_RETURN(pjsua_acc_is_valid(acc_id), PJ_EINVAL); 
     
    15091561    } else 
    15101562        tp_type = pjsip_transport_get_type_from_name(&sip_uri->transport_param); 
    1511      
     1563 
    15121564    if (tp_type == PJSIP_TRANSPORT_UNSPECIFIED) 
    15131565        return PJSIP_EUNSUPTRANSPORT; 
     1566 
     1567    /* If destination URI specifies IPv6, then set transport type 
     1568     * to use IPv6 as well. 
     1569     */ 
     1570    if (pj_strchr(&sip_uri->host, ':')) 
     1571        tp_type = (pjsip_transport_type_e)(((int)tp_type) + PJSIP_TRANSPORT_IPV6); 
    15141572 
    15151573    flag = pjsip_transport_get_flag_from_type(tp_type); 
     
    15261584        return status; 
    15271585 
     1586    /* Enclose IPv6 address in square brackets */ 
     1587    if (tp_type & PJSIP_TRANSPORT_IPV6) { 
     1588        beginquote = "["; 
     1589        endquote = "]"; 
     1590    } else { 
     1591        beginquote = endquote = ""; 
     1592    } 
     1593 
     1594    /* Don't add transport parameter if it's UDP */ 
     1595    if ((tp_type & PJSIP_TRANSPORT_UDP) == 0) { 
     1596        pj_ansi_snprintf(transport_param, sizeof(transport_param), 
     1597                         ";transport=%s", 
     1598                         pjsip_transport_get_type_name(tp_type)); 
     1599    } else { 
     1600        transport_param[0] = '\0'; 
     1601    } 
     1602 
     1603 
    15281604    /* Create the contact header */ 
    15291605    contact->ptr = (char*) pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE); 
    15301606    contact->slen = pj_ansi_snprintf(contact->ptr, PJSIP_MAX_URL_SIZE, 
    1531                                      "%.*s%s<%s:%.*s%s%.*s:%d;transport=%s>", 
     1607                                     "%.*s%s<%s:%.*s%s%s%.*s%s:%d%s>", 
    15321608                                     (int)acc->display.slen, 
    15331609                                     acc->display.ptr, 
     
    15371613                                     acc->user_part.ptr, 
    15381614                                     (acc->user_part.slen?"@":""), 
     1615                                     beginquote, 
    15391616                                     (int)local_addr.slen, 
    15401617                                     local_addr.ptr, 
     1618                                     endquote, 
    15411619                                     local_port, 
    1542                                      pjsip_transport_get_type_name(tp_type)); 
     1620                                     transport_param); 
    15431621 
    15441622    return PJ_SUCCESS; 
Note: See TracChangeset for help on using the changeset viewer.