use
Carp
qw/ cluck confess /
;
use
overload
'""'
=>
sub
{
shift
->{
'_address'
} };
use
overload
'${}'
=>
sub
{
shift
->{
'_session'
} };
use
overload
'@{}'
=>
sub
{
shift
->{
'_varlist'
} };
BEGIN {
no
strict
'refs'
;
my
%sub2key
=
qw/
address _address
session _session
varlist _varlist
callback _callback
heap _heap
/
;
for
my
$subname
(
keys
%sub2key
) {
*$subname
=
sub
{
my
(
$self
,
$set
) =
@_
;
$self
->{
$sub2key
{
$subname
} } =
$set
if
(
defined
$set
);
$self
->{
$sub2key
{
$subname
} };
}
}
*sesssion
=
sub
{
cluck
"->sesssion() will be deprecated. Use ->session()> instead"
;
return
shift
->session(
@_
);
};
}
sub
arg {
my
$self
=
shift
;
my
$arg
=
shift
;
if
(
ref
$arg
eq
'HASH'
) {
$self
->{
'_arg'
}{
$_
} =
$arg
->{
$_
}
for
(
keys
%$arg
);
}
return
%{
$self
->{
'_arg'
}},
DestHost
=>
"$self"
if
(
wantarray
);
return
$self
->{
'_arg'
};
}
sub
data {
my
$self
=
shift
;
if
(
@_
) {
my
$r
=
shift
;
my
$ref_oid
=
shift
||
''
;
my
$iid
=
$r
->[1]
|| SNMP::Effective::match_oid(
$r
->[0],
$ref_oid
)
|| 1;
$ref_oid
=~ s/^\.//mx;
$self
->{
'_data'
}{
$ref_oid
}{
$iid
} =
$r
->[2];
$self
->{
'_type'
}{
$ref_oid
}{
$iid
} =
$r
->[3];
}
return
$self
->{
'_data'
};
}
sub
new {
my
$class
=
shift
;
my
$args
=
shift
;
my
$log
=
shift
;
my
(
$session
,
@varlist
);
tie
@varlist
,
"SNMP::Effective::VarList"
;
$args
= {
address
=>
$args
}
unless
(
ref
$args
eq
'HASH'
);
$args
->{
'address'
} or confess
'Usage: $class->new(\%args)'
;
return
bless
{
_address
=>
$args
->{
'address'
},
_arg
=>
$args
->{
'arg'
} || {},
_callback
=>
$args
->{
'callback'
} ||
sub
{},
_data
=> {},
_heap
=>
$args
->{
'heap'
},
_session
=> \
$session
,
_varlist
=> \
@varlist
,
},
$class
;
}
sub
clear_data {
my
$self
=
shift
;
$self
->{
'_data'
} = {};
$self
->{
'_type'
} = {};
return
;
}
1;