Ignore:
Timestamp:
Dec 1, 2007 8:52:57 AM (16 years ago)
Author:
bennylp
Message:

More ticket #415: more IPv6 and some reorganization of the source codes

File:
1 edited

Legend:

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

    r1599 r1601  
    2424#include <pj/compat/socket.h> 
    2525 
    26 static pj_status_t dummy_enum_ip_interface(unsigned *p_cnt, 
    27                                           pj_in_addr ifs[]) 
     26static pj_status_t dummy_enum_ip_interface(int af, 
     27                                           unsigned *p_cnt, 
     28                                           pj_sockaddr ifs[]) 
    2829{ 
    2930    pj_status_t status; 
     
    3435 
    3536    /* Just get one default route */ 
    36     status = pj_getdefaultipinterface(&ifs[0]); 
     37    status = pj_getdefaultipinterface(af, &ifs[0]); 
    3738    if (status != PJ_SUCCESS) 
    3839        return status; 
     
    4344 
    4445#ifdef SIOCGIFCONF 
    45 static pj_status_t sock_enum_ip_interface(unsigned *p_cnt, 
    46                                           pj_in_addr ifs[]) 
     46static pj_status_t sock_enum_ip_interface(int af, 
     47                                          unsigned *p_cnt, 
     48                                          pj_sockaddr ifs[]) 
    4749{ 
    4850    pj_sock_t sock; 
     
    5355    pj_status_t status; 
    5456 
    55     status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, &sock); 
     57    PJ_ASSERT_RETURN(af==PJ_AF_INET || af==PJ_AF_INET6, PJ_EINVAL); 
     58     
     59    status = pj_sock_socket(af, PJ_SOCK_DGRAM, 0, &sock); 
    5660    if (status != PJ_SUCCESS) 
    5761        return status; 
     
    7983    for (i=0; i<count; ++i) { 
    8084        struct ifreq *itf = &ifr[i]; 
    81         ifs[i].s_addr = ((struct sockaddr_in *)&itf->ifr_addr)->sin_addr.s_addr; 
     85        struct sockaddr *ad = itf->ifr_addr; 
     86         
     87        ifs[i].addr.sa_family = ad->sa_family; 
     88        pj_memcpy(pj_sockaddr_get_addr(&ifs[i]), 
     89                  pj_sockaddr_get_addr(ad), 
     90                  pj_sockaddr_get_addr_len(ad)); 
    8291    } 
    8392 
     
    8998 * Enumerate the local IP interface currently active in the host. 
    9099 */ 
    91 PJ_DEF(pj_status_t) pj_enum_ip_interface(unsigned *p_cnt, 
    92                                          pj_in_addr ifs[]) 
     100PJ_DEF(pj_status_t) pj_enum_ip_interface(int af, 
     101                                         unsigned *p_cnt, 
     102                                         pj_sockaddr ifs[]) 
    93103{ 
    94104#ifdef SIOCGIFCONF 
    95     if (sock_enum_ip_interface(p_cnt, ifs) == PJ_SUCCESS) 
     105    if (sock_enum_ip_interface(af, p_cnt, ifs) == PJ_SUCCESS) 
    96106        return PJ_SUCCESS; 
    97107#endif 
    98     return dummy_enum_ip_interface(p_cnt, ifs); 
     108    return dummy_enum_ip_interface(af, p_cnt, ifs); 
    99109} 
    100110 
     
    105115                                     pj_ip_route_entry routes[]) 
    106116{ 
     117    pj_sockaddr itf; 
    107118    pj_status_t status; 
    108119 
     
    112123 
    113124    /* Just get one default route */ 
    114     status = pj_getdefaultipinterface(&routes[0].ipv4.if_addr); 
     125    status = pj_getdefaultipinterface(PJ_AF_INET, &itf); 
    115126    if (status != PJ_SUCCESS) 
    116127        return status; 
    117  
     128     
     129    routes[0].ipv4.if_addr.s_addr = itf.ipv4.sin_addr.s_addr; 
    118130    routes[0].ipv4.dst_addr.s_addr = 0; 
    119131    routes[0].ipv4.mask.s_addr = 0; 
Note: See TracChangeset for help on using the changeset viewer.