From 88a32b75980fe78b55cdeb753f88be35aee35559 Mon Sep 17 00:00:00 2001 From: Elijah Perrault Date: Tue, 8 Feb 2011 15:54:22 -0700 Subject: [PATCH] Added SSL support, also rewrote the socket read/write methods. --- bin/auto | 26 +++++++++++++++++--------- doc/CHANGELOG | 2 ++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/bin/auto b/bin/auto index 785a3a8..90fee7e 100755 --- a/bin/auto +++ b/bin/auto @@ -149,9 +149,9 @@ if (!$NUC and RSTAGE ne 'd') { } # Include IPv6 if Auto was built for it. -if ($ENFEAT =~ /ipv6/) { - require IO::Socket::INET6; -} +if ($ENFEAT =~ /ipv6/) { require IO::Socket::INET6; } +# Include SSL if Auto was built for it. +if ($ENFEAT =~ /ssl/) { require IO::Socket::SSL; } # Parse configuration file. println '* Parsing configuration file auto.conf...'; @@ -302,18 +302,26 @@ foreach my $cskey (keys %cservers) { PeerPort => $cservers{$cskey}{'port'}[0], Timeout => 20, ); - # Set IPv6 data. + # Set IPv6/SSL data. my $use6 = 0; + my $usessl = 0; if (defined $cservers{$cskey}{'ipv6'}[0]) { $use6 = $cservers{$cskey}{'ipv6'}[0]; } + if (defined $cservers{$cskey}{'ssl'}[0]) { $usessl = $cservers{$cskey}{'ssl'}[0]; } # Create the socket. if ($use6) { $SOCKET{$cskey} = IO::Socket::INET6->new(%conndata) or - err(2, 'Failed to connect to server: '.$cskey.' ['.$cservers{$cskey}{'host'}[0].q{:}.$cservers{$cskey}{'port'}[0].']', 0) and next; # Or error. + err(2, 'Failed to connect to server ('.$ERRNO.'): '.$cskey.' ['.$cservers{$cskey}{'host'}[0].q{:}.$cservers{$cskey}{'port'}[0].']', 0) and next; # Or error. } else { - $SOCKET{$cskey} = IO::Socket::INET->new(%conndata) or - err(2, 'Failed to connect to server: '.$cskey.' ['.$cservers{$cskey}{'host'}[0].q{:}.$cservers{$cskey}{'port'}[0].']', 0) and next; # Or error. + if ($usessl) { + $SOCKET{$cskey} = IO::Socket::SSL->new(%conndata) or + err(2, 'Failed to connect to server ('.$ERRNO.'): '.$cskey.' ['.$cservers{$cskey}{'host'}[0].q{:}.$cservers{$cskey}{'port'}[0].']', 0) and next; # Or error. + } + else { + $SOCKET{$cskey} = IO::Socket::INET->new(%conndata) or + err(2, 'Failed to connect to server ('.$ERRNO.'): '.$cskey.' ['.$cservers{$cskey}{'host'}[0].q{:}.$cservers{$cskey}{'port'}[0].']', 0) and next; # Or error. + } } # Send PASS if we have one. @@ -385,7 +393,7 @@ while (1) { } # Read the data. my $idata; - recv $sock, $idata, POSIX::BUFSIZ, 0; + sysread $sock, $idata, POSIX::BUFSIZ, 0; # Check for the data. if (!defined $idata || length($idata) == 0) { @@ -421,7 +429,7 @@ sub socksnd my ($svr, $data) = @_; if (defined $SOCKET{$svr}) { - send $SOCKET{$svr}, $data."\n", 0; + syswrite $SOCKET{$svr}, $data."\n", POSIX::BUFSIZ, 0; dbug "$svr << $data"; return 1; } diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 8ed5961..226d32c 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -3,6 +3,8 @@ Auto IRC Bot 3.0: Change Log 3.0 Indev ================================================================== + * Rewrote socket read/write methods. + * Added SSL support. * Added act() to API::IRC. 3.0 Alpha 2