=================================================================== RCS file: /cvs/trango/Net-Telnet-Trango/lib/Net/Telnet/Trango.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- trango/Net-Telnet-Trango/lib/Net/Telnet/Trango.pm 2005/12/30 19:26:06 1.3 +++ trango/Net-Telnet-Trango/lib/Net/Telnet/Trango.pm 2005/12/30 20:26:41 1.4 @@ -1,5 +1,5 @@ package Net::Telnet::Trango; -# $RedRiver: Trango.pm,v 1.2 2005/12/30 01:02:41 andrew Exp $ +# $RedRiver: Trango.pm,v 1.3 2005/12/30 19:26:06 andrew Exp $ use strict; use warnings; use base 'Net::Telnet'; @@ -49,6 +49,111 @@ =pod +=item new + +Same as new from L but has defaults for the trango 'Prompt' + +=cut + +sub new +{ + my $class = shift; + + my %args; + if (@_ == 1) { + $args{'Host'} = shift; + } else { + %args = @_; + } + + $args{'Prompt'} ||= '/#> *$/'; + + foreach my $key (keys %args) { + $PRIVATE{$key} = $args{$key}; + } + + my $self = $class->SUPER::new(%args); + bless $self if ref $self; + + return $self; +} + +# _password +# ? [command] +# apsearch [ ]... +# arp -bcast +# bcastscant [ ... +# bye +# cf2cf ap [default|] +# date +# date +# freq scantable +# freq channeltable +# freq writescan [ ] +# freq writechannel [ ] ... +# freq +# help [command] +# heater [ ] +# ipconfig [ ] +# log [<# of entries, 1..179>] +# log <# of entries, 1..179> +# logout +# opmode [ap [y]] +# password +# ping +# polar +# power > +# reboot +# restart +# remarks [] +# rfrxthreshold [ <-90|-85|-80|-75|-70|-65>] +# rfrxth [ <-90|-85|-80|-75|-70|-65>] +# sysinfo +# set suid +# set apid +# set baseid +# set defaultopmode [ ] +# set defaultopmode off +# set snmpcomm [ ] +# set mir [on|off] +# set mir threshold +# set rssitarget [ ] +# set serviceradius [ ] +# ssrssi +# su [|all] +# su changechannel +# su ipconfig +# su [live|poweroff|priority] +# su +# su powerleveling +# su reboot +# su restart +# su testrflink [r] +# su testrflink [64..1600] +# su testrflink [20..100] +# su sw +# sudb [dload | view] +# sudb add pr +# sudb add reg +# sudb delete > +# sudb modify +# sudb modify +# sudb view +# sulog [lastmins | sampleperiod <1..60>] +# sulog [<# of entry,1..18>] +# survey +# sw [ ] +# temp +# tftpd [on|off] +# time +# time +# save +# save +# updateflash +# updateflash + +=pod + =head1 METHODS =head2 ACCESSORS @@ -138,89 +243,20 @@ reboots the trango and closes the connection -=cut +=item sulog -# _password -# ? [command] -# apsearch [ ]... -# arp -bcast -# bcastscant [ ... -# bye -# cf2cf ap [default|] -# date -# date -# freq scantable -# freq channeltable -# freq writescan [ ] -# freq writechannel [ ] ... -# freq -# help [command] -# heater [ ] -# ipconfig [ ] -# log [<# of entries, 1..179>] -# log <# of entries, 1..179> -# logout -# opmode [ap [y]] -# password -# ping -# polar -# power > -# reboot -# restart -# remarks [] -# rfrxthreshold [ <-90|-85|-80|-75|-70|-65>] -# rfrxth [ <-90|-85|-80|-75|-70|-65>] -# sysinfo -# set suid -# set apid -# set baseid -# set defaultopmode [ ] -# set defaultopmode off -# set snmpcomm [ ] -# set mir [on|off] -# set mir threshold -# set rssitarget [ ] -# set serviceradius [ ] -# ssrssi -# su [|all] -# su changechannel -# su ipconfig -# su [live|poweroff|priority] -# su -# su powerleveling -# su reboot -# su restart -# su testrflink [r] -# su testrflink [64..1600] -# su testrflink [20..100] -# su sw -# sudb [dload | view] -# sudb add pr -# sudb add reg -# sudb delete > -# sudb modify -# sudb modify -# sudb view -# sulog [lastmins | sampleperiod <1..60>] -# sulog [<# of entry,1..18>] -# survey -# sw [ ] -# temp -# tftpd [on|off] -# time -# time -# save -# save -# updateflash -# updateflash +returns an array ref of hashes containing each log line. +=cut + my $success = 'Success.'; my %COMMANDS = ( - tftpd => { decode => 1, expect => $success }, - ver => { decode => 1 }, - sysinfo => { decode => 1, expect => $success }, - updateflash => { decode => 1, expect => $success }, + tftpd => { decode => 'all', expect => $success }, + ver => { decode => 'all' }, + sysinfo => { decode => 'all', expect => $success }, + updateflash => { decode => 'all', expect => $success }, + sulog => { decode => 'sulog', expect => $success }, 'exit' => { Prompt => '//', cmd_disconnects => 1 }, reboot => { Prompt => '//', cmd_disconnects => 1 }, #su password??? @@ -275,37 +311,6 @@ =pod -=item new - -Same as new from L but has defaults for the trango 'Prompt' - -=cut - -sub new -{ - my $class = shift; - - my %args; - if (@_ == 1) { - $args{'Host'} = shift; - } else { - %args = @_; - } - - $args{'Prompt'} ||= '/#> *$/'; - - foreach my $key (keys %args) { - $PRIVATE{$key} = $args{$key}; - } - - my $self = $class->SUPER::new(%args); - bless $self if ref $self; - - return $self; -} - -=pod - =item open Calls Net::Telnet::open() then makes sure you get a password prompt so you are ready to login() and parses the login banner so you can get host_type() and firmware_version() @@ -524,7 +529,13 @@ my $vals = 1; if ($cfg{'decode'}) { - $vals = _decode_lines(@lines); + if ($cfg{'decode'} eq 'each') { + $vals = _decode_each_line(@lines); + } elsif ($cfg{'decode'} eq 'sulog') { + $vals = _decode_sulog(@lines); + } else { + $vals = _decode_lines(@lines); + } } @@ -562,6 +573,8 @@ my $in_val = 0; foreach my $line (@lines) { + next if $line =~ /$success$/; + my @chars = split //, $line; my $last_key = ''; @@ -613,8 +626,46 @@ if (%conf) { return \%conf; } else { - return \@lines; + return undef; } +} + +#=item _decode_each_line + +sub _decode_each_line +{ + my @lines = @_; + my @decoded; + foreach my $line (@lines) { + my $decoded = _decode_lines($line); + push @decoded, $decoded if defined $decoded; + } + return \@decoded; +} + +#=item _decode_sulog + +sub _decode_sulog +{ + my @lines = @_; + my @decoded; + my $last_tm; + foreach my $line (@lines) { + my $decoded = _decode_lines($line); + + if (defined $decoded) { + if ($decoded->{'tm'}) { + $last_tm = $decoded->{'tm'}; + next; + } else { + $decoded->{'tm'} = $last_tm; + } + next unless $last_tm; + + push @decoded, $decoded if defined $decoded; + } + } + return \@decoded; } 1;