-# these contain users and either a node (for externals) or the from address
-sub handle_au
-{
- my $thing = shift;
- my $dxchan = shift;
-
- my $node = $thing->{n} || $thing->{user};
- my $nref = Route::Node::get($node);
-
- if ($nref) {
- if (my $u = $thing->{u}) {
- for (split /:/, $u) {
- my ($here, $call) = unpack "A1 A*", $_;
- add_user($nref, $call, $here);
- my $h = $dxchan->{call} eq $nref->{call} ? 3 : ($thing->{hops} || 99);
- RouteDB::update($call, $dxchan->{call}, $h);
- }
- }
- } else {
- dbg("Thingy::Rt::au: $node not found") if isdbg('chanerr');
- return;
- }
- return $thing;
-}
-
-sub handle_du
-{
- my $thing = shift;
- my $dxchan = shift;
-
- my $node = $thing->{n} || $thing->{user};
- my $nref = Route::Node::get($node);
-
- if ($nref) {
- if (my $u = $thing->{u}) {
- for (split /:/, $u) {
- my ($here, $call) = unpack "A1 A*", $_;
- my $uref = Route::User::get($call);
- unless ($uref) {
- dbg("Thingy::Rt::du $call not a user") if isdbg('chanerr');
- next;
- }
- $nref->del_user($uref);
- RouteDB::delete($call, $dxchan->{call});
- }
- RouteDB::update($nref->{call}, $dxchan->{call}, $dxchan->{call} eq $nref->{call} ? 2 : ($thing->{hops} || 99));
- }
- } else {
- dbg("Thingy::Rt::du: $node not found") if isdbg('chanerr');
- return;
- }
-
- return $thing;
-}
-
-sub in_filter
-{
- my $thing = shift;
- my $dxchan = shift;
-
- # global route filtering on INPUT
- if ($dxchan->{inroutefilter}) {
- my $r = Route::Node::get($thing->{origin});
- my ($filter, $hops) = $dxchan->{inroutefilter}->it($dxchan->{call}, $dxchan->{dxcc}, $dxchan->{itu}, $dxchan->{cq}, $r->{call}, $r->{dxcc}, $r->{itu}, $r->{cq}, $dxchan->{state}, $r->{state});
- unless ($filter) {
- dbg("PCPROT: Rejected by input route filter") if isdbg('chanerr');
- return;
- }
- }
- return 1;
-}
-
-sub out_filter
-{
- my $thing = shift;
- my $dxchan = shift;
-
- # global route filtering on OUTPUT
- if ($dxchan->{routefilter}) {
- my $r = Route::Node::get($thing->{origin});
- my ($filter, $hops) = $dxchan->{routefilter}->it($dxchan->{call}, $dxchan->{dxcc}, $dxchan->{itu}, $dxchan->{cq}, $r->{call}, $r->{dxcc}, $r->{itu}, $r->{cq}, $dxchan->{state}, $r->{state});
- unless ($filter) {
- dbg("PCPROT: Rejected by output route filter") if isdbg('chanerr');
- return;
- }
- $thing->{hops} = $hops if $hops;
- } elsif ($dxchan->{isolate}) {
- return;
- }
- return 1;
-}