X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FThingy.pm;h=a420206d5ef402a7c70f038927ab575a068fd41d;hb=c3c15883cf25add24fc49e32eb0d17dce6839a62;hp=7bbf3edb1568673e265769b36926ea0068dea786;hpb=393e17fd3a08dd94596f1c02d4d20f6f9a44954f;p=spider.git diff --git a/perl/Thingy.pm b/perl/Thingy.pm index 7bbf3edb..a420206d 100644 --- a/perl/Thingy.pm +++ b/perl/Thingy.pm @@ -42,6 +42,8 @@ sub new { my $class = shift; my $thing = {@_}; + + $thing->{origin} ||= $main::mycall; bless $thing, $class; return $thing; @@ -65,15 +67,13 @@ sub send } # 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 @_ @@ -98,14 +98,24 @@ sub queue push @queue, $thing; } +# # this is the main commutator loop. In due course it will -# become the *only* commutator loop +# become the *only* commutator loop, This can be called in one +# of two ways: either with 2 args or with none. +# +# The two arg form is an immediate "queue and handle" and does +# a full cycle, immediately +# sub process { my $thing; + if (@_ == 2) { + $thing = shift; + $thing->queue(shift); + } while (@queue) { $thing = shift @queue; - my $dxchan = DXChannel->get($thing->{dxchan}); + my $dxchan = DXChannel::get($thing->{dxchan}); if ($dxchan) { if ($thing->can('in_filter')) { next unless $thing->in_filter($dxchan); @@ -163,5 +173,14 @@ sub ascii $dd->Quotekeys($] < 5.005 ? 1 : 0); return $dd->Dumpxs; } + +sub add_auth +{ + my $thing = shift; + my $s = $thing->{'s'} = sprintf "%X", int(rand() * 100000000); + my $auth = Verify->new("DXSp,$main::mycall,$s,$main::version,$main::build"); + $thing->{auth} = $auth->challenge($main::me->user->passphrase); +} + 1;