Short: xerq: new request ERQ_INET6_ATON
From: mai94cch@studserv.uni-leipzig.de
Date: Wed, 5 Jan 2000 19:24:12 +0100 (MEZ)
To: Lars Duening <lars@bearnip.com>
Hallo,
ich hab mal in der erq/xerq eine neue Funktion eingebaut:
ERQ_INET6_ATON : liefert die addresse eines rechners in der
network-byte order.
Ich weis nicht, ob das teil ueberhaupt gebraucht wird, wenn ja wuerde
ich noch
ERQ_INET6_NTOA : liefert die ip eines rechners als string machen.
Wenns nicht gebraucht wird schmeiss den patch auf den muell :-)
MfG
Uwe
------------
diff -r -u ldmud-164:0/INSTALL ldmud-164/INSTALL
--- ldmud-164:0/INSTALL Sat Nov 27 17:31:04 1999
+++ ldmud-164/INSTALL Wed Jan 5 09:11:25 2000
@@ -93,7 +93,7 @@
Furthermore you need a connection to the 6bone
(<URL:http://www.join.uni-muenster.de/>).
- Newer versions of AIX also come with IPv6 support.
+ IPv6 support is also availible for aix 4.3, solaris 8, bsd, HPUX 11 and Windows NT.
BeOS
diff -r -u ldmud-164:0/src/util/erq/erq.c ldmud-164/src/util/erq/erq.c
--- ldmud-164:0/src/util/erq/erq.c Wed Nov 17 21:02:02 1999
+++ ldmud-164/src/util/erq/erq.c Wed Jan 5 11:54:15 2000
@@ -2367,8 +2367,8 @@
strcat(mbuff, "invalid-format");
msglen = strlen(mbuff) + 1;
}
- write_32(header, msglen + 9);
- write1(header, 9);
+ write_32(header, msglen + 8);
+ write1(header, 8);
write1(mbuff, msglen);
free(mbuff);
if (!i)
@@ -2376,6 +2376,28 @@
break;
}
#endif /* ERQ_RLOOKUPV6 */
+
+#ifdef ERQ_INET6_ATON
+ case ERQ_INET6_ATON:
+ {
+ struct hostent *sh;
+
+ /* handle stays in header[4..7] */
+ header[8] = CHILD_FREE;
+ buf[msglen] = 0;
+
+ sh = gethostbyname2(buf, AF_INET6);
+ if(!sh) gethostbyname2(buf, AF_INET);
+
+ msglen = strlen(buf) + (sh ? sh->h_length : strlen("not-found")+1) + 1;
+ write_32(header, msglen + 8);
+ write1(header, 8);
+ write1(buf, strlen(buf));
+ write1(" ", 1);
+ write1(sh ? sh->h_addr_list[0] : "not-found", sh ? sh->h_length : strlen("not-found")+1);
+ endhostent();
+ }
+#endif /* ERQ_INET6_ATON */
} /* switch() */
} /* if (num_ready > 0 && FD_ISSET(1, &readfds)) */
diff -r -u ldmud-164:0/src/util/erq/erq.h ldmud-164/src/util/erq/erq.h
--- ldmud-164:0/src/util/erq/erq.h Tue Oct 12 15:56:30 1999
+++ ldmud-164/src/util/erq/erq.h Wed Jan 5 10:47:19 2000
@@ -19,7 +19,8 @@
#define ERQ_LOOKUP 11 /* Lookup name -> ip */
#ifdef __IPV6__
-#define ERQ_RLOOKUPV6 12 /* Lookup name/ip6 */
+#define ERQ_RLOOKUPV6 12 /* Lookup ip -> name */
+#define ERQ_INET6_ATON 13 /* Lookup name/ip -> network-byte-order */
#endif
diff -r -u ldmud-164:0/src/util/xerq/defs.h ldmud-164/src/util/xerq/defs.h
--- ldmud-164:0/src/util/xerq/defs.h Wed Nov 17 15:12:56 1999
+++ ldmud-164/src/util/xerq/defs.h Wed Jan 5 11:51:16 2000
@@ -221,6 +221,7 @@
extern void erq_lookup(char *, int);
#ifdef USE_IPV6
extern void erq_rlookupv6(char *, int);
+extern void erq_inet6_aton(char *, int);
#endif
extern void close_socket(socket_t *);
diff -r -u ldmud-164:0/src/util/xerq/erq.h ldmud-164/src/util/xerq/erq.h
--- ldmud-164:0/src/util/xerq/erq.h Tue Oct 12 15:56:34 1999
+++ ldmud-164/src/util/xerq/erq.h Wed Jan 5 10:55:12 2000
@@ -19,7 +19,8 @@
#define ERQ_LOOKUP 11 /* Lookup name -> ip */
#ifdef __IPV6__
-#define ERQ_RLOOKUPV6 12 /* Lookup name/ip6 */
+#define ERQ_RLOOKUPV6 12 /* Lookup ip -> name */
+#define ERQ_INET6_ATON 13 /* Lookup name/ip -> network-byte-order */
#endif
diff -r -u ldmud-164:0/src/util/xerq/lookup.c ldmud-164/src/util/xerq/lookup.c
--- ldmud-164:0/src/util/xerq/lookup.c Wed Nov 17 21:42:06 1999
+++ ldmud-164/src/util/xerq/lookup.c Wed Jan 5 11:53:45 2000
@@ -90,9 +90,6 @@
void
erq_rlookupv6(char *mesg, int msglen)
-/* ERQ_RLOOKUPV6: look up an IPv6 address by a hostname.
- */
-
{
int i;
char *mbuff, *buf;
@@ -146,6 +143,36 @@
free(buf);
} /* erq_rlookupv6() */
+
+/*-------------------------------------------------------------------------*/
+
+
+void
+erq_inet6_aton(char *mesg, int msglen)
+{
+ static char *msg_nomem = "out-of-memory";
+ struct hostent *sh;
+ char *mbuff;
+
+ sh = gethostbyname2(mesg, AF_INET6);
+ if(!sh) gethostbyname2(mesg, AF_INET);
+
+ mesg[msglen] = 0;
+ msglen = strlen(mesg) + (sh ? sh->h_length : strlen("not-found")+1) + 1;
+ mbuff = malloc(msglen);
+ if(!mbuff)
+ {
+ reply1(get_handle(mesg), msg_nomem, strlen(msg_nomem)+1);
+ return;
+ }
+ strcpy(mbuff, mesg);
+ strcat(mbuff, " ");
+ if(sh) memcpy(mbuff+strlen(mbuff), sh->h_addr_list[0], sh->h_length);
+ else strcat(mbuff, "not-found");
+ reply1(get_handle(mesg), mbuff, msglen);
+ free(mbuff);
+ endhostent();
+}
#endif /* USE_IPV6 */
------------