RICPLT-2801, RICPLT-2802
[ric-plt/submgr.git] / pkg / control / e2ap.go
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
5
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17 ==================================================================================
18 */
19
20 package control
21
22 /*
23 #include <wrapper.h>
24
25 #cgo LDFLAGS: -le2ap_wrapper -le2ap
26 */
27 import "C"
28
29 import (
30         "fmt"
31         "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
32         "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap_wrapper"
33         "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/packer"
34         "unsafe"
35 )
36
37 var packerif e2ap.E2APPackerIf = e2ap_wrapper.NewAsn1E2Packer()
38
39 type E2ap struct {
40 }
41
42 /* RICsubscriptionRequest */
43
44 // Used by e2t test stub
45 func (c *E2ap) GetSubscriptionRequestSequenceNumber(payload []byte) (subId uint16, err error) {
46         cptr := unsafe.Pointer(&payload[0])
47         cret := C.e2ap_get_ric_subscription_request_sequence_number(cptr, C.size_t(len(payload)))
48         if cret < 0 {
49                 return 0, fmt.Errorf("e2ap wrapper is unable to get Subscirption Request Sequence Number due to wrong or invalid payload. Erroxappde: %v", cret)
50         }
51         subId = uint16(cret)
52         return
53 }
54
55 // Used by submgr, xapp test stub
56 func (c *E2ap) SetSubscriptionRequestSequenceNumber(payload []byte, newSubscriptionid uint16) (err error) {
57         cptr := unsafe.Pointer(&payload[0])
58         size := C.e2ap_set_ric_subscription_request_sequence_number(cptr, C.size_t(len(payload)), C.long(newSubscriptionid))
59         if size < 0 {
60                 return fmt.Errorf("e2ap wrapper is unable to set Subscription Request Sequence Number due to wrong or invalid payload. Erroxappde: %v", size)
61         }
62         return
63 }
64
65 // Used by submgr, xapp test stub
66 func (c *E2ap) GetSubscriptionResponseSequenceNumber(payload []byte) (subId uint16, err error) {
67         cptr := unsafe.Pointer(&payload[0])
68         cret := C.e2ap_get_ric_subscription_response_sequence_number(cptr, C.size_t(len(payload)))
69         if cret < 0 {
70                 return 0, fmt.Errorf("e2ap wrapper is unable to get Subscirption Response Sequence Number due to wrong or invalid payload. Erroxappde: %v", cret)
71         }
72         subId = uint16(cret)
73         return
74 }
75
76 // Used by e2t test stub
77 func (c *E2ap) SetSubscriptionResponseSequenceNumber(payload []byte, newSubscriptionid uint16) (err error) {
78         cptr := unsafe.Pointer(&payload[0])
79         size := C.e2ap_set_ric_subscription_response_sequence_number(cptr, C.size_t(len(payload)), C.long(newSubscriptionid))
80         if size < 0 {
81                 return fmt.Errorf("e2ap wrapper is unable to set Subscription Response Sequence Number due to wrong or invalid payload. Erroxappde: %v", size)
82         }
83         return
84 }
85
86 /* RICsubscriptionDeleteRequest */
87
88 // Used by submgr, e2t test stub
89 func (c *E2ap) GetSubscriptionDeleteRequestSequenceNumber(payload []byte) (subId uint16, err error) {
90         cptr := unsafe.Pointer(&payload[0])
91         cret := C.e2ap_get_ric_subscription_delete_request_sequence_number(cptr, C.size_t(len(payload)))
92         if cret < 0 {
93                 return 0, fmt.Errorf("e2ap wrapper is unable to get Subscirption Delete Request Sequence Number due to wrong or invalid payload. Erroxappde: %v", cret)
94         }
95         subId = uint16(cret)
96         return
97 }
98
99 // Used by xapp test stub
100 func (c *E2ap) SetSubscriptionDeleteRequestSequenceNumber(payload []byte, newSubscriptionid uint16) (err error) {
101         cptr := unsafe.Pointer(&payload[0])
102         size := C.e2ap_set_ric_subscription_delete_request_sequence_number(cptr, C.size_t(len(payload)), C.long(newSubscriptionid))
103         if size < 0 {
104                 return fmt.Errorf("e2ap wrapper is unable to set Subscription Delete Request Sequence Number due to wrong or invalid payload. Erroxappde: %v", size)
105         }
106         return
107 }
108
109 /* RICsubscriptionDeleteResponse */
110
111 // Used by submgr, e2t test stub
112 func (c *E2ap) GetSubscriptionDeleteResponseSequenceNumber(payload []byte) (subId uint16, err error) {
113         cptr := unsafe.Pointer(&payload[0])
114         cret := C.e2ap_get_ric_subscription_delete_response_sequence_number(cptr, C.size_t(len(payload)))
115         if cret < 0 {
116                 return 0, fmt.Errorf("e2ap wrapper is unable to get Subscirption Delete Response Sequence Number due to wrong or invalid payload. Erroxappde: %v", cret)
117         }
118         subId = uint16(cret)
119         return
120 }
121
122 // Used by e2t test stub
123 func (c *E2ap) SetSubscriptionDeleteResponseSequenceNumber(payload []byte, newSubscriptionid uint16) (err error) {
124         cptr := unsafe.Pointer(&payload[0])
125         size := C.e2ap_set_ric_subscription_delete_response_sequence_number(cptr, C.size_t(len(payload)), C.long(newSubscriptionid))
126         if size < 0 {
127                 return fmt.Errorf("e2ap wrapper is unable to set Subscription Delete Response Sequence Number due to wrong or invalid payload. Erroxappde: %v", size)
128         }
129         return
130 }
131
132 /* RICsubscriptionRequestFailure */
133
134 // Used by submgr
135 func (c *E2ap) GetSubscriptionFailureSequenceNumber(payload []byte) (subId uint16, err error) {
136         cptr := unsafe.Pointer(&payload[0])
137         cret := C.e2ap_get_ric_subscription_failure_sequence_number(cptr, C.size_t(len(payload)))
138         if cret < 0 {
139                 return 0, fmt.Errorf("e2ap wrapper is unable to get Subscirption Failure Sequence Number due to wrong or invalid payload. Erroxappde: %v", cret)
140         }
141         subId = uint16(cret)
142         return
143 }
144
145 // Used by e2t test stub
146 func (c *E2ap) SetSubscriptionFailureSequenceNumber(payload []byte, newSubscriptionid uint16) (err error) {
147         cptr := unsafe.Pointer(&payload[0])
148         size := C.e2ap_set_ric_subscription_failure_sequence_number(cptr, C.size_t(len(payload)), C.long(newSubscriptionid))
149         if size < 0 {
150                 return fmt.Errorf("e2ap wrapper is unable to set Subscription Failure Sequence Number due to wrong or invalid payload. Erroxappde: %v", size)
151         }
152         return
153 }
154
155 /* RICsubscriptionDeleteFailure */
156
157 // Used by submgr
158 func (c *E2ap) GetSubscriptionDeleteFailureSequenceNumber(payload []byte) (subId uint16, err error) {
159         cptr := unsafe.Pointer(&payload[0])
160         cret := C.e2ap_get_ric_subscription_delete_failure_sequence_number(cptr, C.size_t(len(payload)))
161         if cret < 0 {
162                 return 0, fmt.Errorf("e2ap wrapper is unable to get Subscirption Delete Failure Sequence Number due to wrong or invalid payload. Erroxappde: %v", cret)
163         }
164         subId = uint16(cret)
165         return
166 }
167
168 // Used by submgr
169 func (c *E2ap) SetSubscriptionDeleteFailureSequenceNumber(payload []byte, newSubscriptionid uint16) (err error) {
170         cptr := unsafe.Pointer(&payload[0])
171         size := C.e2ap_set_ric_subscription_delete_failure_sequence_number(cptr, C.size_t(len(payload)), C.long(newSubscriptionid))
172         if size < 0 {
173                 return fmt.Errorf("e2ap wrapper is unable to set Subscription Delete Failure Sequence Number due to wrong or invalid payload. Erroxappde: %v", size)
174         }
175         return
176 }
177
178 // Used by submgr
179 func (c *E2ap) PackSubscriptionDeleteResponse(payload []byte, newSubscriptionid uint16) (newPayload []byte, err error) {
180         e2SubDelReq := packerif.NewPackerSubscriptionDeleteRequest()
181         packedData := &packer.PackedData{}
182         packedData.Buf = payload
183         err = e2SubDelReq.UnPack(packedData)
184         if err != nil {
185                 return make([]byte, 0), fmt.Errorf("PackSubDelResp: UnPack() failed: %s", err.Error())
186         }
187         getErr, subDelReq := e2SubDelReq.Get()
188         if getErr != nil {
189                 return make([]byte, 0), fmt.Errorf("PackSubDelResp: Get() failed: %s", getErr.Error())
190         }
191
192         e2SubDelResp := packerif.NewPackerSubscriptionDeleteResponse()
193         subDelResp := e2ap.E2APSubscriptionDeleteResponse{}
194         subDelResp.RequestId.Id = subDelReq.RequestId.Id
195         subDelResp.RequestId.Seq = uint32(newSubscriptionid)
196         subDelResp.FunctionId = subDelReq.FunctionId
197         err = e2SubDelResp.Set(&subDelResp)
198         if err != nil {
199                 return make([]byte, 0), fmt.Errorf("PackSubDelResp: Set() failed: %s", err.Error())
200         }
201         err, packedData = e2SubDelResp.Pack(nil)
202         if err != nil {
203                 return make([]byte, 0), fmt.Errorf("PackSubDelResp: Pack() failed: %s", err.Error())
204         }
205         return packedData.Buf, nil
206 }
207
208 // Used by submgr
209 func (c *E2ap) PackSubscriptionDeleteRequest(payload []byte, newSubscriptionid uint16) (newPayload []byte, err error) {
210         e2SubReq := packerif.NewPackerSubscriptionRequest()
211         packedData := &packer.PackedData{}
212         packedData.Buf = payload
213         err = e2SubReq.UnPack(packedData)
214         if err != nil {
215                 return make([]byte, 0), fmt.Errorf("PackSubDelReq: UnPack() failed: %s", err.Error())
216         }
217         getErr, subReq := e2SubReq.Get()
218         if getErr != nil {
219                 return make([]byte, 0), fmt.Errorf("PackSubDelReq: Get() failed: %s", getErr.Error())
220         }
221
222         e2SubDel := packerif.NewPackerSubscriptionDeleteRequest()
223         subDelReq := e2ap.E2APSubscriptionDeleteRequest{}
224         subDelReq.RequestId.Id = subReq.RequestId.Id
225         subDelReq.RequestId.Seq = uint32(newSubscriptionid)
226         subDelReq.FunctionId = subReq.FunctionId
227         err = e2SubDel.Set(&subDelReq)
228         if err != nil {
229                 return make([]byte, 0), fmt.Errorf("PackSubDelReq: Set() failed: %s", err.Error())
230         }
231         err, packedData = e2SubDel.Pack(nil)
232         if err != nil {
233                 return make([]byte, 0), fmt.Errorf("PackSubDelReq: Pack() failed: %s", err.Error())
234         }
235         return packedData.Buf, nil
236 }