File Coverage

blib/lib/Data/Radius/Constants.pm
Criterion Covered Total %
statement 16 23 69.5
branch 0 8 0.0
condition n/a
subroutine 6 7 85.7
pod 1 1 100.0
total 23 39 58.9


line stmt bran cond sub pod time code
1             package Data::Radius::Constants;
2 1     1   1055 use strict;
  1         2  
  1         31  
3 1     1   6 use warnings;
  1         1  
  1         59  
4              
5             my %RFC_TYPES;
6              
7             BEGIN {
8 1     1   40 %RFC_TYPES = (
9             # RADIUS Codes
10             ACCESS_REQUEST => 1,
11             ACCESS_ACCEPT => 2,
12             ACCESS_REJECT => 3,
13             ACCOUNTING_REQUEST => 4,
14             ACCOUNTING_RESPONSE => 5,
15             ACCOUNTING_STATUS => 6,
16             ACCESS_CHALLENGE => 11,
17             # unused - not exported
18             STATUS_SERVER => 12,
19             STATUS_CLIENT => 13,
20             # rfc3576
21             DISCONNECT_REQUEST => 40,
22             DISCONNECT_ACCEPT => 41,
23             DISCONNECT_REJECT => 42,
24             COA_REQUEST => 43,
25             COA_ACCEPT => 44,
26             COA_REJECT => 45,
27             );
28             }
29 1     1   41 use constant \%RFC_TYPES;
  1         4  
  1         247  
30              
31 1     1   7 use Exporter qw(import);
  1         3  
  1         79  
32              
33             our @EXPORT_OK = (keys (%RFC_TYPES), '%RADIUS_PACKET_TYPES', 'accepting_packet_type');
34             our %EXPORT_TAGS = ( all => [ @EXPORT_OK ] );
35              
36 1     1   511 use Const::Fast;
  1         2590  
  1         7  
37              
38             # include all canonical type names and some aliases
39             const our %RADIUS_PACKET_TYPES => (
40             %RFC_TYPES,
41             # and aliases
42             'COA' => COA_REQUEST,
43             'DM' => DISCONNECT_REQUEST,
44             'POD' => DISCONNECT_REQUEST,
45             'ACCT' => ACCOUNTING_REQUEST,
46             'AUTH' => ACCESS_REQUEST,
47             );
48              
49             const my %accepting_types => (
50             &ACCESS_REQUEST => {
51             &ACCESS_ACCEPT => 1,
52             &ACCESS_REJECT => 0,
53             &ACCESS_CHALLENGE => undef, # this requires explicit handling
54             },
55             &ACCOUNTING_REQUEST => {
56             &ACCOUNTING_RESPONSE => 1,
57             },
58             &ACCOUNTING_STATUS => {
59             &ACCOUNTING_RESPONSE => 1,
60             },
61             &DISCONNECT_REQUEST => {
62             &DISCONNECT_ACCEPT => 1,
63             &DISCONNECT_REJECT => 0,
64             },
65             &COA_REQUEST => {
66             &COA_ACCEPT => 1,
67             &COA_REJECT => 0,
68             },
69             );
70              
71             sub accepting_packet_type {
72 0     0 1   my ($req_type, $response_type) = @_;
73             $req_type = $RADIUS_PACKET_TYPES{$req_type}
74 0 0         if exists $RADIUS_PACKET_TYPES{$req_type};
75 0 0         return undef unless exists $accepting_types{$req_type};
76 0           my $atr = $accepting_types{$req_type};
77             $response_type = $RADIUS_PACKET_TYPES{$response_type}
78 0 0         if exists $RADIUS_PACKET_TYPES{$response_type};
79 0 0         return undef unless exists $atr->{$response_type};
80 0           return $atr->{$response_type};
81             }
82              
83             1;
84              
85             __END__