:pserver:anonymous@intra.tektonica.com:/opt/cvs - gsmperl - Fri Dec 21 07:37 CET...
[gsmperl.git] / GSM / SMS / NBS / Frame.pm
1 package GSM::SMS::NBS::Frame;
2
3 $VERSION = '0.1';
4
5 sub new {
6     my $proto = shift;
7     my $class = ref($proto) || $proto;
8
9         my $self = {};
10         bless($self, $class);
11         return $self;
12 }
13
14
15 sub destination_port {
16         my ($self, $dest)=@_;
17
18         $self->{destination} = $dest;
19 }
20
21
22 sub source_port {
23         my ($self, $source)=@_;
24
25         $self->{source} = $source;
26 }
27
28 sub datagram_reference_number {
29         my ($self, $drn)=@_;
30
31         $self->{drn} = $drn;
32 }
33
34
35 sub fragment_maximum {
36         my ($self, $fmax)=@_;
37
38         $self->{fmax} = $fmax;
39 }
40
41 sub fragment_sequence_number {
42         my ($self, $fsn) = @_;
43
44         $self->{fsn} = $fsn;
45 }
46
47
48 sub asString {
49         my ($self) = @_;
50
51         my $len;
52         my $out='';
53         my @NBS_HEADER;
54
55         $NBS_HEADER[0]  = 11;           # header length, without this byte
56         $NBS_HEADER[1]  = 5;            # Port address information element, 16bit
57         $NBS_HEADER[2]  = 4;            #       Length of the info element
58         $NBS_HEADER[3]  = ($self->{destination} & 0xff00) >> 8;         # high byte destination
59         $NBS_HEADER[4]  = $self->{destination} & 0xff;                          # low byte destination
60         $NBS_HEADER[5]  = ($self->{source} & 0xff00) >> 8;                      # high byte source
61         $NBS_HEADER[6]  = $self->{source} & 0xff;                                       # low byte source
62         $NBS_HEADER[7]  = 0;            # Fragmentation information element
63         $NBS_HEADER[8]  = 3;            # Length of Info el
64         $NBS_HEADER[9]  = $self->{drn};         # fragment id
65         $NBS_HEADER[10] = $self->{fmax};        # max amount of frags
66         $NBS_HEADER[11] = $self->{fsn};         # sequence number fragment
67
68         $len=12;
69         if ($self->{fmax} == 1) {
70                 $len=7;
71                 $NBS_HEADER[0] = 6;
72         }
73
74         for (my $j=0; $j<$len; $j++) {
75                 $i=$NBS_HEADER[$j];
76                 $out.=sprintf("%02x", $i);      
77         }
78
79         return $out;
80 }
81
82 1;
83
84 =head1 NAME
85
86 GSM::SMS::NBS::Frame - Encapsulates frames for NBS messages.
87
88 =head1 DESCRIPTION
89
90 Create a frame for a NBS message.
91
92 =head1 AUTHOR
93
94 Johan Van den Brande <johan@vandenbrande.com>