Changeset 21608

Show
Ignore:
Timestamp:
10/19/08 11:31:08 (5 years ago)
Author:
tokuhirom
Message:

added gethostbyaddr

Location:
lang/cplusplus/llv8call/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/cplusplus/llv8call/trunk/ext/socket/socket.cc

    r21606 r21608  
    349349END 
    350350 
     351FUNCTION(_gethostbyaddr) 
     352    // @return [hostname, aliaslist, ipaddrlist] 
     353    ARG_COUNT(1); 
     354    ARG_str(ip_address,  0); 
     355    struct in_addr addr; 
     356    addr.s_addr = inet_addr(*ip_address); 
     357    struct hostent *host = gethostbyaddr(&(addr.s_addr), sizeof(addr.s_addr), AF_INET); 
     358    if (host) { 
     359        Handle<Array> result = Array::New(3); 
     360        result->Set(Int32::New(0), String::New(host->h_name)); 
     361        { 
     362            Handle<Array> aliaslist = Array::New(); 
     363            for (int i=0; host->h_aliases[i]; i++) { 
     364                aliaslist->Set(Int32::New(i), String::New(host->h_aliases[i])); 
     365            } 
     366            result->Set(Int32::New(1), aliaslist); 
     367        } 
     368        { 
     369            Handle<Array> addrlist = Array::New(); 
     370            for (int i=0; host->h_addr_list[i]; i++) { 
     371                in_addr a; 
     372                memcpy(&a.s_addr, host->h_addr_list[i], sizeof(a.s_addr)); 
     373                addrlist->Set(Int32::New(i), String::New(inet_ntoa(a))); 
     374            } 
     375            result->Set(Int32::New(2), addrlist); 
     376        } 
     377        return result; 
     378    } else { 
     379        herror("gethostbyaddr"); // FIXME 
     380        return ThrowException(String::New("gethostbyaddr error")); 
     381    } 
     382END 
     383 
    351384FUNCTION(_getservbyname) 
    352385    // @prototype getservbyname(servicename[, protocolname]) 
     
    863896        BIND_CM("gethostbyname",  _gethostbyname); 
    864897        BIND_CM("getprotobyname", _getprotobyname); 
     898        BIND_CM("gethostbyaddr",  _gethostbyaddr); 
    865899        BIND_CM("getservbyname",  _getservbyname); 
    866900        BIND_CM("getservbyport",  _getservbyport); 
     
    889923        BIND_IM("getsockopt",     _getsockopt); 
    890924        BIND_IM("close",          _close); 
    891         // rest function is: 16 
    892         // getaddrinfo 
    893         // getfqdn 
    894         // gethostbyaddr 
     925        // rest function is: 13 
    895926        // getnameinfo 
    896927        // fromfd 
  • lang/cplusplus/llv8call/trunk/t/100_socket/02_misc.js

    r21606 r21608  
    3131is(JSON.stringify(Socket.getaddrinfo('example.com', 80)), '[[2,1,6,null,["208.77.188.166",80]],[2,2,17,null,["208.77.188.166",80]]]', 'getaddrinfo'); 
    3232 
     33is(JSON.stringify(Socket.gethostbyaddr('127.0.0.1')), '["localhost",[],["127.0.0.1"]]', 'gethostbyaddr');