The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use strict;
our $VERSION = '0.07';
#our @ISA = qw(TL1ng::Base);
# Example of a derived class.
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_) or return; # Get the setup from the base-class.
bless $self, $class;
$self->{sessions} = [] unless $self->{sessions};
#use Data::Dumper; print Dumper $self; exit;
return $self;
}
# Logs into the specifid target node using the spuulied credentials.
# Returns true on success, false on failure.
# You should also check the TL1 object for error specifics.
sub login {
my ( $self, $sid, $user, $pass ) = @_;
# no need to continue if we're already logged in!
return $self if grep { $_->{SID} eq $sid } $self->sessions();
my $status
= $self->send_cmd( "ACT-USER:$sid:$user:" . $self->rand_ctag() . "::$pass;" );
return unless $status;
my $msg = $self->get_resp( $self->last_ctag() ) || return;
# Save the message on the queue, since we're not returning it.
push @{ $self->{response_queue} }, $msg;
if ( $msg->{response_code} eq 'COMPLD' ) {
my $session = {
SID => $sid,
USER => $user,
PASS => $pass,
};
push @{ $self->{sessions} }, $session;
return $self;
}
return;
}
sub sessions {
my $self = shift;
$self->{sessions} = [] unless $self->{sessions};
return @{ $self->{sessions} };
}
sub logout {
my ( $self, $sid ) = @_;
# Find the SID in the session list...
my ($session) = grep { $_->{SID} eq $sid } $self->sessions();
# no need to continue if we're NOT already logged in!
return 1 unless $session;
my $user = $session->{USER};
my $pass = $session->{PASS};
$self->send_cmd( "CANC-USER:$sid:$user:" . $self->rand_ctag() . ";" )
|| return;
my $msg = $self->get_resp( $self->last_ctag() ) || return;
# Save the message on the queue, since we're not returning it.
push @{ $self->{response_queue} }, $msg;
if ( defined $msg->{response_code} && $msg->{response_code} eq 'COMPLD' ) {
# If sucessful, remove this SID from the sessions array!
my @sessions = grep { $_->{SID} ne $sid } $self->sessions();
$self->{sessions} = \@sessions;
return 1;
}
return;
}
1;
__END__
=head1 NAME
TL1ng::Generic - Provides generic TL1 commands and functionality
=head1 METHODS
This class extends L<TL1ng::Base> to provide basic TL1 session management
capabilities like login and logout of nodes available via the connected
NE/GNE's TL1 agent.
Since this class inherits from L<TL1ng::Base>, look there for the rest of the
methods this module supports.
=head2 new
Provides nothing over and above the constructor for L<TL1ng::Base>, except
for the initalization of some extra internal data this class needs.
=head2 login
Given a TID/SID, a username, and a password, this method attempts to establish
a login session with an NE available through the currently connected NE/GNE.
=head2 logout
Given the name of an NE (it's TID or SID) it terminates the current login
session.
=head2 sessions
Returns a hashref with information on all currently logged-in sessions.
=cut