Ignore:
Timestamp:
Dec 31, 2007 11:26:21 AM (16 years ago)
Author:
bennylp
Message:

Fixed IPv6/IPv4 address issue in Symbian: Symbian, at least 9.1, seems to have dual stack IP, so IPv4 address can be returned as a mapped IPv6 address

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/os_symbian.h

    r1628 r1647  
    240240    static inline pj_status_t Addr2pj(const TInetAddr & sym_addr, 
    241241                                      pj_sockaddr &pj_addr, 
    242                                       int *addr_len) 
    243     { 
     242                                      int *addr_len, 
     243                                      pj_bool_t convert_ipv4_mapped_addr = PJ_FALSE) 
     244    { 
     245    TUint fam = sym_addr.Family(); 
    244246        pj_bzero(&pj_addr, *addr_len); 
    245         pj_addr.addr.sa_family = (pj_uint16_t)sym_addr.Family(); 
    246         if (pj_addr.addr.sa_family == PJ_AF_INET) { 
     247        if (fam == PJ_AF_INET ||  
     248                        (convert_ipv4_mapped_addr &&  
     249                         fam == PJ_AF_INET6 &&  
     250                         sym_addr.IsV4Mapped()))  
     251        { 
     252                pj_addr.addr.sa_family = PJ_AF_INET; 
    247253            PJ_ASSERT_RETURN(*addr_len>=(int)sizeof(pj_sockaddr_in), PJ_ETOOSMALL); 
    248254            pj_addr.ipv4.sin_addr.s_addr = pj_htonl(sym_addr.Address()); 
    249255            pj_addr.ipv4.sin_port = pj_htons((pj_uint16_t) sym_addr.Port()); 
    250256            *addr_len = sizeof(pj_sockaddr_in); 
    251         } else if (pj_addr.addr.sa_family == PJ_AF_INET6) { 
     257        } else if (fam == PJ_AF_INET6) { 
    252258            PJ_ASSERT_RETURN(*addr_len>=(int)sizeof(pj_sockaddr_in6), PJ_ETOOSMALL); 
    253259            const TIp6Addr & ip6 = sym_addr.Ip6Address(); 
     260            pj_addr.addr.sa_family = PJ_AF_INET6; 
    254261            pj_memcpy(&pj_addr.ipv6.sin6_addr, ip6.u.iAddr8, 16); 
    255262            pj_addr.ipv6.sin6_port = pj_htons((pj_uint16_t) sym_addr.Port()); 
Note: See TracChangeset for help on using the changeset viewer.