# $Id: Z3950.pm,v 1.2 2007/02/26 15:58:33 mike Exp $ use strict; use warnings; use Net::Z3950::ZOOM; our $VERSION = '0.99'; # Supersedes "proper" Net::Z3950 v0.51 # 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;