X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FThingy%2FRouteUser.pm;fp=perl%2FThingy%2FRouteUser.pm;h=6a69f0938d1fe32845ef1b2ce4c8b83c6dc82449;hb=942cdc8c6434db4e2cf77b43ec26c0059768f853;hp=0000000000000000000000000000000000000000;hpb=a98580704baeea87e9fcfe84838bd9bc2a28e57d;p=spider.git diff --git a/perl/Thingy/RouteUser.pm b/perl/Thingy/RouteUser.pm new file mode 100644 index 00000000..6a69f093 --- /dev/null +++ b/perl/Thingy/RouteUser.pm @@ -0,0 +1,90 @@ +package Thingy::RouteUser; + +use vars qw($VERSION $BRANCH %valid); +$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); +$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0)); +$main::build += $VERSION; +$main::branch += $BRANCH; + +%valid = ( + list => '0,List of Calls,parray', + new => '0,List of new Routes,parray', + ); + +sub add +{ + my $self = shift; + + my $dxchan = DXChannel->get($self->{fromdxchan}); + my $parent = Route::Node::get($self->{fromnode}); + + my @rout; + foreach my $r (@{$self->{list}}) { + + my $user; + if ($sort eq 'U') { + my $old = Route::User::get($r->call); + if ($old) { + if ($old->flags != $r->flags) { + $old->flags($r->flags); + push @rout, $r; + } + $old->addparent($parent); + } else { + $r->register; + $parent->add_user($r->call); + $r->add_parent($parent); + push @rout, $r; + } + + # add this station to the user database, if required + $call =~ s/-\d+$//o; # remove ssid for users + $user = DXUser->get_current($call) || DXUser->new($call); + $user->homenode($parent->call) unless $user->homenode; + $user->node($parent->call); + } elsif ($sort eq 'N') { + my $old = Route::Node::get($call); + if ($old) { + my $ar; + $ar = $parent->add($call, $ver, $flags); + push @rout, $ar if $ar; + } else { + next; + } + } + if ($r->version ne $ver || $r->flags != $flags) { + $r->version($ver); + $r->flags($flags); + push @rout, $r unless $ar; + } + } else { + if ($call eq $self->{call}) { + dbg("DXPROT: my channel route for $call has disappeared"); + next; + }; + + my $new = Route->new($call); # throw away + if ($dxchan->in_filter_route($new)) { + my $r = $parent->add($call, $ver, $flags); + push @rout, $r; + } else { + next; + } + } + + # add this station to the user database, if required (don't remove SSID from nodes) + my $user = DXUser->get_current($call); + unless ($user) { + $user = DXUser->new($call); + $user->sort('A'); + $user->priv(1); # I have relented and defaulted nodes + $user->lockout(1); + $user->homenode($call); + $user->node($call); + } + } + $user->lastin($main::systime) unless DXChannel->get($call); + $user->put; + } + $self->{new} = \@rout; +}