/usr/lib/perl5/Net/Z3950/ZOOM.pm is in libnet-z3950-zoom-perl 1.26-1build2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | package Net::Z3950::ZOOM;
use 5.008;
use strict;
use warnings;
our $VERSION = '1.26';
require XSLoader;
XSLoader::load('Net::Z3950::ZOOM', $VERSION);
my($vs, $ss) = ("x" x 100, "x" x 100); # allocate space for these strings
my $version = Net::Z3950::ZOOM::yaz_version($vs, $ss);
if ($version < 0x020132 && ! -f "/tmp/ignore-ZOOM-YAZ-version-mismatch") {
warn <<__EOT__;
*** WARNING!
ZOOM-Perl requires at least version 2.1.50 of YAZ, but is currently
running against only version $vs (sys-string '$ss').
Some things may not work.
__EOT__
}
# The only thing this module does is define the following constants,
# which MUST BE KEPT SYNCHRONISED with the definitions in <yaz/zoom.h>
# Error codes, as returned from connection_error()
sub ERROR_NONE { 0 }
sub ERROR_CONNECT { 10000 }
sub ERROR_MEMORY { 10001 }
sub ERROR_ENCODE { 10002 }
sub ERROR_DECODE { 10003 }
sub ERROR_CONNECTION_LOST { 10004 }
sub ERROR_INIT { 10005 }
sub ERROR_INTERNAL { 10006 }
sub ERROR_TIMEOUT { 10007 }
sub ERROR_UNSUPPORTED_PROTOCOL { 10008 }
sub ERROR_UNSUPPORTED_QUERY { 10009 }
sub ERROR_INVALID_QUERY { 10010 }
sub ERROR_CQL_PARSE { 10011 }
sub ERROR_CQL_TRANSFORM { 10012 }
sub ERROR_CCL_CONFIG { 10013 }
sub ERROR_CCL_PARSE { 10014 }
# Event types, as returned from connection_last_event()
sub EVENT_NONE { 0 }
sub EVENT_CONNECT { 1 }
sub EVENT_SEND_DATA { 2 }
sub EVENT_RECV_DATA { 3 }
sub EVENT_TIMEOUT { 4 }
sub EVENT_UNKNOWN { 5 }
sub EVENT_SEND_APDU { 6 }
sub EVENT_RECV_APDU { 7 }
sub EVENT_RECV_RECORD { 8 }
sub EVENT_RECV_SEARCH { 9 }
sub EVENT_END { 10 } # In YAZ 2.1.17 and later
# CCL error-codes, which are in a different space from the ZOOM errors
sub CCL_ERR_OK { 0 }
sub CCL_ERR_TERM_EXPECTED { 1 }
sub CCL_ERR_RP_EXPECTED { 2 }
sub CCL_ERR_SETNAME_EXPECTED { 3 }
sub CCL_ERR_OP_EXPECTED { 4 }
sub CCL_ERR_BAD_RP { 5 }
sub CCL_ERR_UNKNOWN_QUAL { 6 }
sub CCL_ERR_DOUBLE_QUAL { 7 }
sub CCL_ERR_EQ_EXPECTED { 8 }
sub CCL_ERR_BAD_RELATION { 9 }
sub CCL_ERR_TRUNC_NOT_LEFT { 10 }
sub CCL_ERR_TRUNC_NOT_BOTH { 11 }
sub CCL_ERR_TRUNC_NOT_RIGHT { 12 }
=head1 NAME
Net::Z3950::ZOOM - Perl extension for invoking the ZOOM-C API.
=head1 SYNOPSIS
use Net::Z3950::ZOOM;
$conn = Net::Z3950::ZOOM::connection_new($host, $port);
$errcode = Net::Z3950::ZOOM::connection_error($conn, $errmsg, $addinfo);
Net::Z3950::ZOOM::connection_option_set($conn, databaseName => "foo");
# etc.
=head1 DESCRIPTION
This module provides a simple thin-layer through to the ZOOM-C
functions in the YAZ toolkit for Z39.50 and SRW/U communication. You
should not be using this very nasty, low-level API. You should be
using the C<ZOOM> module instead, which implements a nice, Perlish API
on top of this module, conformant to the ZOOM Abstract API described at
http://zoom.z3950.org/api/
To enforce the don't-use-this-module prohibition, I am not even going
to document it. If you really, really, really want to use it, then it
pretty much follows the API described in the ZOOM-C documentation at
http://www.indexdata.dk/yaz/doc/zoom.tkl
The only additional (non-ZOOM-C) function provided by this module is
C<event_str()>, which takes as its argument an event code such as
C<Net::Z3950::ZOOM::EVENT_SEND_APDU>, and returns a corresponding
short string.
=cut
sub event_str {
my($code) = @_;
if ($code == EVENT_NONE) {
return "none";
} elsif ($code == EVENT_CONNECT) {
return "connect";
} elsif ($code == EVENT_SEND_DATA) {
return "send data";
} elsif ($code == EVENT_RECV_DATA) {
return "receive data";
} elsif ($code == EVENT_TIMEOUT) {
return "timeout";
} elsif ($code == EVENT_UNKNOWN) {
return "unknown";
} elsif ($code == EVENT_SEND_APDU) {
return "send apdu";
} elsif ($code == EVENT_RECV_APDU) {
return "receive apdu";
} elsif ($code == EVENT_RECV_RECORD) {
return "receive record";
} elsif ($code == EVENT_RECV_SEARCH) {
return "receive search";
} elsif ($code == EVENT_END) {
return "end";
}
return "impossible event " . $code;
}
# Switch API variant depending on $type. This works because the
# get_string() and get_binary() functions have different returns
# types, one of which is implemented as a NUL-terminated string and
# the other as a pointer-and-length structure.
#
# Some Z39.50 servers, when asked for an OPAC-format record in the
# case where no circulation information is available, will return a
# USMARC record rather than an OPAC record containing only a
# bibliographic part. This non-OPAC records is not recognised by the
# underlying record_get() code in ZOOM-C, which ends up returning a
# null pointer. To make life a little less painful when dealing with
# such servers until ZOOM-C is fixed, this code recognises the
# wrong-record-syntax case and returns the XML for the bibliographic
# part anyway.
#
sub record_get {
my($rec, $type) = @_;
my $simpletype = $type;
$simpletype =~ s/;.*//;
if (grep { $type eq $_ } qw(database syntax schema)) {
return record_get_string($rec, $type);
} else {
my $val = record_get_binary($rec, $type);
if ($simpletype eq "opac" && !defined $val) {
my $newtype = $type;
if ($newtype !~ s/.*?;/xml;/) {
$newtype = "xml";
}
$val = record_get_binary($rec, $newtype);
$val = ("<opacRecord>\n <bibliographicRecord>\n" . $val .
" </bibliographicRecord>\n</opacRecord>");
}
return $val;
}
}
=head1 SEE ALSO
The C<ZOOM> module, included in the same distribution as this one.
=head1 AUTHOR
Mike Taylor, E<lt>mike@indexdata.comE<gt>
=head1 COPYRIGHT AND LICENCE
Copyright (C) 2005 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.
=cut
1;
|