From: mike Date: Thu, 13 Oct 2005 13:11:17 +0000 (+0000) Subject: New X-Git-Tag: cpan_1_22~458 X-Git-Url: http://lists.indexdata.dk/?a=commitdiff_plain;h=b8d58a3656189be0c535224689945679dab2babf;p=ZOOM-Perl-moved-to-github.git New --- diff --git a/lib/Net/Z3950.pm b/lib/Net/Z3950.pm new file mode 100644 index 0000000..503dacf --- /dev/null +++ b/lib/Net/Z3950.pm @@ -0,0 +1,196 @@ +# $Id: Z3950.pm,v 1.1 2005-10-13 13:11:17 mike Exp $ + +use strict; +use warnings; +use Net::Z3950::ZOOM; + + +# Member naming convention is the same as in ../ZOOM.pm + +# ---------------------------------------------------------------------------- +# Enumerations are copied from the old Net::Z3950 module. +# It's not entirely clear yet which of these we actually need, for for +# now I am commenting them all out, and faulting in the ones we need. +# ---------------------------------------------------------------------------- + +# Define the operation-code enumeration. The values here are chosen +# to be in a distinctive range (i.e. 3950 plus a small integer) so +# that if they are misused in another context, they're easy to spot. +package Net::Z3950::Op; +sub Error { 3951 } +sub Init { 3952 } +sub Search { 3953 } +sub Get { 3954 } +sub DeleteRS { 3955 } +sub Scan { 3956 } +package Net::Z3950; + + +## Define the record-syntax enumeration. These values must be kept +## synchronised with the values implied by the oid_value enumeration in +## the header file "yaz/oid.h" +#package Net::Z3950::RecordSyntax; +#sub UNIMARC { 16 } +#sub INTERMARC { 17 } +#sub CCF { 18 } +#sub USMARC { 19 } +#sub UKMARC { 20 } +#sub NORMARC { 21 } +#sub LIBRISMARC { 22 } +#sub DANMARC { 23 } +#sub FINMARC { 24 } +#sub MAB { 25 } +#sub CANMARC { 26 } +#sub SBN { 27 } +#sub PICAMARC { 28 } +#sub AUSMARC { 29 } +#sub IBERMARC { 30 } +#sub CATMARC { 31 } +#sub MALMARC { 32 } +#sub EXPLAIN { 33 } +#sub SUTRS { 34 } +#sub OPAC { 35 } +#sub SUMMARY { 36 } +#sub GRS0 { 37 } +#sub GRS1 { 38 } +#sub EXTENDED { 39 } +#sub TEXT_HTML { 70 } +#sub XML { 80 } +#sub TEXT_XML { 80 } +#sub APPLICATION_XML { 81 } +# +#use vars '%map'; +## Maps record-syntax name strings to enumeration members +#%map = (UNIMARC => UNIMARC, +# INTERMARC => INTERMARC, +# CCF => CCF, +# USMARC => USMARC, +# UKMARC => UKMARC, +# NORMARC => NORMARC, +# LIBRISMARC => LIBRISMARC, +# DANMARC => DANMARC, +# FINMARC => FINMARC, +# MAB => MAB, +# CANMARC => CANMARC, +# SBN => SBN, +# PICAMARC => PICAMARC, +# AUSMARC => AUSMARC, +# IBERMARC => IBERMARC, +# CATMARC => CATMARC, +# MALMARC => MALMARC, +# EXPLAIN => EXPLAIN, +# SUTRS => SUTRS, +# OPAC => OPAC, +# SUMMARY => SUMMARY, +# GRS0 => GRS0, +# GRS1 => GRS1, +# EXTENDED => EXTENDED, +# TEXT_HTML => TEXT_HTML, +# XML => XML, +# TEXT_XML => TEXT_XML, +# APPLICATION_XML => APPLICATION_XML, +# ); +#package Net::Z3950; +# +# +## Define the reason-for-decodeAPDU()-failure enumeration. This must +## be kept synchronised with the values #defined in "yazwrap/yazwrap.h" +#package Net::Z3950::Reason; +#sub EOF { 23951 } # read EOF from connection (server gone) +#sub Incomplete { 23952 } # read bytes, but not yet a whole APDU +#sub Malformed { 23953 } # couldn't decode APDU (malformed) +#sub BadAPDU { 23954 } # APDU was well-formed but unrecognised +#sub Error { 23955 } # some other error (consult errno) +#package Net::Z3950; +# +# +## Define the query-type enumeration. This must be kept synchronised +## with the values #defined in "yazwrap/yazwrap.h" +#package Net::Z3950::QueryType; +#sub Prefix { 39501 } # Yaz's "@attr"-ish forward-Polish notation +#sub CCL { 39502 } # Send CCL string to server ``as is'' +#sub CCL2RPN { 39503 } # Convert CCL to RPN (type-1) locally +#sub CQL { 39504 } # Send CQL string to server ``as is'' +#package Net::Z3950; +# +# +## Define the result-set-status enumeration, used by the +## `resultSetStatus' field in the Net::Z3950::APDU::SearchResponse +## class in cases where `searchStatus' is false (indicating failure). +## This must be kept synchronised with the ASN.1 for the structure +## described in section 3.2.2.1.11 of the Z39.50 standard itself. +#package Net::Z3950::ResultSetStatus; +#sub Subset { 1 } +#sub Interim { 2 } +#sub None { 3 } +#package Net::Z3950; +# +# +## Define the present-status enumeration, used by the `presentStatus' +## field in the Net::Z3950::APDU::SearchResponse class in cases where +## `searchStatus' is true (indicating success). This must be kept +## synchronised with the ASN.1 for the structure described in section +## 3.2.2.1.11 of the Z39.50 standard itself. +#package Net::Z3950::PresentStatus; +#sub Success { 0 } +#sub Partial1 { 1 } +#sub Partial2 { 2 } +#sub Partial3 { 3 } +#sub Partial4 { 4 } +#sub Failure { 5 } +#package Net::Z3950; +# +# +## Define the scan-status enumeration, used by the `scanStatus' +## field in the Net::Z3950::APDU::ScanResponse class. This must be +## kept synchronised with the ASN.1 for the structure described in +## section 3.2.8.1.6 of the Z39.50 standard itself. +#package Net::Z3950::ScanStatus; +#sub Success { 0 } +#sub Partial1 { 1 } +#sub Partial2 { 2 } +#sub Partial3 { 3 } +#sub Partial4 { 4 } +#sub Partial5 { 5 } +#sub Failure { 6 } +#package Net::Z3950; + +# ---------------------------------------------------------------------------- + +package Net::Z3950; + +sub errstr { + my($errcode) = @_; + # This is not 100% compatible, because it will translate + # ZOOM-level errors as well as BIB-1 diagnostic codes. + return Net::Z3950::ZOOM::diag_str($errcode) +} + +sub opstr { + my($op) = @_; + return "error" if $op == Net::Z3950::Op::Error; + return "init" if $op == Net::Z3950::Op::Init; + return "search" if $op == Net::Z3950::Op::Search; + return "get" if $op == Net::Z3950::Op::Get; + return "deleteRS" if $op == Net::Z3950::Op::DeleteRS; + return "scan" if $op == Net::Z3950::Op::Scan; + return "unknown op " . $op; +} + + +# ---------------------------------------------------------------------------- + +package Net::Z3950::Manager; +sub new { Net::Z3950::Connection->new() } + + +# ---------------------------------------------------------------------------- + +package Net::Z3950::Connection; + +sub new { + die "The Net::Z3950::ZOOM distribution does not yet support the Net::Z3950 'Classic' API. A subsequent version will do so; until then, please continue using Net::Z3950 itself if you need its API." +} + + +1;