X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=lib%2FZOOM.pm;h=0b13a2b50dee17d80bacf3d49b9194fb3297d6d6;hb=b0a0bb77b9ea56c10672a382d69969f6c2333d25;hp=c9abcd13553e8ad5d7871485e765b4244aa96f15;hpb=8499abc0d0ff90612291f43c159ac4aab406a2ec;p=ZOOM-Perl-moved-to-github.git diff --git a/lib/ZOOM.pm b/lib/ZOOM.pm index c9abcd1..0b13a2b 100644 --- a/lib/ZOOM.pm +++ b/lib/ZOOM.pm @@ -1,4 +1,4 @@ -# $Id: ZOOM.pm,v 1.24 2005-12-21 17:01:41 mike Exp $ +# $Id: ZOOM.pm,v 1.28 2006-04-03 14:00:00 mike Exp $ use strict; use warnings; @@ -7,7 +7,6 @@ use Net::Z3950::ZOOM; package ZOOM; - # Member naming convention: hash-element names which begin with an # underscore represent underlying ZOOM-C object descriptors; those # which lack them represent Perl's ZOOM objects. (The same convention @@ -50,6 +49,7 @@ sub SORTBY { 20004 } sub CLONE { 20005 } sub PACKAGE { 20006 } sub SCANTERM { 20007 } +sub LOGLEVEL { 20008 } # The "Event" package contains constants returned by last_event() package ZOOM::Event; @@ -86,6 +86,8 @@ sub diag_str { return "can't create package"; } elsif ($code == ZOOM::Error::SCANTERM) { return "can't retrieve term from scan-set"; + } elsif ($code == ZOOM::Error::LOGLEVEL) { + return "unregistered log-level"; } return Net::Z3950::ZOOM::diag_str($code); @@ -272,7 +274,7 @@ package ZOOM::Connection; sub new { my $class = shift(); - my($host, $port) = @_; + my($host, $port, @options) = @_; my $_conn = Net::Z3950::ZOOM::connection_new($host, $port || 0); my $conn = bless { @@ -280,6 +282,16 @@ sub new { port => $port, _conn => $_conn, }; + + while (@options >= 2) { + my $key = shift(@options); + my $val = shift(@options); + $conn->option($key, $val); + } + + die "Odd number of options specified" + if @options; + $conn->_check(); return $conn; } @@ -350,6 +362,7 @@ sub connect { my $this = shift(); my($host, $port) = @_; + $port = 0 if !defined $port; Net::Z3950::ZOOM::connection_connect($this->_conn(), $host, $port); $this->_check(); # No return value @@ -698,22 +711,27 @@ sub _rec { sub render { my $this = shift(); - my $len = 0; - my $string = Net::Z3950::ZOOM::record_get($this->_rec(), "render", $len); - # I don't think we need '$len' at all. ### Probably the Perl-to-C - # glue code should use the value of `len' as well as the opaque - # data-pointer returned, to ensure that the SV contains all of the - # returned data and does not stop at the first NUL character in - # binary data. Carefully check the ZOOM_record_get() documentation. - return $string; + return $this->get("render", @_); } sub raw { my $this = shift(); + return $this->get("raw", @_); +} + +sub get { + my $this = shift(); + my($type, $args) = @_; + + $type = "$type;$args" if defined $args; my $len = 0; - my $string = Net::Z3950::ZOOM::record_get($this->_rec(), "raw", $len); - # See comment about $len in render() + my $string = Net::Z3950::ZOOM::record_get($this->_rec(), $type, $len); + # I don't think we need '$len' at all. ### Probably the Perl-to-C + # glue code should use the value of `len' as well as the opaque + # data-pointer returned, to ensure that the SV contains all of the + # returned data and does not stop at the first NUL character in + # binary data. Carefully check the ZOOM_record_get() documentation. return $string; } @@ -899,6 +917,7 @@ sub destroy { package ZOOM::Log; sub mask_str { my($a) = @_; Net::Z3950::ZOOM::yaz_log_mask_str($a); } +sub module_level { my($a) = @_; Net::Z3950::ZOOM::yaz_log_module_level($a); } sub init { my($a, $b, $c) = @_; Net::Z3950::ZOOM::yaz_log_init($a, $b, $c) } sub init_file { my($a) = @_; Net::Z3950::ZOOM::yaz_log_init_file($a) } @@ -906,7 +925,20 @@ sub init_level { my($a) = @_; Net::Z3950::ZOOM::yaz_log_init_level($a) } sub init_prefix { my($a) = @_; Net::Z3950::ZOOM::yaz_log_init_prefix($a) } sub time_format { my($a) = @_; Net::Z3950::ZOOM::yaz_log_time_format($a) } sub init_max_size { my($a) = @_; Net::Z3950::ZOOM::yaz_log_init_max_size($a) } -sub log { my($a,$b) = @_; Net::Z3950::ZOOM::yaz_log($a, $b) } + +sub log { + my($level, @message) = @_; + + if ($level !~ /^(0x)?\d+$/) { + # Assuming its log-level name, we look it up. + my $num = module_level($level); + ZOOM::_oops(ZOOM::Error::LOGLEVEL, $level) + if $num == 0; + $level = $num; + } + + Net::Z3950::ZOOM::yaz_log($level, join("", @message)); +} 1;