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/sock_symbian.cpp

    r1588 r1601  
    443443 
    444444/* 
    445  * Convert address string with numbers and dots to binary IP address. 
    446  */  
    447 PJ_DEF(pj_in_addr) pj_inet_addr(const pj_str_t *cp) 
    448 { 
    449     pj_in_addr addr; 
    450  
    451     pj_inet_aton(cp, &addr); 
    452     return addr; 
    453 } 
    454  
    455 /* 
    456  * Convert address string with numbers and dots to binary IP address. 
    457  */  
    458 PJ_DEF(pj_in_addr) pj_inet_addr2(const char *cp) 
    459 { 
    460     pj_str_t str = pj_str((char*)cp); 
    461     return pj_inet_addr(&str); 
    462 } 
    463  
    464 /* 
    465  * Set the IP address of an IP socket address from string address,  
    466  * with resolving the host if necessary. The string address may be in a 
    467  * standard numbers and dots notation or may be a hostname. If hostname 
    468  * is specified, then the function will resolve the host into the IP 
    469  * address. 
    470  */ 
    471 PJ_DEF(pj_status_t) pj_sockaddr_in_set_str_addr( pj_sockaddr_in *addr, 
    472                                                  const pj_str_t *str_addr) 
    473 { 
    474     PJ_CHECK_STACK(); 
    475  
    476     PJ_ASSERT_RETURN(!str_addr || str_addr->slen < PJ_MAX_HOSTNAME,  
    477                      (addr->sin_addr.s_addr=PJ_INADDR_NONE, PJ_EINVAL)); 
    478  
    479     addr->sin_family = PJ_AF_INET; 
    480     pj_memset(addr->sin_zero, 0, sizeof(addr->sin_zero)); 
    481  
    482     if (str_addr && str_addr->slen) { 
    483         addr->sin_addr = pj_inet_addr(str_addr); 
    484         if (addr->sin_addr.s_addr == PJ_INADDR_NONE) { 
    485             pj_hostent he; 
    486             pj_status_t rc; 
    487  
    488             rc = pj_gethostbyname(str_addr, &he); 
    489             if (rc == 0) { 
    490                 addr->sin_addr.s_addr = *(pj_uint32_t*)he.h_addr; 
    491             } else { 
    492                 addr->sin_addr.s_addr = PJ_INADDR_NONE; 
    493                 return rc; 
    494             } 
    495         } 
    496  
    497     } else { 
    498         addr->sin_addr.s_addr = 0; 
    499     } 
    500  
    501     return PJ_SUCCESS; 
    502 } 
    503  
    504 /* 
    505  * Set the IP address and port of an IP socket address. 
    506  * The string address may be in a standard numbers and dots notation or  
    507  * may be a hostname. If hostname is specified, then the function will  
    508  * resolve the host into the IP address. 
    509  */ 
    510 PJ_DEF(pj_status_t) pj_sockaddr_in_init( pj_sockaddr_in *addr, 
    511                                          const pj_str_t *str_addr, 
    512                                          pj_uint16_t port) 
    513 { 
    514     PJ_ASSERT_RETURN(addr, (addr->sin_addr.s_addr=PJ_INADDR_NONE, PJ_EINVAL)); 
    515  
    516     addr->sin_family = PJ_AF_INET; 
    517     pj_memset(addr->sin_zero, 0, sizeof(addr->sin_zero)); 
    518     pj_sockaddr_in_set_port(addr, port); 
    519     return pj_sockaddr_in_set_str_addr(addr, str_addr); 
    520 } 
    521  
    522   
    523 /* 
    524445 * Get hostname. 
    525446 */ 
     
    532453 
    533454    if (hostname.ptr == NULL) { 
    534         RHostResolver & resv = PjSymbianOS::Instance()->GetResolver(); 
     455        RHostResolver &resv = PjSymbianOS::Instance()->GetResolver(PJ_AF_INET); 
    535456        TRequestStatus reqStatus; 
    536457        THostName tmpName; 
     
    545466    return &hostname; 
    546467} 
    547  
    548 /* 
    549  * Get first IP address associated with the hostname. 
    550  */ 
    551 PJ_DEF(pj_in_addr) pj_gethostaddr(void) 
    552 { 
    553     pj_sockaddr_in addr; 
    554     const pj_str_t *hostname = pj_gethostname(); 
    555  
    556     pj_sockaddr_in_set_str_addr(&addr, hostname); 
    557     return addr.sin_addr; 
    558 } 
    559  
    560468 
    561469/* 
     
    597505 
    598506    /* Wrap Symbian RSocket into PJLIB's CPjSocket, and return to caller */ 
    599     CPjSocket *pjSock = new CPjSocket(rSock); 
     507    CPjSocket *pjSock = new CPjSocket(af, rSock); 
    600508    *p_sock = (pj_sock_t)pjSock; 
    601509 
     
    611519                                  int len) 
    612520{ 
     521    pj_status_t status; 
    613522    TInt rc; 
    614523 
     
    616525 
    617526    PJ_ASSERT_RETURN(sock != 0, PJ_EINVAL); 
    618     PJ_ASSERT_RETURN(addr && len == sizeof(pj_sockaddr_in), PJ_EINVAL); 
    619  
    620     // Convert PJLIB's pj_sockaddr_in into Symbian's TInetAddr 
     527    PJ_ASSERT_RETURN(addr && len >= sizeof(pj_sockaddr_in), PJ_EINVAL); 
     528 
     529    // Convert PJLIB's pj_sockaddr into Symbian's TInetAddr 
    621530    TInetAddr inetAddr; 
    622     PjSymbianOS::pj2Addr(*(pj_sockaddr_in*)addr, inetAddr); 
     531    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)addr, len, inetAddr); 
     532    if (status != PJ_SUCCESS) 
     533        return status; 
    623534 
    624535    // Get the RSocket instance 
     
    690601    rSock.RemoteName(inetAddr); 
    691602 
    692     PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr_in*)addr); 
    693     *namelen = sizeof(pj_sockaddr_in); 
    694  
    695     return PJ_SUCCESS; 
     603    return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)addr, namelen); 
    696604} 
    697605 
     
    714622    rSock.LocalName(inetAddr); 
    715623 
    716     PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr_in*)addr); 
    717     *namelen = sizeof(pj_sockaddr_in); 
    718  
    719     return PJ_SUCCESS; 
     624    return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)addr, namelen); 
    720625} 
    721626 
     
    762667                                   int tolen) 
    763668{ 
     669    pj_status_t status; 
     670     
    764671    PJ_CHECK_STACK(); 
    765672    PJ_ASSERT_RETURN(sock && buf && len, PJ_EINVAL); 
     
    769676 
    770677    // Only supports AF_INET for now 
    771     PJ_ASSERT_RETURN(tolen==sizeof(pj_sockaddr_in) &&  
    772                      ((pj_sockaddr*)to)->addr.sa_family == PJ_AF_INET,  
    773                      PJ_EINVAL); 
     678    PJ_ASSERT_RETURN(tolen >= sizeof(pj_sockaddr_in), PJ_EINVAL); 
    774679 
    775680    TInetAddr inetAddr; 
    776     PjSymbianOS::pj2Addr(*(pj_sockaddr_in*)to, inetAddr); 
     681    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)to, tolen, inetAddr); 
     682    if (status != PJ_SUCCESS) 
     683        return status; 
    777684 
    778685    TPtrC8 data((const TUint8*)buf, (TInt)*len); 
     
    877784 
    878785            if (from && fromlen) { 
    879                 PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr_in*)from); 
    880                 *fromlen = sizeof(pj_sockaddr_in); 
     786                return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)from,  
     787                                            fromlen); 
     788            } else { 
     789                return PJ_SUCCESS; 
    881790            } 
    882             return PJ_SUCCESS; 
    883791        } 
    884792    } 
     
    895803        //*len = (TInt)recvLen.Length(); 
    896804        *len = data.Length(); 
    897         *fromlen = sizeof(pj_sockaddr_in); 
    898         PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr_in*)from); 
    899         return PJ_SUCCESS; 
     805        return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)from, fromlen); 
    900806    } else { 
    901807        *len = -1; 
     
    948854                                     int namelen) 
    949855{ 
     856    pj_status_t status; 
     857     
    950858    PJ_CHECK_STACK(); 
    951859 
     
    960868    TRequestStatus reqStatus; 
    961869 
    962     PjSymbianOS::pj2Addr(*(pj_sockaddr_in*)addr, inetAddr); 
     870    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)addr, namelen, inetAddr); 
     871    if (status != PJ_SUCCESS) 
     872        return status; 
    963873 
    964874    rSock.Connect(inetAddr, reqStatus); 
     
    1060970 
    1061971    // Create PJ socket 
    1062     CPjSocket *newPjSock = new CPjSocket(newSock); 
     972    CPjSocket *newPjSock = new CPjSocket(pjSock->GetAf(), newSock); 
    1063973    newPjSock->SetConnected(true); 
    1064974 
Note: See TracChangeset for help on using the changeset viewer.