+03Mar10=======================================================================
+1. add IP addresses to connecting PC92 A addresses and log them
27Nov09=======================================================================
1. Add 500khz band as suggested by Béla, HA5DI.
2. Add CTY-1923 prefixes
+26Nov09=======================================================================
+1. add ip address to PC92 A records
25Nov09=======================================================================
1. Change sh/qrz to use the xml interface. You will have to subscribe to
the xml interface - see http://www.qrz.com/XML/index.html for more info.
--- /dev/null
+../load/cmd_cache.pl
\ No newline at end of file
my $pkg = shift;
my $call = shift;
# my @rout = $main::routeroot->add_user($call, Route::here(1));
- DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1]);
+ DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1, undef, undef, $self->{conn}->peerhost], );
# ALWAYS output the user
my $ref = Route::User::get($call);
my $name = $user->{name};
# log it
- my $host = $self->{conn}->{peerhost};
+ my $host = $self->{conn}->peerhost;
$host ||= "AGW Port #$self->{conn}->{agwport}" if exists $self->{conn}->{agwport};
$host ||= "unknown";
LogDbg('DXCommand', "$call connected from $host");
my @rout = $ref->delete;
$self->route_pc21($main::mycall, undef, @rout) if @rout;
}
- $main::routeroot->add($call, '5000', Route::here(1)) if $call ne $main::mycall;
+ $main::routeroot->add($call, '5000', Route::here(1), $self->{conn}->peerhost) if $call ne $main::mycall;
return $self;
}
my $user = $self->{user};
# log it
- my $host = $self->{conn}->{peerhost};
+ my $host = $self->{conn}->peerhost;
$host ||= "AGW Port #$self->{conn}->{agwport}" if exists $self->{conn}->{agwport};
$host ||= "unknown";
my $is_node = $flag & 4;
my $is_extnode = $flag & 2;
my $here = $flag & 1;
- return ($call, $is_node, $is_extnode, $here, $part[1], $part[2]);
+ my $ip = $part[3];
+ $ip ||= $part[1] if $part[1] && ($part[1] =~ /^(?:\d+\.)+/ || $part[1] =~ /^(?:(?:[abcdef\d]+)?,)+/);
+ $ip =~ s/,/:/g if $ip;
+ return ($call, $is_node, $is_extnode, $here, $part[1], $part[2], $ip);
}
# decode a pc92 call: flag call : version : build
# plain call or value
return $ref unless ref $ref;
- my $ext = shift;
+ my $ext = shift || 0;
my $flag = 0;
my $call = $ref->call;
my $extra = '';
$flag |= 4;
my $dxchan = DXChannel::get($call);
$flag |= 2 if $call ne $main::mycall && $dxchan && !$dxchan->{do_pc9x};
- if ($ext) {
- if ($ref->version) {
- my $version = $ref->version || 1.0;
- $version = $version * 100 + 5300 if $version < 50;
- $extra .= ":" . $version;
- }
+ if (($ext & 1) && $ref->version) {
+ my $version = $ref->version || 1.0;
+ $version = $version * 100 + 5300 if $version < 50;
+ $extra .= ":" . $version;
}
}
+ if (($ext & 2) && $ref->ip) {
+ my $ip = $ref->ip;
+ $ip =~ s/:/,/g;
+ $extra .= ':' . $ip;
+ }
return "$flag$call$extra";
}
my $dxchan = shift;
my $hops = shift;
- my ($call, $is_node, $is_extnode, $here, $version, $build) = @$s;
+ my ($call, $is_node, $is_extnode, $here, $version, $build, $ip) = @$s;
my @rout;
if ($call) {
+ my $ncall = $parent->call;
if ($is_node) {
- dbg("ROUTE: added node $call to " . $parent->call) if isdbg('routelow');
- @rout = $parent->add($call, $version, Route::here($here));
+ dbg("ROUTE: added node $call to $ncall") if isdbg('routelow');
+ @rout = $parent->add($call, $version, Route::here($here), $ip);
my $r = Route::Node::get($call);
$r->PC92C_dxchan($dxchan->call, $hops) if $r;
+ if ($ip) {
+ $r->ip($ip);
+ Log('DXProt', "PC92A $call -> $ip on $ncall");
+ }
} else {
- dbg("ROUTE: added user $call to " . $parent->call) if isdbg('routelow');
- @rout = $parent->add_user($call, Route::here($here));
- $dxchan->tell_buddies('loginb', $call, $parent->call) if $dxchan;
+ dbg("ROUTE: added user $call to $ncall") if isdbg('routelow');
+ @rout = $parent->add_user($call, Route::here($here), $ip);
+ $dxchan->tell_buddies('loginb', $call, $ncall) if $dxchan;
+ my $r = Route::User::get($call);
+ if ($ip) {
+ $r->ip($ip);
+ Log('DXProt', "PC92A $call -> $ip on $ncall");
+ }
}
if ($pc92_slug_changes && $parent == $main::routeroot) {
$things_add{$call} = Route::get($call);
}
for (@_) {
$s .= '^' . _encode_pc92_call($_, $ext);
- $ext = 0; # only the first slot has an ext.
+ $ext = 0 unless $sort eq 'A'; # only the first slot has an ext.
}
return $s . '^H99^';
}
# add a local one
sub pc92a
{
- return _gen_pc92('A', 0, @_);
+ return _gen_pc92('A', 2, @_);
}
# delete a local one
}
}
+sub peerhost
+{
+ my $self = shift;
+ my $ip;
+ unless ($self->{peerhost}) {
+ $self->{peerhost} = $self->{sock}->peerhost;
+ }
+ return $self->{peerhost};
+}
+
#-----------------------------------------------------------------
# Send side routines
sub connect {
return undef unless $r || _err_will_block($!);
$conn->{sock} = $sock;
-
+ $conn->{peerhost} = $sock->peerhost; # for consistency
+
if ($conn->{rproc}) {
my $callback = sub {$conn->_rcv};
set_event_handler ($sock, read => $callback);
obscount => '0,Obscount',
last_PC92C => '9,Last PC92C',
PC92C_dxchan => '9,Channel of PC92C,phash',
+ ip => '0,IP Address',
);
$filterdef = $Route::filterdef;
{
my $self = shift;
my $ucall = shift;
+ my $here = shift;
+ my $ip = shift;
confess "Trying to add NULL User call to routing tables" unless $ucall;
if ($uref) {
@out = $uref->addparent($self);
} else {
- $uref = Route::User->new($ucall, $self->{call}, @_);
+ $uref = Route::User->new($ucall, $self->{call}, $here, $ip);
@out = $uref;
}
$self->_adduser($uref);
$self->{users} = [];
$self->{nodes} = [];
$self->{PC92C_dxchan} = {};
+ my $ip = shift;
+ $self->{ip} = $ip if defined $ip;
$self->reset_obs; # by definition
$list{$call} = $self;
%valid = (
parent => '0,Parent Calls,parray',
+ ip => '0,IP Address',
);
$filterdef = $Route::filterdef;
my $call = uc shift;
my $ncall = uc shift;
my $flags = shift;
+ my $ip = shift;
+
confess "already have $call in $pkg" if $list{$call};
my $self = $pkg->SUPER::new($call);
$self->{parent} = [ $ncall ];
$self->{flags} = $flags || Route::here(1);
+ $self->{ip} = $ip if defined $ip;
$list{$call} = $self;
return $self;
use vars qw($version $subversion $build);
-$version = '1.55';
+$version = '';
$subversion = '0';
-$build = '55';
+$build = '1';
1;
return;
}
if ($bumpexisting) {
- my $ip = $conn->{peerhost} || 'unknown';
+ my $ip = $conn->peerhost || 'unknown';
$dxchan->send_now('D', DXM::msg($lang, 'conbump', $call, $ip));
LogDbg('DXCommand', "$call bumped off by $ip, disconnected");
$dxchan->disconnect;
my $lock = $user->lockout if $user;
if ($baseuser && $baseuser->lockout || $lock) {
if (!$user || !defined $lock || $lock) {
- my $host = $conn->{peerhost} || "unknown";
+ my $host = $conn->peerhost || "unknown";
LogDbg('DXCommand', "$call on $host is locked out, disconnected");
$conn->disconnect;
return;