+ } `xml:"ProtocolIE-SingleContainer"`
+}
+
+func (m *E2SetupRequestMessage) ExtractRanFunctionsList() []*entities.RanFunction {
+ // TODO: verify e2SetupRequestIEs structure with Adi
+ e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
+ if len(e2SetupRequestIes) < 2 {
+ return nil
+ }
+
+ ranFunctionsListContainer := e2SetupRequestIes[1].Value.RANfunctionsList.ProtocolIESingleContainer
+ funcs := make([]*entities.RanFunction, len(ranFunctionsListContainer))
+ for i := 0; i < len(funcs); i++ {
+ ranFunctionItem := ranFunctionsListContainer[i].Value.RANfunctionItem
+
+ funcs[i] = &entities.RanFunction{
+ RanFunctionId: &wrappers.UInt32Value{Value: ranFunctionItem.RanFunctionID},
+ RanFunctionDefinition: m.buildRanFunctionDefinitionProto(&ranFunctionItem.RanFunctionDefinition),
+ RanFunctionRevision: &wrappers.UInt32Value{Value: ranFunctionItem.RanFunctionRevision},
+ }
+ }
+ return funcs
+}
+
+func (m *E2SetupRequestMessage) buildRanFunctionDefinitionProto(def *RanFunctionDefinition) *entities.RanFunctionDefinition {
+ return &entities.RanFunctionDefinition{
+ E2SmGnbNrtRanFunctionDefinition: &entities.E2SmGnbNrtRanFunctionDefinition{
+ RanFunctionName: buildRanFunctionNameProto(def),
+ RicEventTriggerStyles: buildRicEventTriggerStylesProto(def),
+ RicReportStyles: buildRicReportStylesProto(def),
+ RicInsertStyles: buildRicInsertStylesProto(def),
+ RicControlStyles: buildRicControlStylesProto(def),
+ RicPolicyStyles: buildRicPolicyStylesProto(def),
+ },
+ }
+}
+
+func buildRanFunctionNameProto(def *RanFunctionDefinition) *entities.RanFunctionName {
+ defRanFunctionName := def.E2smGnbNrtRanFunctionDefinition.RanFunctionName
+ ranFunctionName := &entities.RanFunctionName{
+ RanFunctionShortName: &wrappers.StringValue{Value: defRanFunctionName.RanFunctionShortName},
+ RanFunctionE2SmOid: &wrappers.StringValue{Value: defRanFunctionName.RanFunctionE2smOid},
+ RanFunctionDescription: &wrappers.StringValue{Value: defRanFunctionName.RanFunctionDescription},
+ }
+
+ if defRanFunctionName.RanFunctionInstance != nil {
+ ranFunctionName.OptionalRanFunctionInstance = &entities.RanFunctionName_RanFunctionInstance{
+ RanFunctionInstance: *defRanFunctionName.RanFunctionInstance,
+ }
+ }
+
+ return ranFunctionName
+}
+
+func buildRicEventTriggerStylesProto(def *RanFunctionDefinition) []*entities.RicEventTriggerStyle {
+ defRicEventTriggerStyleList := def.E2smGnbNrtRanFunctionDefinition.RicEventTriggerStyleList.RicEventTriggerStyleList
+ ricEventTriggerStyles := make([]*entities.RicEventTriggerStyle, len(defRicEventTriggerStyleList))
+
+ for i, v := range defRicEventTriggerStyleList {
+ ricEventTriggerStyles[i] = &entities.RicEventTriggerStyle{
+ RicEventTriggerStyleType: &wrappers.UInt32Value{Value: v.RicEventTriggerStyleType},
+ RicEventTriggerStyleName: &wrappers.StringValue{Value: v.RicEventTriggerStyleName},
+ RicEventTriggerFormatType: &wrappers.UInt32Value{Value: v.RicEventTriggerFormatType},
+ }
+ }
+
+ return ricEventTriggerStyles
+}
+
+func buildRicReportStylesProto(def *RanFunctionDefinition) []*entities.RicReportStyle {
+ defRicReportStyleList := def.E2smGnbNrtRanFunctionDefinition.RicReportStyleList.RicReportStyleList
+ ricReportStyles := make([]*entities.RicReportStyle, len(defRicReportStyleList))
+
+ for i, v := range defRicReportStyleList {
+ ricReportStyles[i] = &entities.RicReportStyle{
+ RicReportStyleType: &wrappers.UInt32Value{Value: v.RicReportStyleType},
+ RicReportStyleName: &wrappers.StringValue{Value: v.RicReportStyleName},
+ RicReportActionFormatType: &wrappers.UInt32Value{Value: v.RicReportActionFormatType},
+ RicReportRanParameterDefs: buildRicReportRanParameterDefsProto(v),
+ RicIndicationHeaderFormatType: &wrappers.UInt32Value{Value: v.RicIndicationHeaderFormatType},
+ RicIndicationMessageFormatType: &wrappers.UInt32Value{Value: v.RicIndicationMessageFormatType},
+ }
+ }
+
+ return ricReportStyles
+}
+
+func buildRicReportRanParameterDefsProto(ricReportStyleList RicReportStyleList) []*entities.RanParameterDef {
+ ricReportRanParameterDefList := ricReportStyleList.RicReportRanParameterDefList.RanParameterDefItem
+ ranParameterDefs := make([]*entities.RanParameterDef, len(ricReportRanParameterDefList))
+
+ for i, v := range ricReportRanParameterDefList {
+ ranParameterDefs[i] = &entities.RanParameterDef{
+ RanParameterId: &wrappers.UInt32Value{Value: v.RanParameterID},
+ RanParameterName: &wrappers.StringValue{Value: v.RanParameterName},
+ RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType),
+ }
+ }
+
+ return ranParameterDefs
+}
+
+func getRanParameterTypeEnumValue(ranParameterType RanParameterType) entities.RanParameterType {
+ if ranParameterType.Boolean != nil {
+ return entities.RanParameterType_BOOLEAN
+ }
+
+ if ranParameterType.BitString != nil {
+ return entities.RanParameterType_BIT_STRING
+ }
+
+ if ranParameterType.Enumerated != nil {
+ return entities.RanParameterType_ENUMERATED
+ }
+
+ if ranParameterType.Integer != nil {
+ return entities.RanParameterType_INTEGER
+ }
+
+ if ranParameterType.OctetString != nil {
+ return entities.RanParameterType_OCTET_STRING
+ }
+
+ if ranParameterType.PrintableString != nil {
+ return entities.RanParameterType_PRINTABLE_STRING
+ }
+
+ return entities.RanParameterType_UNKNOWN_RAN_PARAMETER_TYPE
+}
+
+func buildRicInsertStylesProto(def *RanFunctionDefinition) []*entities.RicInsertStyle {
+ defRicInsertStyleList := def.E2smGnbNrtRanFunctionDefinition.RicInsertStyleList.RicInsertStyleList
+ ricInsertStyles := make([]*entities.RicInsertStyle, len(defRicInsertStyleList))
+
+ for i, v := range defRicInsertStyleList {
+ ricInsertStyles[i] = &entities.RicInsertStyle{
+ RicInsertStyleType: &wrappers.UInt32Value{Value: v.RicInsertStyleType},
+ RicInsertStyleName: &wrappers.StringValue{Value: v.RicInsertStyleName},
+ RicInsertActionFormatType: &wrappers.UInt32Value{Value: v.RicInsertActionFormatType},
+ RicInsertRanParameterDefs: buildRicInsertRanParameterDefsProto(v),
+ RicIndicationHeaderFormatType: &wrappers.UInt32Value{Value: v.RicIndicationHeaderFormatType},
+ RicIndicationMessageFormatType: &wrappers.UInt32Value{Value: v.RicIndicationMessageFormatType},
+ RicCallProcessIdFormatType: &wrappers.UInt32Value{Value: v.RicCallProcessIdFormatType},
+ }
+ }
+
+ return ricInsertStyles
+}
+
+func buildRicInsertRanParameterDefsProto(ricInsertStyleList RicInsertStyleList) []*entities.RanParameterDef {
+ ricInsertRanParameterDefList := ricInsertStyleList.RicInsertRanParameterDefList.RanParameterDefItem
+ ranParameterDefs := make([]*entities.RanParameterDef, len(ricInsertRanParameterDefList))
+
+ for i, v := range ricInsertRanParameterDefList {
+ ranParameterDefs[i] = &entities.RanParameterDef{
+ RanParameterId: &wrappers.UInt32Value{Value: v.RanParameterID},
+ RanParameterName: &wrappers.StringValue{Value: v.RanParameterName},
+ RanParameterType: getRanParameterTypeEnumValue(v.RanParameterType),
+ }
+ }
+
+ return ranParameterDefs
+}
+
+func buildRicControlStylesProto(def *RanFunctionDefinition) []*entities.RicControlStyle {
+ defRicControlStyleList := def.E2smGnbNrtRanFunctionDefinition.RicControlStyleList.RicControlStyleList
+ ricControlStyles := make([]*entities.RicControlStyle, len(defRicControlStyleList))
+
+ for i, v := range defRicControlStyleList {
+ ricControlStyles[i] = &entities.RicControlStyle{
+ RicControlStyleType: &wrappers.UInt32Value{Value: v.RicControlStyleType},
+ RicControlStyleName: &wrappers.StringValue{Value: v.RicControlStyleName},
+ RicControlHeaderFormatType: &wrappers.UInt32Value{Value: v.RicControlHeaderFormatType},
+ RicControlMessageFormatType: &wrappers.UInt32Value{Value: v.RicControlMessageFormatType},
+ RicCallProcessIdFormatType: &wrappers.UInt32Value{Value: v.RicCallProcessIdFormatType},
+ }
+ }
+
+ return ricControlStyles