use vars qw($VERSION $BRANCH);
$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
-$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /^\d+\.\d+(?:\.(\d+)\.(\d+))?$/ || (0,0));
$main::build += $VERSION;
$main::branch += $BRANCH;
@ISA = qw(Msg);
$deftimeout = 60;
+sub login
+{
+ goto &main::login; # save some writing, this was the default
+}
+
sub enqueue
{
my ($conn, $msg) = @_;
delete $conn->{timeout};
$conn->nolinger;
&{$conn->{rproc}}($conn, "$dir$call|$sort");
- $conn->_send_file("$main::data/connected") unless $conn->{outgoing};
+ $conn->_send_file("$main::data/connected") unless $conn->{outbound};
}
sub new_client {
my $call = shift;
my $fn = shift;
my $conn = ExtMsg->new(\&main::new_channel);
- $conn->{outgoing} = 1;
+ $conn->{outbound} = 1;
$conn->conns($call);
-
- my $f = new IO::File $fn;
- push @{$conn->{cmd}}, <$f>;
- $f->close;
+ push @{$conn->{cmd}}, @_;
$conn->{state} = 'WC';
$conn->_dotimeout($deftimeout);
$conn->_docmd;
dbg("CONNECT $conn->{cnum} sort: $sort command: $line") if isdbg('connect');
if ($sort eq 'telnet') {
# this is a straight network connect
- my ($host, $port) = split /\s+/, $line;
+ my ($host, $port, $type) = split /\s+/, $line;
+ if ($type && ref($conn) ne $type) {
+ bless $conn, $type;
+ $conn->set_newchannel_rproc;
+ dbg("$conn->{cnum} to $host $port reblessed as $type") if isdbg('connect');
+ }
$port = 23 if !$port;
$r = $conn->connect($host, $port);
if ($r) {
dbg("Connected $conn->{cnum} to $host $port") if isdbg('connect');
+
} else {
dbg("***Connect $conn->{cnum} Failed to $host $port $!") if isdbg('connect');
}
bless $conn, 'AGWMsg';
$r = $conn->connect($line);
} elsif ($sort eq 'ax25' || $sort eq 'prog') {
- local $^F = 10000; # make sure it ain't closed on exec
- my ($a, $b) = IO::Socket->socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
- if ($a && $b) {
- $r = 1;
- $a->autoflush(1);
- $b->autoflush(1);
- my $pid = fork;
- if (defined $pid) {
- if ($pid) {
- close $b;
- $conn->{sock} = $a;
- $conn->{csort} = $sort;
- $conn->{lineend} = "\cM" if $sort eq 'ax25';
- $conn->{pid} = $pid;
- if ($conn->{rproc}) {
- my $callback = sub {$conn->_rcv};
- Msg::set_event_handler ($a, read => $callback);
- }
- dbg("connect $conn->{cnum}: started pid: $conn->{pid} as $line") if isdbg('connect');
- } else {
- $^W = 0;
- dbgclose();
- STDIN->close;
- STDOUT->close;
- STDOUT->close;
- *STDIN = IO::File->new_from_fd($b, 'r') or die;
- *STDOUT = IO::File->new_from_fd($b, 'w') or die;
- *STDERR = IO::File->new_from_fd($b, 'w') or die;
- close $a;
- unless ($main::is_win) {
-# $SIG{HUP} = 'IGNORE';
- $SIG{HUP} = $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = 'DEFAULT';
- alarm(0);
- }
- exec "$line" or dbg("exec '$line' failed $!");
- }
- } else {
- dbg("cannot fork");
- $r = undef;
- }
- } else {
- dbg("no socket pair $!");
- }
+ $r = $conn->start_program($line, $sort);
} else {
dbg("invalid type of connection ($sort)");
}