Merge "[RICPLT-209] - automation refactory setup"
[ric-plt/e2mgr.git] / E2Manager / models / e2_setup_response_message.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16
17 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20 package models
21 import (
22         "encoding/xml"
23 )
24
25
26 type TimeToWait = int
27
28 var TimeToWaitEnum = struct{
29         V60s TimeToWait
30         V20s TimeToWait
31         V10s TimeToWait
32         V5s TimeToWait
33         V2s TimeToWait
34         V1s TimeToWait
35 }{60, 20, 10, 5, 2, 1}
36
37 var timeToWaitMap = map[TimeToWait]interface{}{
38         TimeToWaitEnum.V60s  : struct {
39                 XMLName xml.Name `xml:"TimeToWait"`
40                 Text string `xml:",chardata"`
41                 V60s string `xml:"v60s"`
42         }{},
43         TimeToWaitEnum.V20s  : struct {
44                 XMLName xml.Name `xml:"TimeToWait"`
45                 Text string `xml:",chardata"`
46                 V20s string `xml:"v20s"`
47         }{},
48         TimeToWaitEnum.V10s  : struct {
49                 XMLName xml.Name `xml:"TimeToWait"`
50                 Text string `xml:",chardata"`
51                 V10s string `xml:"v10s"`
52         }{},
53         TimeToWaitEnum.V5s   : struct {
54                 XMLName xml.Name `xml:"TimeToWait"`
55                 Text string `xml:",chardata"`
56                 V5s string `xml:"v5s"`
57         }{},
58         TimeToWaitEnum.V2s   : struct {
59                 XMLName xml.Name `xml:"TimeToWait"`
60                 Text string `xml:",chardata"`
61                 V2s string `xml:"v2s"`
62         }{},
63         TimeToWaitEnum.V1s   : struct {
64                 XMLName xml.Name `xml:"TimeToWait"`
65                 Text string `xml:",chardata"`
66                 V1s string `xml:"v1s"`
67         }{},
68 }
69
70 func NewE2SetupSuccessResponseMessage(plmnId string, ricId string, request *E2SetupRequestMessage) E2SetupResponseMessage{
71         outcome := SuccessfulOutcome{}
72         outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs = make([]E2setupResponseIEs, 2)
73         outcome.ProcedureCode = "1"
74         outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].ID = "4"
75         outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].Value = GlobalRICID{GlobalRICID: struct {
76                 Text         string `xml:",chardata"`
77                 PLMNIdentity string `xml:"pLMN-Identity"`
78                 RicID        string `xml:"ric-ID"`
79         }{PLMNIdentity:plmnId, RicID:ricId}}
80         outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].ID = "9"
81         outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].Value = RANfunctionsIDList{RANfunctionsIDList: struct {
82                 Text                      string `xml:",chardata"`
83                 ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"`
84         }{ProtocolIESingleContainer:extractRanFunctionsIDList(request)}}
85         return E2SetupResponseMessage{E2APPDU:E2APPDU{Outcome:outcome}}
86 }
87
88 func NewE2SetupFailureResponseMessage(timeToWait TimeToWait) E2SetupResponseMessage{
89         outcome := UnsuccessfulOutcome{}
90         outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs = make([]E2setupFailureIEs, 2)
91         outcome.ProcedureCode = "1"
92         outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[0].ID = "1"
93         outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[0].Value.Value = Cause{}
94         outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[1].ID = "31"
95         outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[1].Value.Value = timeToWaitMap[timeToWait]
96         return E2SetupResponseMessage{E2APPDU:E2APPDU{Outcome:outcome}}
97 }
98
99 type E2SetupResponseMessage struct {
100         XMLName xml.Name `xml:"E2SetupSuccessResponseMessage"`
101         Text    string   `xml:",chardata"`
102         E2APPDU E2APPDU
103 }
104
105 type E2APPDU struct {
106         XMLName xml.Name `xml:"E2AP-PDU"`
107         Text    string `xml:",chardata"`
108         Outcome interface{}
109 }
110
111 type SuccessfulOutcome struct {
112         XMLName xml.Name        `xml:"successfulOutcome"`
113         Text          string `xml:",chardata"`
114         ProcedureCode string `xml:"procedureCode"`
115         Criticality   struct {
116                 Text   string `xml:",chardata"`
117                 Reject string `xml:"reject"`
118         } `xml:"criticality"`
119         Value struct {
120                 Text            string `xml:",chardata"`
121                 E2setupResponse struct {
122                         Text        string `xml:",chardata"`
123                         ProtocolIEs struct {
124                                 Text               string `xml:",chardata"`
125                                 E2setupResponseIEs []E2setupResponseIEs`xml:"E2setupResponseIEs"`
126                         } `xml:"protocolIEs"`
127                 } `xml:"E2setupResponse"`
128         } `xml:"value"`
129 }
130
131 type E2setupResponseIEs struct {
132         Text        string `xml:",chardata"`
133         ID          string `xml:"id"`
134         Criticality struct {
135                 Text   string `xml:",chardata"`
136                 Reject string `xml:"reject"`
137         } `xml:"criticality"`
138         Value interface{}`xml:"value"`
139 }
140
141 type GlobalRICID struct {
142         Text        string `xml:",chardata"`
143         GlobalRICID struct {
144                 Text         string `xml:",chardata"`
145                 PLMNIdentity string `xml:"pLMN-Identity"`
146                 RicID        string `xml:"ric-ID"`
147         } `xml:"GlobalRIC-ID"`
148 }
149
150 type RANfunctionsIDList struct {
151         Text        string `xml:",chardata"`
152         RANfunctionsIDList struct {
153                 Text                      string `xml:",chardata"`
154                 ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"`
155         } `xml:"RANfunctionsID-List"`
156 }
157
158 type ProtocolIESingleContainer struct {
159         Text        string `xml:",chardata"`
160         ID          string `xml:"id"`
161         Criticality struct {
162                 Text   string `xml:",chardata"`
163                 Ignore string `xml:"ignore"`
164         } `xml:"criticality"`
165         Value struct {
166                 Text              string `xml:",chardata"`
167                 RANfunctionIDItem struct {
168                         Text                string `xml:",chardata"`
169                         RanFunctionID       string `xml:"ranFunctionID"`
170                         RanFunctionRevision string `xml:"ranFunctionRevision"`
171                 } `xml:"RANfunctionID-Item"`
172         } `xml:"value"`
173 }
174
175
176 type UnsuccessfulOutcome struct {
177         XMLName xml.Name        `xml:"unsuccessfulOutcome"`
178         Text          string `xml:",chardata"`
179         ProcedureCode string `xml:"procedureCode"`
180         Criticality   struct {
181                 Text   string `xml:",chardata"`
182                 Reject string `xml:"reject"`
183         } `xml:"criticality"`
184         Value struct {
185                 Text            string `xml:",chardata"`
186                 E2setupFailure struct {
187                         Text        string `xml:",chardata"`
188                         ProtocolIEs struct {
189                                 Text               string `xml:",chardata"`
190                                 E2setupFailureIEs []E2setupFailureIEs`xml:"E2setupFailureIEs"`
191                         } `xml:"protocolIEs"`
192                 } `xml:"E2setupFailure"`
193         } `xml:"value"`
194 }
195
196 type E2setupFailureIEs struct {
197         Text        string `xml:",chardata"`
198         ID          string `xml:"id"`
199         Criticality struct {
200                 Text   string `xml:",chardata"`
201                 Ignore string `xml:"ignore"`
202         } `xml:"criticality"`
203         Value struct {
204                 Text  string `xml:",chardata"`
205                 Value interface{}
206         } `xml:"value"`
207 }
208
209 type Cause struct {
210         XMLName xml.Name        `xml:"Cause"`
211         Text      string `xml:",chardata"`
212         Transport struct {
213                 Text                         string `xml:",chardata"`
214                 TransportResourceUnavailable string `xml:"transport-resource-unavailable"`
215         } `xml:"transport"`
216 }
217
218 func extractRanFunctionsIDList(request *E2SetupRequestMessage) []ProtocolIESingleContainer{
219         list := &request.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList
220         ids := make([]ProtocolIESingleContainer,len(list.ProtocolIESingleContainer))
221         for i := 0; i< len(ids); i++{
222                 ids[i] = convertToRANfunctionID(list, i)
223         }
224         return ids
225 }
226
227 func convertToRANfunctionID(list *RANfunctionsList, i int) ProtocolIESingleContainer{
228         id := ProtocolIESingleContainer{}
229         id.ID = "6"
230         id.Value.RANfunctionIDItem.RanFunctionID = list.ProtocolIESingleContainer[i].Value.RANfunctionItem.RanFunctionID
231         id.Value.RANfunctionIDItem.RanFunctionRevision = list.ProtocolIESingleContainer[i].Value.RANfunctionItem.RanFunctionRevision
232         return id
233 }