2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
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
10 http://www.apache.org/licenses/LICENSE-2.0
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 ==================================================================================
24 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/packer"
27 //-----------------------------------------------------------------------------
29 //-----------------------------------------------------------------------------
30 type E2APMsgPackerIf interface {
31 Pack(*packer.PackedData) (error, *packer.PackedData)
32 UnPack(msg *packer.PackedData) error
36 //-----------------------------------------------------------------------------
38 //-----------------------------------------------------------------------------
39 type E2APMsgPackerSubscriptionRequestIf interface {
41 Set(*E2APSubscriptionRequest) error
42 Get() (error, *E2APSubscriptionRequest)
45 //-----------------------------------------------------------------------------
47 //-----------------------------------------------------------------------------
48 type E2APMsgPackerSubscriptionResponseIf interface {
50 Set(*E2APSubscriptionResponse) error
51 Get() (error, *E2APSubscriptionResponse)
54 //-----------------------------------------------------------------------------
56 //-----------------------------------------------------------------------------
57 type E2APMsgPackerSubscriptionFailureIf interface {
59 Set(*E2APSubscriptionFailure) error
60 Get() (error, *E2APSubscriptionFailure)
63 //-----------------------------------------------------------------------------
65 //-----------------------------------------------------------------------------
66 type E2APMsgPackerSubscriptionDeleteRequestIf interface {
68 Set(*E2APSubscriptionDeleteRequest) error
69 Get() (error, *E2APSubscriptionDeleteRequest)
72 //-----------------------------------------------------------------------------
74 //-----------------------------------------------------------------------------
75 type E2APMsgPackerSubscriptionDeleteResponseIf interface {
77 Set(*E2APSubscriptionDeleteResponse) error
78 Get() (error, *E2APSubscriptionDeleteResponse)
81 //-----------------------------------------------------------------------------
83 //-----------------------------------------------------------------------------
84 type E2APMsgPackerSubscriptionDeleteFailureIf interface {
86 Set(*E2APSubscriptionDeleteFailure) error
87 Get() (error, *E2APSubscriptionDeleteFailure)
90 //-----------------------------------------------------------------------------
92 //-----------------------------------------------------------------------------
93 type E2APPackerIf interface {
94 NewPackerSubscriptionRequest() E2APMsgPackerSubscriptionRequestIf
95 NewPackerSubscriptionResponse() E2APMsgPackerSubscriptionResponseIf
96 NewPackerSubscriptionFailure() E2APMsgPackerSubscriptionFailureIf
97 NewPackerSubscriptionDeleteRequest() E2APMsgPackerSubscriptionDeleteRequestIf
98 NewPackerSubscriptionDeleteResponse() E2APMsgPackerSubscriptionDeleteResponseIf
99 NewPackerSubscriptionDeleteFailure() E2APMsgPackerSubscriptionDeleteFailureIf
100 MessageInfo(msg *packer.PackedData) *packer.MessageInfo
103 //-----------------------------------------------------------------------------
105 //-----------------------------------------------------------------------------
106 type E2APAutoPacker struct {
110 func NewE2APAutoPacker(packer E2APPackerIf) *E2APAutoPacker {
111 return &E2APAutoPacker{packer: packer}
114 // TODO improve openasn handling to reuse PDU etc...
115 // Now practically decodes two times each E2/X2 message, as first round solves message type
116 func (autopacker *E2APAutoPacker) UnPack(msg *packer.PackedData) (error, interface{}) {
118 msgInfo := autopacker.packer.MessageInfo(msg)
120 switch msgInfo.MsgType {
121 case E2AP_InitiatingMessage:
122 switch msgInfo.MsgId {
123 case E2AP_RICSubscriptionRequest:
124 unpa := autopacker.packer.NewPackerSubscriptionRequest()
125 err = unpa.UnPack(msg)
129 case E2AP_RICSubscriptionDeleteRequest:
130 unpa := autopacker.packer.NewPackerSubscriptionDeleteRequest()
131 err = unpa.UnPack(msg)
136 err = fmt.Errorf("MsgType: E2AP_InitiatingMessage => MsgId:%d unknown", msgInfo.MsgId)
138 case E2AP_SuccessfulOutcome:
139 switch msgInfo.MsgId {
140 case E2AP_RICSubscriptionResponse:
141 unpa := autopacker.packer.NewPackerSubscriptionResponse()
142 err = unpa.UnPack(msg)
146 case E2AP_RICSubscriptionDeleteResponse:
147 unpa := autopacker.packer.NewPackerSubscriptionDeleteResponse()
148 err = unpa.UnPack(msg)
153 err = fmt.Errorf("MsgType: E2AP_SuccessfulOutcome => MsgId:%d unknown", msgInfo.MsgId)
155 case E2AP_UnsuccessfulOutcome:
156 switch msgInfo.MsgId {
157 case E2AP_RICSubscriptionFailure:
158 unpa := autopacker.packer.NewPackerSubscriptionFailure()
159 err = unpa.UnPack(msg)
163 case E2AP_RICSubscriptionDeleteFailure:
164 unpa := autopacker.packer.NewPackerSubscriptionDeleteFailure()
165 err = unpa.UnPack(msg)
170 err = fmt.Errorf("MsgType: E2AP_UnsuccessfulOutcome => MsgId:%d unknown", msgInfo.MsgId)
173 err = fmt.Errorf("MsgType: %d and MsgId:%d unknown", msgInfo.MsgType, msgInfo.MsgId)
176 err = fmt.Errorf("MsgInfo not received")
181 func (autopacker *E2APAutoPacker) Pack(data interface{}, trg *packer.PackedData) (error, *packer.PackedData) {
183 switch themsg := data.(type) {
184 case *E2APSubscriptionRequest:
185 pa := autopacker.packer.NewPackerSubscriptionRequest()
190 case *E2APSubscriptionResponse:
191 pa := autopacker.packer.NewPackerSubscriptionResponse()
196 case *E2APSubscriptionFailure:
197 pa := autopacker.packer.NewPackerSubscriptionFailure()
202 case *E2APSubscriptionDeleteRequest:
203 pa := autopacker.packer.NewPackerSubscriptionDeleteRequest()
208 case *E2APSubscriptionDeleteResponse:
209 pa := autopacker.packer.NewPackerSubscriptionDeleteResponse()
214 case *E2APSubscriptionDeleteFailure:
215 pa := autopacker.packer.NewPackerSubscriptionDeleteFailure()
221 err = fmt.Errorf("unknown message")