X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtHandle.pm;h=c5d4bf4e756a77516b12080000f0bd14e7b37a63;hb=refs%2Fheads%2Fip_address;hp=c5f6cc81b2a7edcf0043b94e37ac2665d5dbceae;hpb=229eee2688f9e4a1f5489b7bfafd7c32bfc12548;p=spider.git diff --git a/perl/DXProtHandle.pm b/perl/DXProtHandle.pm index c5f6cc81..c5d4bf4e 100644 --- a/perl/DXProtHandle.pm +++ b/perl/DXProtHandle.pm @@ -1353,7 +1353,10 @@ sub _decode_pc92_call 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 @@ -1364,7 +1367,7 @@ sub _encode_pc92_call # 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 = ''; @@ -1373,14 +1376,17 @@ sub _encode_pc92_call $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"; } @@ -1394,19 +1400,29 @@ sub _add_thingy 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); @@ -1860,7 +1876,7 @@ sub find_pc9x_routes if ($ref->isa('Route::User')) { my $dxchan = DXChannel::get($to); push @parent, $to if $dxchan; - push @parent, @{$ref->parent}; + push @parent, $ref->parents; } else { @parent = $to; }