X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FThingy%2FRt.pm;h=71b7a43aba7cd28070aec45b4a375c7c8f9b20e3;hb=6cb729e57be6b6fb1de41428e0bb7457b53d82e8;hp=8ba7ee00aac373c70ed8d0f2a0df8499bc3f78d0;hpb=f1a23d34defb328c00234aa2b26be931036e4521;p=spider.git diff --git a/perl/Thingy/Rt.pm b/perl/Thingy/Rt.pm index 8ba7ee00..71b7a43a 100644 --- a/perl/Thingy/Rt.pm +++ b/perl/Thingy/Rt.pm @@ -84,21 +84,24 @@ sub handle_cf my $origin = $thing->{origin}; my $chan_call = $dxchan->{call}; + my @pc19; + my @pc21; + my $parent = Route::Node::get($origin); unless ($parent) { - dbg("Thingy::Rt::cf: received from $origin on $chan_call unknown") if isdbg('chanerr'); - return; + dbg("Thingy::Rt::cf: new (unconnected) node $origin arrived") if isdbg('chanerr'); + $parent = Route::Node::new($origin, 0, 1); + push @pc19, $parent; } $parent->np(1); - my @pc19; - my @pc21; - # move the origin over to the user, if required if ($thing->{user}) { $origin = $thing->{user}; my $ref = Route::Node::get($origin); - unless ($ref) { + if ($ref) { + $parent = $ref; + } else { # auto vivify a node that has come that we don't know about push @pc19, $parent->add($origin, 0, 1); $parent = Route::Node::get($origin); # reparent to me now. @@ -128,7 +131,9 @@ sub handle_cf next if $call eq $main::mycall; RouteDB::delete($call, $chan_call); my $ref = Route::Node::get($call); - push @pc21, $ref->del($parent) if $ref; + if ($ref) { + push @pc21, grep {$_} $ref->del($parent); + } } } if ($add) { @@ -136,7 +141,7 @@ sub handle_cf next if $call eq $main::mycall; RouteDB::update($call, $chan_call); my $here = $in{$call}; - push @pc19, $parent->add($call, 0, $here); + push @pc19, grep {$_} $parent->add($call, 0, $here); } } $thing->{pc21n} = \@pc21 if @pc21; @@ -188,7 +193,7 @@ sub _add_user my $flag = shift; my @out = $node->add_user($user, $flag); - my $ur = _upd_user_rec($user, $node); + my $ur = _upd_user_rec($user, $node->{call}); $ur->put; return @out; }