-sub handle_eau
-{
- my $thing = shift;
- my $dxchan = shift;
-
- if (my $d = $thing->{d}) {
- my $nref;
- for (split /:/, $d) {
- my ($type, $here, $call) = unpack "A1 A1 A*", $_;
- if ($type eq 'U') {
- unless ($nref) {
- dbg("Thingy::Rt::ea need a node before $call");
- return;
- }
- add_user($nref, $call, $here);
- my $h = $dxchan->{call} eq $nref->{call} ? 3 : ($thing->{hops} || 99);
- RouteDB::update($call, $dxchan->{call}, $h);
- } elsif ($type eq 'N') {
- $nref = Route::Node::get($call);
- unless ($nref) {
- dbg("Thingy::Rt::ea need a definition for $call");
- return;
- }
- my $h = $dxchan->{call} eq $nref->{call} ? 2 : ($thing->{hops} || 99);
- RouteDB::update($nref->{call}, $dxchan->{call}, $h);
- } else {
- dbg("Thingy::Rt::ea invalid type $type");
- return;
- }
- }
- }
- return $thing;
-}
-
-sub handle_edu
-{
- my $thing = shift;
- my $dxchan = shift;
-
- if (my $d = $thing->{d}) {
- my $nref;
- for (split /:/, $d) {
- my ($type, $here, $call) = unpack "A1 A1 A*", $_;
- if ($type eq 'U') {
- unless ($nref) {
- dbg("Thingy::Rt::edu need a node before $call");
- return;
- }
- my $uref = Route::User::get($call);
- unless ($uref) {
- dbg("Thingy::Rt::edu $call not a user") if isdbg('chanerr');
- next;
- }
- $nref->del_user($uref);
- RouteDB::delete($call, $dxchan->{call});
- } elsif ($type eq 'N') {
- $nref = Route::Node::get($call);
- unless ($nref) {
- dbg("Thingy::Rt::ed need a definition for $call");
- return;
- }
- RouteDB::update($nref->{call}, $dxchan->{call}, $dxchan->{call} eq $nref->{call} ? 2 : ($thing->{hops} || 99));
- } else {
- dbg("Thingy::Rt::ed invalid type $type");
- 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;
-}