aboutsummaryrefslogtreecommitdiffstats
path: root/ipa/IPAConstantsGST.st
blob: b869005c296f0a200ee50c1d24451254e0ccfbfa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"
 (C) 2010-2013 by Holger Hans Peter Freyther
 All Rights Reserved

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU Affero General Public License as
 published by the Free Software Foundation, either version 3 of the
 License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Affero General Public License for more details.

 You should have received a copy of the GNU Affero General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
"

CCompound subclass: CPackedStruct [
    <shape: #word>
    <category: 'OsmoNetwork-Core-GST'>
    <comment: 'I am a packed struct with one byte alignment,
    Paolo created me, Holger copied me here.'>

    CPackedStruct class >> declaration: array [
        "Compile methods that implement the declaration in array."

        <category: 'subclass creation'>
        self
            declaration: array
            inject: self superclass sizeof
            into: [:oldOffset :alignment | oldOffset]
    ]

    CPackedStruct class >> compileSize: size align: alignment [
        <category: 'private'>
        ^ super compileSize: size align: 1.
    ]
]

CPackedStruct subclass: IPASCCPState [
    <category: 'OsmoNetwork-IPA'>
    <comment: 'This is an Osmocom NAT extension to hand out USSD
    to a different provider.'>

    <declaration: #(
        #(#src  (#array #byte 3))
        #(#dst  (#array #byte 3))
        #(#transId #byte)
        #(#invokeId #byte)
        #(#imsi (#array #char 17))) >

    srcAddr [
        <category: 'accessing'>
        ^ SCCPAddrReference fromCData: self src.
    ]

    dstAddr [
        <category: 'accessing'>
        ^ SCCPAddrReference fromCData: self dst.
    ]

    imsiString [
        "We will need to count how many chars of the array are used"
        <category: 'accessing'>

        0 to: 16 do: [:index | | c |
            c := self imsi at: index.
            c = (Character value: 0)
                ifTrue: [
                    ^ String fromCData: self imsi size: index.
                ].
        ].

        ^ String fromCData: self imsi.
    ]
]