{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.