{section: currently working on} -{subsection: Link error} - -Mar, 9 : resolved some errors. condor_getaddrinfo, condor_getnameinfo -Mar, 12 : most of errors are resolved. get_full_hostname should be converted. - -{code} -/u/m/_/m/ron_ws/src/condor_util_lib/internet.c:1024: undefined reference to `my_ip_addr' -../condor_c++_util/cplus_lib.a(my_hostname.o): In function `init_full_hostname': -/u/m/_/m/ron_ws/src/condor_c++_util/my_hostname.cpp:140: undefined reference to `get_full_hostname_ipv6(char const*, ipaddr&)' -../condor_c++_util/cplus_lib.a(my_hostname.o): In function `init_ipaddr': -/u/m/_/m/ron_ws/src/condor_c++_util/my_hostname.cpp:209: undefined reference to `get_full_hostname_ipv6(char const*, ipaddr&)' -../condor_io/libcedar.a(sock.o): In function `Sock::get_port()': -/u/m/_/m/ron_ws/src/condor_io/sock.cpp:1952: undefined reference to `condor_getsockname(int, ipaddr&)' -../condor_io/libcedar.a(sock.o): In function `Sock::bindWithin(int, int, bool)': -/u/m/_/m/ron_ws/src/condor_io/sock.cpp:447: undefined reference to `ipv6_my_ip_addr()' -../condor_io/libcedar.a(sock.o): In function `Sock::bind(bool, int, bool)': -/u/m/_/m/ron_ws/src/condor_io/sock.cpp:579: undefined reference to `ipv6_my_ip_addr()' -../condor_io/libcedar.a(sock.o): In function `Sock::do_connect(char const*, int, bool)': -/u/m/_/m/ron_ws/src/condor_io/sock.cpp:752: undefined reference to `ipaddr::ipaddr(sockaddr*)' -../condor_io/libcedar.a(condor_auth_x509.o): In function `getDaemonList(ReliSock*)': -/u/m/_/m/ron_ws/src/condor_io/condor_auth_x509.cpp:480: undefined reference to `ipaddr::to_hostname(char*, int) const' -collect2: ld returned 1 exit status -{endcode} - {section: Note for constants} Don't forget constants that should be adjusted! @@ -64,8 +40,36 @@ Original implementation was just re-invention of inet_ntop()/inet_ntoa(). So, I replaced to new implementation that calls inet_ntop() twice. (with AF_INET and AF_INET6) +{subsection: struct hostent} + +I Initially only looked at struct sockaddr_in. I wrote class ipaddr for replacement. However, it is only half of the world. I should devise IPv6 compliant structure for struct hostent and make it obsolete. I think it would make more sense if we have class ipaddr and class MyString instead of sockaddr* and char*. Write here some design possibilities! + +{code} +// from MSDN +typedef struct hostent { + char FAR *h_name; + char FAR FAR **h_aliases; + short h_addrtype; + short h_length; + char FAR FAR **h_addr_list; +} + +typedef struct addrinfo { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + char *ai_canonname; + struct sockaddr *ai_addr; + struct addrinfo *ai_next; +} +{endcode} + {subsection: get_full_hostname} +my_ip_addr, my_hostname, my_full_hostname() and get_full_hostname() are now obsolete. Now, implementing ipv6_hostname.{h/cpp}. + It uses gethostbyname() which has been obsoleted. It should call getaddrinfo() instead. The function has about 150-200 lines of code. At the end of function, it tail-calls get_full_hostname_from_hostent(). struct hostent is also deprecated structure. It requires overhaul from interface to implementation.