+## This file is part of simpleserver
+## Copyright (C) 2000-2014 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.42 2007-08-21 16:29:29 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.07';
+$VERSION = '1.19';
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::Attributes;
package Net::Z3950::RPN::Attribute;
+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
retrieving the results in the form of structured "records". It is widely
used in libraries around the world, as well as in the US Federal Government.
In addition, it is generally useful whenever you wish to integrate a number
-of different database systems around a shared, asbtract data model.
+of different database systems around a shared, abstract data model.
The model of the module is simple: It implements a "generic" Z39.50
server, which invokes callback functions supplied by you to search
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,
Notice, the first argument should be the name of your server
script (for logging purposes), while the rest of the arguments
are documented in the YAZ toolkit manual: The section on
-application invocation: <http://www.indexdata.dk/yaz/yaz-7.php>
+application invocation: <http://indexdata.com/yaz/doc/server.invocation.tkl>
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
$args = {
## Response parameters:
+ PEER_NAME => "", ## Name or IP address of connecting client
IMP_ID => "", ## Z39.50 Implementation ID
IMP_NAME => "", ## Z39.50 Implementation name
IMP_VER => "", ## Z39.50 Implementation version
## Response parameters:
- ERR_CODE => 0, ## Error code (0=Succesful search)
+ ERR_CODE => 0, ## Error code (0=Successful search)
ERR_STR => "", ## Error string
HITS => 0 ## Number of matches
};
=item C<query>
-Mandatory: a refererence to the RPN tree itself.
+Mandatory: a reference to the RPN tree itself.
=back
=item C<attributeValue>
An integer or string indicating the value of the attribute - for example, under
-BIB-1, if the attribute type is 1, then value 4 indictates a title
-search and 7 indictates an ISBN search; but if the attribute type is
+BIB-1, if the attribute type is 1, then value 4 indicates a title
+search and 7 indicates an ISBN search; but if the attribute type is
2, then value 4 indicates a ``greater than or equal'' search, and 102
indicates a relevance match.
sets are likely to occur, the implementation of a reasonable present
handler can gain performance significantly.
-The informations exchanged between client and present handle are:
+The information exchanged between client and present handle is:
$args = {
## Client/server request:
NUMBER => yyy, ## Number of requested records
- ## Respons parameters:
+ ## Response parameters:
HITS => zzz, ## Number of returned records
ERR_CODE => 0, ## Error code
A better alternative to the TERM member is the the RPN
member, which is a reference to a Net::Z3950::RPN::Term object
-representing the scan cloause. The structure of that object is the
+representing the scan clause. The structure of that object is the
same as for Term objects included as part of the RPN tree passed to
search handlers. This is more useful than the simple TERM because it
includes attributes (e.g. access points associated with the term),
=head2 Close handler
-The argument hash recieved by the close handler has two elements only:
+The argument hash received by the close handler has two elements only:
$args = {
## Server provides:
=head2 Delete handler
-The argument hash recieved by the delete handler has the following elements:
+The argument hash received by the delete handler has the following elements:
$args = {
## Client request:
=head2 Sort handler
-The argument hash recieved by the sort handler has the following elements:
+The argument hash received by the sort handler has the following elements:
$args = {
## Client request:
Precisely why all of the above is so is not clear, but goes some way
to explain why, in the Z39.50 world, the developers of the standard
-are not so much worshipped as blamed.
+are not so much worshiped as blamed.
The backend function should set STATUS to 0 on success, 1 for "partial
success" (don't ask) or 2 on failure, in which case ERR_CODE and
Sebastian Hammer (quinn@indexdata.dk),
Mike Taylor (indexdata.com).
+=head1 COPYRIGHT AND LICENCE
+
+Copyright (C) 2000-2014 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,
+at your option, any later version of Perl 5 you may have available.
+
=head1 SEE ALSO
-Any Perl module which is useful for accessing the database of your
+Any Perl module which is useful for accessing the data source of your
choice.
=cut