aboutsummaryrefslogtreecommitdiffstats
path: root/callagent/MGCPResponse.st
blob: 4ecbf240b700454f9b427e49f09151fe70d98c0b (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"
 (C) 2011 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/>.
"

Object subclass: MGCPResponse [
    | code transaction params sdp |

    <category: 'MGCP-Response'>
    <comment: 'I provide a nicer way to look at responses'>

    MGCPResponse class >> fromDict: aDict [
        <category: 'creation'>
        ^ self new
            initialize;
            responseCode: aDict first first;
            transaction: aDict first third;
            addParamsFromDict: aDict second;
            addSDPFromDict: aDict third;
            yourself
    ]

    initialize [
        <category: 'creation'>
        params := Dictionary new.
    ]

    responseCode: aCode [
        <category: 'creation'>
        code := aCode asInteger
    ]

    transaction: aTrans [
        <category: 'creation'>
        transaction := aTrans.
    ]

    addParamsFromDict: aList [
        <category: 'creation'>

        aList do: [:each |
            params at: each first first asString put: each first fourth].
    ]

    addSDPFromDict: aDict [
        | str |
        <category: 'creation'>

        aDict isNil ifTrue: [
            sdp := nil.
            ^ self
        ].

        str := WriteStream on: (String new).
        aDict second do: [:each |
            str
                nextPutAll: each first;
                cr; nl.
        ].

        sdp := str contents.
    ]

    transactionId [
        <category: 'accessing'>
        ^ transaction
    ]

    code [
        <category: 'accessing'>
        ^ code
    ]

    isSuccess [
        <category: 'accessing'>
        ^ code >= 200 and: [code < 300].
    ]

    sdp [
        <category: 'accessing'>
        ^ sdp
    ]

    parameterAt: aKey ifAbsent: aBlock [
        ^ params at: aKey ifAbsent: aBlock.
    ]

]