+
+ # add this interface's hop time to the one passed
+ my $newhoptime = $self->{pingave} >= 999 ?
+ $hoptime+10 : ($hoptime + int($self->{pingave}*10));
+
+ # split up the 'rest' which are 'a=b' pairs separated by commas
+ # and create a new thingy based on the class passed (if known)
+ # ignore pairs with a leading '_'.
+
+ my @par;
+
+ for (split /;/, $rest) {
+ next if /^_/;
+ next unless /^\w+=/;
+ s/\%([0-9A-F][0-9A-F])/chr(hex($1))/eg;
+ push @par, split(/=/,$_,2);
+ }
+
+ no strict 'refs';
+ my $pkg = 'Thingy::' . lcfirst $class;
+ my $t = $pkg->new(_tonode=>$tonode, _fromnode=>$fromnode,
+ _msgid=>$msgid, _hoptime=>$newhoptime,
+ _newdata=>$rest, _inon=>$self->{call},
+ @par) if defined *$pkg && $pkg->can('new');
+ $t->queue if $t;