RIC-193 - Setup from RAN fixes: Marshal XML Response, trim whitespaces, convert ricId...
[ric-plt/e2mgr.git] / E2Manager / models / e2_setup_success_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 type E2SetupSuccessResponseMessage struct {
26         XMLName xml.Name `xml:"E2SetupSuccessResponseMessage"`
27         Text    string   `xml:",chardata"`
28         E2APPDU E2APPDU  `xml:"E2AP-PDU"`
29 }
30
31 type E2APPDU struct {
32         XMLName xml.Name `xml:"E2AP-PDU"`
33         Text              string `xml:",chardata"`
34         SuccessfulOutcome struct {
35                 Text          string `xml:",chardata"`
36                 ProcedureCode string `xml:"procedureCode"`
37                 Criticality   struct {
38                         Text   string `xml:",chardata"`
39                         Reject string `xml:"reject"`
40                 } `xml:"criticality"`
41                 Value struct {
42                         Text            string `xml:",chardata"`
43                         E2setupResponse struct {
44                                 Text        string `xml:",chardata"`
45                                 ProtocolIEs struct {
46                                         Text               string `xml:",chardata"`
47                                         E2setupResponseIEs []E2setupResponseIEs`xml:"E2setupResponseIEs"`
48                                 } `xml:"protocolIEs"`
49                         } `xml:"E2setupResponse"`
50                 } `xml:"value"`
51         } `xml:"successfulOutcome"`
52 }
53
54 type E2setupResponseIEs struct {
55         Text        string `xml:",chardata"`
56         ID          string `xml:"id"`
57         Criticality struct {
58                 Text   string `xml:",chardata"`
59                 Reject string `xml:"reject"`
60         } `xml:"criticality"`
61         Value interface{}`xml:"value"`
62 }
63
64 type GlobalRICID struct {
65         Text        string `xml:",chardata"`
66         GlobalRICID struct {
67                 Text         string `xml:",chardata"`
68                 PLMNIdentity string `xml:"pLMN-Identity"`
69                 RicID        string `xml:"ric-ID"`
70         } `xml:"GlobalRIC-ID"`
71 }
72
73 type RANfunctionsIDList struct {
74         Text        string `xml:",chardata"`
75         RANfunctionsIDList struct {
76                 Text                      string `xml:",chardata"`
77                 ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"`
78         } `xml:"RANfunctionsID-List"`
79 }
80
81 type ProtocolIESingleContainer struct {
82         Text        string `xml:",chardata"`
83         ID          string `xml:"id"`
84         Criticality struct {
85                 Text   string `xml:",chardata"`
86                 Ignore string `xml:"ignore"`
87         } `xml:"criticality"`
88         Value struct {
89                 Text              string `xml:",chardata"`
90                 RANfunctionIDItem struct {
91                         Text                string `xml:",chardata"`
92                         RanFunctionID       string `xml:"ranFunctionID"`
93                         RanFunctionRevision string `xml:"ranFunctionRevision"`
94                 } `xml:"RANfunctionID-Item"`
95         } `xml:"value"`
96 }
97
98 func NewE2SetupSuccessResponseMessage(plmnId string, ricId string, request *E2SetupRequestMessage) E2SetupSuccessResponseMessage{
99         msg := E2SetupSuccessResponseMessage{}
100         msg.E2APPDU.SuccessfulOutcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs = make([]E2setupResponseIEs, 2)
101         msg.E2APPDU.SuccessfulOutcome.ProcedureCode = "1"
102         msg.E2APPDU.SuccessfulOutcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].ID = "4"
103         msg.E2APPDU.SuccessfulOutcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].Value = GlobalRICID{GlobalRICID: struct {
104                 Text         string `xml:",chardata"`
105                 PLMNIdentity string `xml:"pLMN-Identity"`
106                 RicID        string `xml:"ric-ID"`
107         }{PLMNIdentity:plmnId, RicID:ricId}}
108         msg.E2APPDU.SuccessfulOutcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].ID = "9"
109         msg.E2APPDU.SuccessfulOutcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].Value = RANfunctionsIDList{RANfunctionsIDList: struct {
110                 Text                      string `xml:",chardata"`
111                 ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"`
112         }{ProtocolIESingleContainer:extractRanFunctionsIDList(request)}}
113         return msg
114 }
115
116 func extractRanFunctionsIDList(request *E2SetupRequestMessage) []ProtocolIESingleContainer{
117         list := &request.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList
118         ids := make([]ProtocolIESingleContainer,len(list.ProtocolIESingleContainer))
119         for i := 0; i< len(ids); i++{
120                 ids[i] = convertToRANfunctionID(list, i)
121         }
122         return ids
123 }
124
125 func convertToRANfunctionID(list *RANfunctionsList, i int) ProtocolIESingleContainer{
126         id := ProtocolIESingleContainer{}
127         id.ID = "6"
128         id.Value.RANfunctionIDItem.RanFunctionID = list.ProtocolIESingleContainer[i].Value.RANfunctionItem.RanFunctionID
129         id.Value.RANfunctionIDItem.RanFunctionRevision = list.ProtocolIESingleContainer[i].Value.RANfunctionItem.RanFunctionRevision
130         return id
131 }