X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXDb.pm;h=81d21928334ea81e15848eed639f58b3225cb062;hb=b9dffeff7239952814342dad19db3a51def6fab7;hp=e399545d0616798c6cd832276d16b6c6c80a659f;hpb=51fc2b9134d2e3bf91daf970c36bb8a80590e34f;p=spider.git diff --git a/perl/DXDb.pm b/perl/DXDb.pm index e399545d..81d21928 100644 --- a/perl/DXDb.pm +++ b/perl/DXDb.pm @@ -49,12 +49,6 @@ $lastprocesstime = time; $nextstream = 0; %stream = (); -use vars qw($VERSION $BRANCH); -$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; - # allocate a new stream for this request sub newstream { @@ -156,6 +150,10 @@ sub getkey my $key = uc shift; my $value; + # massage the key + $key =~ s/[\@\$\&\%\*]+//g; + $key =~ s/^[\.\/]+//g; + # make sure we are open $self->open; if ($self->{localcmd}) { @@ -240,81 +238,58 @@ sub normal # sub process { - my ($dxchan, $line) = @_; - - # this is periodic processing - if (!$dxchan || !$line) { - if ($main::systime - $lastprocesstime >= 60) { - if (%avail) { - for (values %avail) { - if ($main::systime - $_->{accesst} > $opentime) { - $_->close; - } + if ($main::systime - $lastprocesstime >= 60) { + if (%avail) { + for (values %avail) { + if ($main::systime - $_->{accesst} > $opentime) { + $_->close; } } - $lastprocesstime = $main::systime; } - return; + $lastprocesstime = $main::systime; } +} - my @f = split /\^/, $line; - my ($pcno) = $f[0] =~ /^PC(\d\d)/; # just get the number +sub handle_37 +{ - # route out ones that are not for us - if ($f[1] eq $main::mycall) { - ; - } else { - $dxchan->route($f[1], $line); - return; - } +} - SWITCH: { - if ($pcno == 37) { # probably obsolete - last SWITCH; - } +sub handle_44 +{ + my $self = shift; - if ($pcno == 44) { # incoming DB Request - my $db = getdesc($f[4]); - if ($db) { - if ($db->{remote}) { - sendremote($dxchan, $f[2], $f[3], $dxchan->msg('db1', $db->{remote})); - } else { - my $value = $db->getkey($f[5]); - if ($value) { - my @out = split /\n/, $value; - sendremote($dxchan, $f[2], $f[3], @out); - } else { - sendremote($dxchan, $f[2], $f[3], $dxchan->msg('db2', $f[5], $db->{name})); - } - } - } else { - sendremote($dxchan, $f[2], $f[3], $dxchan->msg('db3', $f[4])); - } - last SWITCH; - } + # incoming DB Request + my @in = DXCommandmode::run_cmd($self, "dbshow $_[4] $_[5]"); + sendremote($self, $_[2], $_[3], @in); +} - if ($pcno == 45) { # incoming DB Information - my $n = getstream($f[3]); - if ($n) { - my $mchan = DXChannel->get($n->{call}); - $mchan->send($f[2] . ":$f[4]") if $mchan; - } - last SWITCH; - } +sub handle_45 +{ + my $self = shift; - if ($pcno == 46) { # incoming DB Complete - delstream($f[3]); - last SWITCH; - } + # incoming DB Information + my $n = getstream($_[3]); + if ($n) { + my $mchan = DXChannel::get($n->{call}); + $mchan->send($_[2] . ":$_[4]") if $mchan; + } +} - if ($pcno == 47) { # incoming DB Update request - last SWITCH; - } +sub handle_46 +{ + my $self = shift; - if ($pcno == 48) { # incoming DB Update request - last SWITCH; - } - } + # incoming DB Complete + delstream($_[3]); +} + +sub handle_47 +{ +} + +sub handle_48 +{ } # send back a trache of data to the remote