sync from Azure to LF
[ric-plt/e2mgr.git] / E2Manager / converters / x2_setup_response_converter.go
@@ -23,6 +23,7 @@ package converters
 // #include <x2setup_response_wrapper.h>
 import "C"
 import (
+       "e2mgr/e2pdus"
        "e2mgr/logger"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -40,14 +41,27 @@ const (
        maxnoofNeighbours                = 512
 )
 
+type X2SetupResponseConverter struct {
+       logger *logger.Logger
+}
+
+type IX2SetupResponseConverter interface {
+       UnpackX2SetupResponseAndExtract(packedBuf []byte) (*entities.GlobalNbId, *entities.Enb, error)
+}
+
+func NewX2SetupResponseConverter(logger *logger.Logger) *X2SetupResponseConverter {
+       return &X2SetupResponseConverter{
+               logger: logger,
+       }
+}
 
 // The following are possible values of a choice field, find which the pdu contains.
 func getENB_ID_choice(eNB_ID C.ENB_ID_t) (entities.EnbType, []byte) {
 
        enbIdAsBitString := (*C.BIT_STRING_t)(unsafe.Pointer(&eNB_ID.choice[0]))
-       switch eNB_ID.present{
+       switch eNB_ID.present {
        case C.ENB_ID_PR_macro_eNB_ID:
-               return entities.EnbType_MACRO_ENB,  C.GoBytes(unsafe.Pointer(enbIdAsBitString.buf), C.int(enbIdAsBitString.size))
+               return entities.EnbType_MACRO_ENB, C.GoBytes(unsafe.Pointer(enbIdAsBitString.buf), C.int(enbIdAsBitString.size))
        case C.ENB_ID_PR_home_eNB_ID:
                return entities.EnbType_HOME_ENB, C.GoBytes(unsafe.Pointer(enbIdAsBitString.buf), C.int(enbIdAsBitString.size))
        case C.ENB_ID_PR_short_Macro_eNB_ID:
@@ -70,7 +84,7 @@ func getFDDInfo(fdd *C.FDD_Info_t) (*entities.FddInfo, error) {
 
                extIEs := (*C.ProtocolExtensionContainer_170P145_t)(unsafe.Pointer(fdd.iE_Extensions))
                if extIEs != nil && extIEs.list.count > 0 {
-                       count:= int(extIEs.list.count)
+                       count := int(extIEs.list.count)
                        extIEs_slice := (*[1 << 30]*C.FDD_Info_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
                        for _, member := range extIEs_slice {
                                switch member.extensionValue.present {
@@ -116,7 +130,7 @@ func getAdditionalSpecialSubframeInfo(info *C.AdditionalSpecialSubframe_Info_t)
 }
 
 func getAdditionalSpecialSubframeExtensionInfo(info *C.AdditionalSpecialSubframeExtension_Info_t) *entities.AdditionalSpecialSubframeExtensionInfo {
-       additionalSpecialSubframeExtensionInfo := &entities.AdditionalSpecialSubframeExtensionInfo{AdditionalSpecialSubframePatternsExtension: entities.AdditionalSpecialSubframePatterns_Extension(1 +info.additionalspecialSubframePatternsExtension)}
+       additionalSpecialSubframeExtensionInfo := &entities.AdditionalSpecialSubframeExtensionInfo{AdditionalSpecialSubframePatternsExtension: entities.AdditionalSpecialSubframePatterns_Extension(1 + info.additionalspecialSubframePatternsExtension)}
 
        additionalSpecialSubframeExtensionInfo.CyclicPrefixDl = entities.CyclicPrefix(1 + info.cyclicPrefixDL)
        additionalSpecialSubframeExtensionInfo.CyclicPrefixUl = entities.CyclicPrefix(1 + info.cyclicPrefixUL)
@@ -136,7 +150,7 @@ func getTDDInfo(tdd *C.TDD_Info_t) (*entities.TddInfo, error) {
 
                extIEs := (*C.ProtocolExtensionContainer_170P206_t)(unsafe.Pointer(tdd.iE_Extensions))
                if extIEs != nil && extIEs.list.count > 0 {
-                       count:= int(extIEs.list.count)
+                       count := int(extIEs.list.count)
                        extIEs_slice := (*[1 << 30]*C.TDD_Info_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
                        for _, member := range extIEs_slice {
                                switch member.extensionValue.present {
@@ -171,15 +185,15 @@ func getSubframeAllocation_choice(subframeAllocation C.SubframeAllocation_t) (en
 func getMBSFN_Subframe_Infolist(mBSFN_Subframe_Infolist *C.MBSFN_Subframe_Infolist_t) ([]*entities.MbsfnSubframe, error) {
        var mBSFNSubframes []*entities.MbsfnSubframe
 
-       if mBSFN_Subframe_Infolist.list.count > 0 && mBSFN_Subframe_Infolist.list.count <=  maxnoofMBSFN {
-               count:=int(mBSFN_Subframe_Infolist.list.count)
+       if mBSFN_Subframe_Infolist.list.count > 0 && mBSFN_Subframe_Infolist.list.count <= maxnoofMBSFN {
+               count := int(mBSFN_Subframe_Infolist.list.count)
                BSFN_Subframe_Infolist_slice := (*[1 << 30]*C.MBSFN_Subframe_Info_t)(unsafe.Pointer(mBSFN_Subframe_Infolist.list.array))[:count:count]
                for _, member := range BSFN_Subframe_Infolist_slice {
                        mBSFNSubframe := &entities.MbsfnSubframe{RadioframeAllocationPeriod: entities.RadioframeAllocationPeriod(1 + member.radioframeAllocationPeriod)}
 
                        mBSFNSubframe.RadioframeAllocationOffset = uint32(member.radioframeAllocationOffset)
 
-                       allocType, subframeAllocation, err:= getSubframeAllocation_choice(member.subframeAllocation)
+                       allocType, subframeAllocation, err := getSubframeAllocation_choice(member.subframeAllocation)
                        if err != nil {
                                return nil, err
                        }
@@ -209,8 +223,8 @@ func getPRACHConfiguration(prachConf *C.PRACH_Configuration_t) *entities.PrachCo
 }
 func getServedCellsInfoExt(extIEs *C.ProtocolExtensionContainer_170P192_t, servedCellInfo *entities.ServedCellInfo) error {
 
-       if extIEs != nil && extIEs.list.count > 0  {
-               count:=int(extIEs.list.count)
+       if extIEs != nil && extIEs.list.count > 0 {
+               count := int(extIEs.list.count)
                extIEs_slice := (*[1 << 30]*C.ServedCell_Information_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
                for _, member := range extIEs_slice {
                        switch member.extensionValue.present {
@@ -218,7 +232,7 @@ func getServedCellsInfoExt(extIEs *C.ProtocolExtensionContainer_170P192_t, serve
                                ports := (*C.Number_of_Antennaports_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
                                servedCellInfo.NumberOfAntennaPorts = entities.NumberOfAntennaPorts(1 + *ports)
                        case C.ServedCell_Information_ExtIEs__extensionValue_PR_PRACH_Configuration:
-                               prachConfiguration:= getPRACHConfiguration((*C.PRACH_Configuration_t)(unsafe.Pointer(&member.extensionValue.choice[0])))
+                               prachConfiguration := getPRACHConfiguration((*C.PRACH_Configuration_t)(unsafe.Pointer(&member.extensionValue.choice[0])))
                                servedCellInfo.PrachConfiguration = prachConfiguration
                        case C.ServedCell_Information_ExtIEs__extensionValue_PR_MBSFN_Subframe_Infolist:
                                mBSFN_Subframe_Infolist, err := getMBSFN_Subframe_Infolist((*C.MBSFN_Subframe_Infolist_t)(unsafe.Pointer(&member.extensionValue.choice[0])))
@@ -228,20 +242,20 @@ func getServedCellsInfoExt(extIEs *C.ProtocolExtensionContainer_170P192_t, serve
                                servedCellInfo.MbsfnSubframeInfos = mBSFN_Subframe_Infolist
                        case C.ServedCell_Information_ExtIEs__extensionValue_PR_CSG_Id:
                                csgId := (*C.CSG_Id_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
-                               servedCellInfo.CsgId =  fmt.Sprintf("%02x", C.GoBytes(unsafe.Pointer(csgId.buf), C.int(csgId.size)))
+                               servedCellInfo.CsgId = fmt.Sprintf("%02x", C.GoBytes(unsafe.Pointer(csgId.buf), C.int(csgId.size)))
                        case C.ServedCell_Information_ExtIEs__extensionValue_PR_MBMS_Service_Area_Identity_List:
                                mBMS_Service_Area_Identity_List := (*C.MBMS_Service_Area_Identity_List_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
                                if mBMS_Service_Area_Identity_List.list.count > 0 && mBMS_Service_Area_Identity_List.list.count < maxnoofMBMSServiceAreaIdentities {
-                                       count:= int(mBMS_Service_Area_Identity_List.list.count)
+                                       count := int(mBMS_Service_Area_Identity_List.list.count)
                                        mBMS_Service_Area_Identity_List_slice := (*[1 << 30]*C.MBMS_Service_Area_Identity_t)(unsafe.Pointer(mBMS_Service_Area_Identity_List.list.array))[:count:count]
                                        for _, identity := range mBMS_Service_Area_Identity_List_slice {
-                                               servedCellInfo.MbmsServiceAreaIdentities = append(servedCellInfo.MbmsServiceAreaIdentities, fmt.Sprintf("%02x",C.GoBytes(unsafe.Pointer(identity.buf), C.int(identity.size))))
+                                               servedCellInfo.MbmsServiceAreaIdentities = append(servedCellInfo.MbmsServiceAreaIdentities, fmt.Sprintf("%02x", C.GoBytes(unsafe.Pointer(identity.buf), C.int(identity.size))))
                                        }
                                }
                        case C.ServedCell_Information_ExtIEs__extensionValue_PR_MultibandInfoList:
                                multibandInfoList := (*C.MultibandInfoList_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
                                if multibandInfoList.list.count > 0 && multibandInfoList.list.count < maxnoofBands {
-                                       count:= int(multibandInfoList.list.count)
+                                       count := int(multibandInfoList.list.count)
                                        multibandInfoList_slice := (*[1 << 30]*C.BandInfo_t)(unsafe.Pointer(multibandInfoList.list.array))[:count:count]
                                        for _, bandInfo := range multibandInfoList_slice {
                                                servedCellInfo.MultibandInfos = append(servedCellInfo.MultibandInfos, uint32(bandInfo.freqBandIndicator))
@@ -265,11 +279,11 @@ func getServedCellsInfoExt(extIEs *C.ProtocolExtensionContainer_170P192_t, serve
        return nil
 }
 
-func getServedCellsNeighbour_Info(neighbour_Information*C.Neighbour_Information_t) ([]*entities.NeighbourInformation, error) {
+func getServedCellsNeighbour_Info(neighbour_Information *C.Neighbour_Information_t) ([]*entities.NeighbourInformation, error) {
        var neighbours []*entities.NeighbourInformation
 
        if neighbour_Information != nil && neighbour_Information.list.count > 0 && neighbour_Information.list.count <= maxnoofNeighbours {
-               count:= int(neighbour_Information.list.count)
+               count := int(neighbour_Information.list.count)
                neighbour_Information_slice := (*[1 << 30]*C.Neighbour_Information__Member)(unsafe.Pointer(neighbour_Information.list.array))[:count:count]
                for _, member := range neighbour_Information_slice {
 
@@ -278,13 +292,13 @@ func getServedCellsNeighbour_Info(neighbour_Information*C.Neighbour_Information_
                        eUTRANcellIdentifier := C.GoBytes(unsafe.Pointer(member.eCGI.eUTRANcellIdentifier.buf), C.int(member.eCGI.eUTRANcellIdentifier.size))
                        neighbourInfo := &entities.NeighbourInformation{Ecgi: fmt.Sprintf("%02x:%02x", plmnId, eUTRANcellIdentifier)}
 
-                       neighbourInfo.Pci  = uint32(member.pCI)
+                       neighbourInfo.Pci = uint32(member.pCI)
 
                        neighbourInfo.EarFcn = uint32(member.eARFCN)
 
-                       extIEs:= (*C.ProtocolExtensionContainer_170P172_t)(unsafe.Pointer(member.iE_Extensions))
+                       extIEs := (*C.ProtocolExtensionContainer_170P172_t)(unsafe.Pointer(member.iE_Extensions))
                        if extIEs != nil && extIEs.list.count > 0 {
-                               count:= int(extIEs.list.count)
+                               count := int(extIEs.list.count)
                                neighbour_Information_ExtIEs_slice := (*[1 << 30]*C.Neighbour_Information_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
                                for _, neighbour_Information_ExtIE := range neighbour_Information_ExtIEs_slice {
                                        switch neighbour_Information_ExtIE.extensionValue.present {
@@ -298,7 +312,7 @@ func getServedCellsNeighbour_Info(neighbour_Information*C.Neighbour_Information_
                                }
                        }
 
-                       neighbours = append(neighbours,neighbourInfo)
+                       neighbours = append(neighbours, neighbourInfo)
                }
        }
 
@@ -308,8 +322,8 @@ func getServedCellsNeighbour_Info(neighbour_Information*C.Neighbour_Information_
 func getServedCells(servedCellsIE *C.ServedCells_t) ([]*entities.ServedCellInfo, error) {
        var servedCells []*entities.ServedCellInfo
 
-       if servedCellsIE != nil && servedCellsIE.list.count > 0 && servedCellsIE.list.count  < maxCellineNB {
-               count:= int(servedCellsIE.list.count)
+       if servedCellsIE != nil && servedCellsIE.list.count > 0 && servedCellsIE.list.count < maxCellineNB {
+               count := int(servedCellsIE.list.count)
                servedCells__Member_slice := (*[1 << 30]*C.ServedCells__Member)(unsafe.Pointer(servedCellsIE.list.array))[:count:count]
                for _, member := range servedCells__Member_slice {
                        servedCellInfo := &entities.ServedCellInfo{Pci: uint32(member.servedCellInfo.pCI)}
@@ -366,7 +380,7 @@ func getGUGroupIDList(guGroupIDList *C.GUGroupIDList_t) []string {
        var ids []string
 
        if guGroupIDList != nil && guGroupIDList.list.count > 0 && guGroupIDList.list.count <= maxPools {
-               count:=int(guGroupIDList.list.count)
+               count := int(guGroupIDList.list.count)
                guGroupIDList_slice := (*[1 << 30]*C.GU_Group_ID_t)(unsafe.Pointer(guGroupIDList.list.array))[:count:count]
                for _, guGroupID := range guGroupIDList_slice {
                        plmnId := C.GoBytes(unsafe.Pointer(guGroupID.pLMN_Identity.buf), C.int(guGroupID.pLMN_Identity.size))
@@ -398,7 +412,7 @@ func x2SetupResponseToProtobuf(pdu *C.E2AP_PDU_t) (*entities.GlobalNbId, *entiti
                                        case C.X2SetupResponse_IEs__value_PR_GlobalENB_ID:
                                                globalENB_ID := (*C.GlobalENB_ID_t)(unsafe.Pointer(&x2SetupResponse_IE.value.choice[0]))
                                                plmnId := C.GoBytes(unsafe.Pointer(globalENB_ID.pLMN_Identity.buf), C.int(globalENB_ID.pLMN_Identity.size))
-                                               enbType, enbVal:= getENB_ID_choice(globalENB_ID.eNB_ID)
+                                               enbType, enbVal := getENB_ID_choice(globalENB_ID.eNB_ID)
 
                                                globalNbId = &entities.GlobalNbId{}
                                                globalNbId.NbId = fmt.Sprintf("%02x", enbVal)
@@ -412,7 +426,7 @@ func x2SetupResponseToProtobuf(pdu *C.E2AP_PDU_t) (*entities.GlobalNbId, *entiti
                                                }
                                                enb.ServedCells = ServedCells
                                        case C.X2SetupResponse_IEs__value_PR_GUGroupIDList:
-                                               enb.GuGroupIds= getGUGroupIDList((*C.GUGroupIDList_t)(unsafe.Pointer(&x2SetupResponse_IE.value.choice[0])))
+                                               enb.GuGroupIds = getGUGroupIDList((*C.GUGroupIDList_t)(unsafe.Pointer(&x2SetupResponse_IE.value.choice[0])))
                                        case C.X2SetupResponse_IEs__value_PR_CriticalityDiagnostics:
                                                /*ignored*/
                                        case C.X2SetupResponse_IEs__value_PR_LHN_ID:
@@ -423,12 +437,11 @@ func x2SetupResponseToProtobuf(pdu *C.E2AP_PDU_t) (*entities.GlobalNbId, *entiti
                }
        }
 
-
        return globalNbId, &enb, nil
 }
 
-func UnpackX2SetupResponseAndExtract(logger *logger.Logger, allocationBufferSize int, packedBufferSize int, packedBuf []byte, maxMessageBufferSize int) (*entities.GlobalNbId, *entities.Enb, error) {
-       pdu, err := UnpackX2apPdu(logger, allocationBufferSize, packedBufferSize, packedBuf, maxMessageBufferSize)
+func (c *X2SetupResponseConverter) UnpackX2SetupResponseAndExtract(packedBuf []byte) (*entities.GlobalNbId, *entities.Enb, error) {
+       pdu, err := UnpackX2apPdu(c.logger, e2pdus.MaxAsn1CodecAllocationBufferSize, len(packedBuf), packedBuf, e2pdus.MaxAsn1CodecMessageBufferSize)
        if err != nil {
                return nil, nil, err
        }
@@ -436,4 +449,3 @@ func UnpackX2SetupResponseAndExtract(logger *logger.Logger, allocationBufferSize
        defer C.delete_pdu(pdu)
        return x2SetupResponseToProtobuf(pdu)
 }
-