+## This file is part of simpleserver
+## Copyright (C) 2000-2015 Index Data.
+## All rights reserved.
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
##
-## Copyright (c) 2000-2006, Index Data.
-##
-## Permission to use, copy, modify, distribute, and sell this software and
-## its documentation, in whole or in part, for any purpose, is hereby granted,
-## provided that:
-##
-## 1. This copyright and permission notice appear in all copies of the
-## software and its documentation. Notices of copyright or attribution
-## which appear at the beginning of any file must remain unchanged.
-##
-## 2. The name of Index Data or the individual authors may not be used to
-## endorse or promote products derived from this software without specific
-## prior written permission.
-##
-## THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
-## EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
-## WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-## IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
-## INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
-## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
-## NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
-## LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-## OF THIS SOFTWARE.
-##
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in the
+## documentation and/or other materials provided with the distribution.
+## * Neither the name of Index Data nor the names of its contributors
+## may be used to endorse or promote products derived from this
+## software without specific prior written permission.
##
-
-## $Id: SimpleServer.pm,v 1.50 2010-02-04 16:30:40 mike Exp $
+## THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+## EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+## DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+## DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+## THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package Net::Z3950::SimpleServer;
@ISA = qw(Exporter AutoLoader DynaLoader);
@EXPORT = qw( );
-$VERSION = '1.13';
+$VERSION = '1.20';
bootstrap Net::Z3950::SimpleServer $VERSION;
if (defined($self->{DELETE})) {
set_delete_handler($self->{DELETE});
}
-
+ if (defined($self->{START})) {
+ set_start_handler($self->{START});
+ }
start_server(@args);
}
our @ISA = qw(Net::Z3950::RPN::Node);
package Net::Z3950::RPN::AndNot;
our @ISA = qw(Net::Z3950::RPN::Node);
+package Net::Z3950::RPN::Prox;
+our @ISA = qw(Net::Z3950::RPN::Node);
package Net::Z3950::RPN::Term;
our @ISA = qw(Net::Z3950::RPN::Node);
package Net::Z3950::RPN::RSID;
our @ISA = qw(Net::Z3950::RPN::Node);
package Net::Z3950::RPN::Attributes;
package Net::Z3950::RPN::Attribute;
+package Net::Z3950::RPN::Prox::Attributes;
+package Net::Z3950::FacetList;
+package Net::Z3950::FacetField;
+package Net::Z3950::FacetTerms;
+package Net::Z3950::FacetTerm;
# Utility method for re-rendering Type-1 query back down to PQF
return '@and ' . $this->[0]->toPQF() . ' ' . $this->[1]->toPQF();
} elsif ($class eq "Net::Z3950::RPN::AndNot") {
return '@not ' . $this->[0]->toPQF() . ' ' . $this->[1]->toPQF();
+ } elsif ($class eq "Net::Z3950::RPN::Prox") {
+ my $pattrs = $this->[3];
+ return '@prox ' . $pattrs->{exclusion} . ' ' . $pattrs->{distance} . ' ' . $pattrs->{ordered} . ' ' . $pattrs->{relationType} . (defined $pattrs->{known} ? ' k ' . $pattrs->{known} : ' p ' . $pattrs->{zprivate}) . ' ' . $this->[0]->toPQF() . ' ' . $this->[1]->toPQF();
} elsif ($class eq "Net::Z3950::RPN::RSID") {
return '@set ' . $this->{id};
} elsif ($class ne "Net::Z3950::RPN::Term") {
The programmer can specify subroutines to take care of the following type
of events:
+ - Start service (called once).
- Initialize request
- Search request
- Present request
means of the SimpleServer object constructor
my $z = new Net::Z3950::SimpleServer(
+ START => \&my_start_handler,
INIT => \&my_init_handler,
CLOSE => \&my_close_handler,
SEARCH => \&my_search_handler,
In particular, you need to use the -T switch to start your SimpleServer
in threaded mode.
+=head2 Start handler
+
+The start handler is called when service is started. The argument hash
+passed to the start handler has the form
+
+ $args = {
+ CONFIG => "default-config" ## GFS config (as given by -c)
+ };
+
+
+The purpose of the start handler is to read the configuration file
+for the Generic Frontend Server . This is specified by option -c.
+If -c is omitted, the configuration file is set to "default-config".
+
+The start handler is optional. It is supported in Simpleserver 1.16 and
+later.
+
=head2 Init handler
The init handler is called whenever a Z39.50 client is attempting
=head1 AUTHORS
-Anders Sønderberg (sondberg@indexdata.dk),
+Anders Sønderberg (sondberg@indexdata.dk),
Sebastian Hammer (quinn@indexdata.dk),
Mike Taylor (indexdata.com).
=head1 COPYRIGHT AND LICENCE
-Copyright (C) 2000-2009 by Index Data.
+Copyright (C) 2000-2015 by Index Data.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.4 or,