+ my @pc19 = grep { $_ && $_->isa('Route::Node') } @radd;
+ my @pc16 = grep { $_ && $_->isa('Route::User') } @radd;
+ unshift @pc19, $parent if $self->{state} eq 'init92' && $oparent == $parent;
+ $self->route_pc19($pcall, undef, @pc19) if @pc19;
+ $self->route_pc16($pcall, undef, $parent, @pc16) if @pc16;
+}
+
+sub handle_93
+{
+ my $self = shift;
+ my $pcno = shift;
+ my $line = shift;
+ my $origin = shift;
+
+ $self->{do_pc9x} ||= 1;
+
+ my $pcall = $_[1];
+ unless (is_callsign($pcall)) {
+ dbg("PCPROT: invalid callsign string '$_[1]', ignored") if isdbg('chanerr');
+ return;
+ }
+ my $t = $_[2];
+ my $parent = check_pc9x_t($pcall, $t, 93, 1) || return;
+
+ my $to = $_[3];
+ my $from = $_[4];
+ my $via = $_[5];
+ my $text = $_[6];
+ my $onode = $_[7];
+ $onode = $pcall if @_ <= 8;
+
+ # will we allow it at all?
+ if ($censorpc) {
+ my @bad;
+ if (@bad = BadWords::check($text)) {
+ dbg("PCPROT: Bad words: @bad, dropped") if isdbg('chanerr');
+ return;
+ }
+ }
+
+ # if this is a 'bad spotter' user then ignore it
+ my $nossid = $from;
+ $nossid =~ s/-\d+$//;
+ if ($badspotter->in($nossid)) {
+ dbg("PCPROT: Bad Spotter, dropped") if isdbg('chanerr');
+ return;
+ }