added more routing code
[spider.git] / perl / Thingy.pm
index 0921abd818414d2c2dac083fd5aab6033224cedc..ed33fde027491b84b041187d6e464aedcfc8771c 100644 (file)
@@ -16,10 +16,8 @@ use strict;
 package Thingy;
 
 use vars qw($VERSION $BRANCH @queue @permin @persec);
-$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;
+
+main::mkver($VERSION = q$Revision$);
 
 @queue = ();                                   # the input / processing queue
 
@@ -63,19 +61,17 @@ sub send
 
        # do output filtering
        if ($thing->can('out_filter')) {
-               return unless $thing->out_filter;
+               return unless $thing->out_filter($dxchan);
        }
 
        # generate the line which may (or not) be cached
-       my @out;
-       if (my $ref = $thing->{class}) {
-               push @out, ref $ref ? @$ref : $ref;
-       } else {
+       my $ref;
+       unless ($ref = $thing->{class}) {
                no strict 'refs';
                my $sub = "gen_$class";
-               push @out, $thing->$sub($dxchan) if $thing->can($sub);
+               $ref = $thing->$sub($dxchan) if $thing->can($sub);
        }
-       $dxchan->send(@out) if @out;
+       $dxchan->send(ref $ref ? @$ref : $ref) if $ref;
 }
 
 # broadcast to all except @_
@@ -112,6 +108,11 @@ sub process
                        if ($thing->can('in_filter')) {
                                next unless $thing->in_filter($dxchan);
                        }
+
+                       # remember any useful routes
+                       RouteDB::update($thing->{origin}, $dxchan->{call}, $thing->{hopsaway});
+                       RouteDB::update($thing->{user}, $dxchan->{call}, $thing->{hopsaway}) if exists $thing->{user};
+               
                        $thing->handle($dxchan);
                }
        }