Ignore:
Timestamp:
Aug 2, 2017 2:51:59 AM (7 years ago)
Author:
ming
Message:

Fixed #2032: NAT64 support for IPv4 interoperability

File:
1 edited

Legend:

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

    r5627 r5636  
    414414{ 
    415415    pj_memcpy(dst, src, pj_sockaddr_get_len(src)); 
     416} 
     417 
     418/* 
     419 * Synthesize address. 
     420 */ 
     421PJ_DEF(pj_status_t) pj_sockaddr_synthesize(int dst_af, 
     422                                           pj_sockaddr_t *dst, 
     423                                           const pj_sockaddr_t *src) 
     424{ 
     425    char ip_addr_buf[PJ_INET6_ADDRSTRLEN]; 
     426    unsigned int count = 1; 
     427    pj_addrinfo ai[1]; 
     428    pj_str_t ip_addr; 
     429    pj_status_t status; 
     430 
     431    /* Validate arguments */ 
     432    PJ_ASSERT_RETURN(src && dst, PJ_EINVAL); 
     433 
     434    if (dst_af == ((const pj_sockaddr *)src)->addr.sa_family) { 
     435        pj_sockaddr_cp(dst, src); 
     436        return PJ_SUCCESS; 
     437    } 
     438 
     439    pj_sockaddr_print(src, ip_addr_buf, sizeof(ip_addr_buf), 0); 
     440    ip_addr = pj_str(ip_addr_buf); 
     441     
     442    /* Try to synthesize address using pj_getaddrinfo(). */ 
     443    status = pj_getaddrinfo(dst_af, &ip_addr, &count, ai);  
     444    if (status == PJ_SUCCESS && count > 0) { 
     445        pj_sockaddr_cp(dst, &ai[0].ai_addr); 
     446        pj_sockaddr_set_port(dst, pj_sockaddr_get_port(src)); 
     447    } 
     448     
     449    return status; 
    416450} 
    417451 
Note: See TracChangeset for help on using the changeset viewer.