File Coverage

blib/lib/BACnet/PDUTypes/Reject.pm
Criterion Covered Total %
statement 39 43 90.7
branch 2 4 50.0
condition n/a
subroutine 10 10 100.0
pod 0 5 0.0
total 51 62 82.2


line stmt bran cond sub pod time code
1             #!/usr/bin/perl
2              
3             package BACnet::PDUTypes::Reject;
4              
5 27     27   208 use warnings;
  27         61  
  27         1534  
6 27     27   175 use strict;
  27         50  
  27         625  
7              
8 27     27   109 use bytes;
  27         60  
  27         133  
9              
10 27     27   554 use BACnet::APDU;
  27         64  
  27         1129  
11              
12             require BACnet::PDUTypes::Utils;
13              
14 27     27   146 use parent 'BACnet::PDUTypes::PDU';
  27         67  
  27         201  
15              
16             sub construct {
17 2     2 0 249411 my ( $class, @rest ) = @_;
18              
19 2         10 my %args = (
20             invoke_id => undef,
21             service_choice => undef,
22             @rest,
23             );
24              
25             my $self = {
26             data => '',
27             invoke_id => $args{invoke_id},
28             service_choice => $args{service_choice},
29 2         10 };
30              
31             $self->{data} .=
32 2         21 pack( 'C', ( $BACnet::APDU::apdu_types->{'Reject'} << 4 ) );
33              
34 2         7 $self->{data} .= pack( 'C', $args{invoke_id} );
35              
36             $self->{data} .= pack( 'C',
37 2         10 $BACnet::PDUTypes::Utils::reject_reason->{ $self->{service_choice} } );
38              
39 2         9 return bless $self, $class;
40              
41             #flags are 0000
42              
43             }
44              
45             sub parse {
46              
47 2     2 0 5 my ( $class, $data_in ) = @_;
48              
49 2         7 my $self = bless { data => $data_in, }, $class;
50              
51 2 50       10 if ( length($data_in) < 3 ) {
52 0         0 $self->{error} = "Reject: too short";
53 0         0 return $self;
54             }
55              
56 2         4 my $offset = 0;
57 2         4 $offset += 1;
58              
59 2         12 $self->{invoke_id} = unpack( 'C', substr( $data_in, $offset, 1 ) );
60 2         4 $offset += 1;
61              
62             my $service_choice = $BACnet::PDUTypes::Utils::reject_reason_rev->{
63 2         13 unpack( 'C', substr( $data_in, $offset, 1 ) ) };
64              
65 2 50       7 if ( !defined $service_choice ) {
66 0         0 $self->{error} = "Reject: unknown service choice";
67 0         0 return $self;
68             }
69              
70 2         6 $self->{service_choice} = $service_choice;
71              
72 2         7 return $self;
73             }
74              
75             sub service_choice {
76 4     4 0 3548 my ($self) = @_;
77              
78 4         16 return $self->{service_choice};
79             }
80              
81             sub invoke_id {
82 4     4 0 11 my ($self) = @_;
83              
84 4         13 return $self->{invoke_id};
85             }
86              
87             sub flags {
88 4     4 0 11 my ($self) = @_;
89              
90 4         12 return 0;
91             }
92              
93             1;