[Mew-dist 06110] IPv6 patch for im-98

Hajimu UMEMOTO ( 梅本 肇 ) ume at example.com
1998年 8月 22日 (土) 21:50:46 JST


  梅本@IMASYです。

  FreeBSD 版 KAME の ports/perl5 で作った perl だと 
pack_sockaddr_in6() が使えますので、configure で判別して、pack() の代わ
りに pack_sockaddr_in6() を使用するようにしてみました。また、
--enable-inet6 でも指定できるようにしてあります。

-------------- next part --------------
Index: configure.in
===================================================================
RCS file: /usr/home/ume/ncvs/src/im/configure.in,v
retrieving revision 1.1.1.17
diff -u -r1.1.1.17 configure.in
--- configure.in	1998/08/22 07:14:30	1.1.1.17
+++ configure.in	1998/08/22 11:34:36
@@ -28,6 +28,8 @@
 AC_SUBST(im_rpop)
 AC_SUBST(im_db_type)
 AC_SUBST(im_file_attr)
+AC_SUBST(im_inet6_family)
+AC_SUBST(im_inet6_pack_sockaddr_in6)
 IM_PATH_PERLV_PROGS(im_path_perl, perl perl5, PERL5_NOT_FOUND)
 case "$im_path_perl" in
 ""|PERL5_NOT_FOUND)
@@ -53,6 +55,33 @@
 [  --enable-rpop           Use RPOP (suidperl is needed)],
 [im_rpop="-o root -m 4555"],
 [im_rpop="-m 555"],)
+
+AC_ARG_ENABLE(inet6,
+[  --enable-inet6          Use IPv6 (IPv6 Perl is needed)],
+inet6="$enableval", inet6="no")
+if test "${enable_inet6+set}" != set; then
+	AC_MSG_CHECKING([for IPv6 Perl])
+	cat > conftest.pl <<EOF
+use Socket;
+print AF_INET6 . "\n";
+EOF
+	if test "`$im_path_perl conftest.pl`" != AF_INET6
+	then
+		AC_MSG_RESULT([perl has ipv6])
+		inet6=yes
+	else
+		AC_MSG_RESULT([perl doesn't have ipv6])
+	fi
+	rm -fr conftest*
+fi
+if test "$inet6" != "no"; then
+	AC_MSG_RESULT(INET6 is enabled.)
+	im_inet6_family='AF_INET6'
+	im_inet6_pack_sockaddr_in6='&pack_sockaddr_in6($port, $he_addr)'
+else
+	im_inet6_family='24'
+	im_inet6_pack_sockaddr_in6='pack('CCnN', 1+1+2+4+16, $family, $port, 0) . $he_addr'
+fi
 
 AC_OUTPUT(imali:imali.in imcat:imcat.in imcd:imcd.in imclean:imclean.in \
 	imget:imget.in imgrep:imgrep.in imhist:imhist.in \
Index: IM.in/TcpTransaction.pm.in
===================================================================
RCS file: /usr/home/ume/ncvs/src/im/IM.in/TcpTransaction.pm.in,v
retrieving revision 1.1.1.4
diff -u -r1.1.1.4 TcpTransaction.pm.in
--- TcpTransaction.pm.in	1998/05/23 06:13:20	1.1.1.4
+++ TcpTransaction.pm.in	1998/08/22 08:46:54
@@ -140,7 +140,7 @@
 		@he_addrs = (pack('n8',
 		    hex("0x$1"), hex("0x$2"), hex("0x$3"), hex("0x$4"),
 		    hex("0x$5"), hex("0x$6"), hex("0x$7"), hex("0x$8")));
-		$family = 24; # AF_INET6
+		$family = @im_inet6_family@; # AF_INET6
 	    } else {
 		im_err("bad server address in IPv6 format: $s\n");
 		return '';
@@ -191,7 +191,7 @@
 	    if ($family == AF_INET) {
 		$sin = &pack_sockaddr_in($port, $he_addr);
 	    } else { # AF_INET6
-		$sin = pack('CCnN', 1+1+2+4+16, $family, $port, 0) . $he_addr;
+		$sin = @im_inet6_pack_sockaddr_in6@;
 	    }
 	    im_notice("opening $proto session to $s($port).\n");
 	    alarm(connect_timeout()) unless win95p();
-------------- next part --------------
梅本 肇 @ インターネット互助会横浜
ume at example.com  ume at example.com  http://www.imasy.org/~ume/
プログラムは書いた人の意図ではなく書かれた通り動く


Mew-dist メーリングリストの案内