-# $Id: Connection.pm,v 1.8 2007-03-05 19:43:10 mike Exp $
+# $Id: Connection.pm,v 1.21 2007-12-20 12:35:01 mike Exp $
package ZOOM::IRSpy::Connection;
our @ISA = qw(ZOOM::Connection);
use ZOOM::IRSpy::Record;
-use ZOOM::IRSpy::Utils qw(cql_target render_record);
+use ZOOM::IRSpy::Utils qw(cql_target render_record irspy_identifier2target);
use ZOOM::IRSpy::Task::Connect;
use ZOOM::IRSpy::Task::Search;
sub create {
my $class = shift();
my $irspy = shift();
- my $target = shift();
+ my $id = shift();
my $this = $class->SUPER::create(@_);
+ my $target = irspy_identifier2target($id);
$this->option(host => $target);
$this->{irspy} = $irspy;
$this->{tasks} = [];
- my $query = cql_target($target);
- my $rs = $irspy->{conn}->search(new ZOOM::Query::CQL($query));
+ my $query = cql_target($id);
+ my $rs;
+ eval {
+ $rs = $irspy->{conn}->search(new ZOOM::Query::CQL($query));
+ }; if ($@) {
+ # This should be a "can't happen", but junk entries such as
+ # //lucasportal.info/blogs/payday-usa">'</a>night:G<a href="http://lucasportal.info/blogs/payday-usa">'</a>night/Illepeliz
+ # (yes, really) yield BIB-1 diagnostic 108 "Malformed query"
+ warn "registry search for record '$id' had error: '$@' -- skipping";
+ return undef;
+ }
my $n = $rs->size();
- $this->log("irspy", "query '$query' found $n records");
+ $this->log("irspy", "query '$query' found $n record", $n==1 ? "" : "s");
+ ### More than 1 hit is always an error and indicates duplicate
+ # records in the database; no hits is fine for a new target
+ # being probed for the first time, but not if the connection is
+ # being created as part of an "all known targets" scan.
my $zeerex;
$zeerex = render_record($rs, 0, "zeerex") if $n > 0;
$this->{record} = new ZOOM::IRSpy::Record($this, $target, $zeerex);
}
+sub destroy {
+ my $this = shift();
+ $this->SUPER::destroy(@_);
+}
+
+
sub irspy {
my $this = shift();
return $this->{irspy};
my $this = shift();
my($udata, $options, %cb) = @_;
- my $task = new ZOOM::IRSpy::Task::Connect($this, $udata, $options, %cb);
- $this->add_task($task);
+ $this->add_task(new ZOOM::IRSpy::Task::Connect
+ ($this, $udata, $options, %cb));
}
-sub irspy_search_pqf {
+sub irspy_search {
my $this = shift();
- my($query, $udata, $options, %cb) = @_;
+ my($qtype, $qstr, $udata, $options, %cb) = @_;
- my $task = new ZOOM::IRSpy::Task::Search($query,
- $this, $udata, $options, %cb);
- $this->add_task($task);
+ #warn "calling $this->irspy_search(", join(", ", @_), ")\n";
+ $this->add_task(new ZOOM::IRSpy::Task::Search
+ ($qtype, $qstr, $this, $udata, $options, %cb));
+}
+
+
+# Wrapper for backwards compatibility
+sub irspy_search_pqf {
+ my $this = shift();
+ return $this->irspy_search("pqf", @_);
}
my $this = shift();
my($rs, $index0, $udata, $options, %cb) = @_;
- my $task = new ZOOM::IRSpy::Task::Retrieve($rs, $index0,
- $this, $udata, $options, %cb);
- $this->add_task($task);
+ $this->add_task(new ZOOM::IRSpy::Task::Retrieve
+ ($rs, $index0, $this, $udata, $options, %cb));
}