# add this node to the table, the values get filled in later
my $pkg = shift;
my $call = shift;
+
+ # if we have an entry already, then send a PC21 to all connect
+ # old style connections, because we are about to get the real deal
+ if (my $ref = Route::Node::get($call)) {
+ dbg("ROUTE: $call is already in the routing table, deleting") if isdbg('route');
+ 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;
return $self;
}
}
+sub gen_my_pc92_config
+{
+ my $node = shift;
+
+ if ($node->{call} eq $main::mycall) {
+ my @dxchan = grep { $_->call ne $main::mycall && !$_->{isolate} } DXChannel::get_all();
+ dbg("ROUTE: all dxchan: " . join(',', map{$_->{call}} @dxchan)) if isdbg('routelow');
+ my @localnodes = map { my $r = Route::get($_->{call}); $r ? $r : () } @dxchan;
+ dbg("ROUTE: localnodes: " . join(',', map{$_->{call}} @localnodes)) if isdbg('routelow');
+ return pc92c($main::routeroot, @localnodes);
+ } else {
+ my @rout = map {my $r = Route::User::get($_); $r ? ($r) : ()} $node->users;
+ return pc92c($node, @rout);
+ }
+}
+
sub gen_pc92_update
{
my $self = shift;
my $with_pc92_nodes = shift;
my $node;
my @lines;
-
- dbg('DXProt::gen_pc92_update') if isdbg('trace');
-
- # send 'my' configuration for all users and pc92 capable nodes
- my @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} } DXChannel::get_all();
- my @localnodes = map { my $r = Route::get($_->{call}); $r ? $r : () } @dxchan;
- push @lines, pc92c($main::routeroot, @localnodes);
+ my @dxchan;
+ my @localnodes;
+ dbg('ROUTE: DXProt::gen_pc92_update start') if isdbg('routelow');
+ # send 'my' configuration for all channels
+ push @lines, gen_my_pc92_config($main::routeroot);
+
if ($with_pc92_nodes) {
# send out the configuration of all the directly connected PC92 nodes with current configuration
# but with the dates that the last config came in with.
@dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} && $_->{do_pc92} } DXChannel::get_all_nodes();
+ dbg("ROUTE: pc92 dxchan: " . join(',', map{$_->{call}} @dxchan)) if isdbg('routelow');
@localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan;
+ dbg("ROUTE: pc92 localnodes: " . join(',', map{$_->{call}} @localnodes)) if isdbg('routelow');
foreach $node (@localnodes) {
if ($node && $node->lastid->{92}) {
my @rout = map {my $r = Route::get($_); $r ? ($r) : ()} $node->nodes, $node->users;
# send the configuration of all the directly connected 'external' nodes that don't handle PC92
# out with the 'external' marker on the first node.
@dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} && !$_->{do_pc92} } DXChannel::get_all_nodes();
+ dbg("ROUTE: non pc92 dxchan: " . join(',', map{$_->{call}} @dxchan)) if isdbg('routelow');
@localnodes = map { my $r = Route::Node::get($_->{call}); $r ? $r : () } @dxchan;
+ dbg("ROUTE: non pc92 localnodes: " . join(',', map{$_->{call}} @localnodes)) if isdbg('routelow');
foreach $node (@localnodes) {
if ($node) {
- my @rout = map {my $r = Route::User::get($_); $r ? ($r) : ()} $node->users;
- push @lines, pc92c($node, @rout);
+ push @lines, gen_my_pc92_config($node);
}
}
+
+ dbg('ROUTE: DXProt::gen_pc92_update end with ' . scalar @lines . ' lines') if isdbg('routelow');
return @lines;
}