X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fhandlers%2Fx2apPdu_asn1_unpacker.go;h=592ba77d7eacdbea1c7d2be3e749b6e75bf074f2;hb=refs%2Fchanges%2F82%2F682%2F1;hp=89ec21692daa42a8204fc98cfa2b6391247649dc;hpb=07ef76dd471a0892a893c90e0ab06713aee34be1;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/handlers/x2apPdu_asn1_unpacker.go b/E2Manager/handlers/x2apPdu_asn1_unpacker.go index 89ec216..592ba77 100644 --- a/E2Manager/handlers/x2apPdu_asn1_unpacker.go +++ b/E2Manager/handlers/x2apPdu_asn1_unpacker.go @@ -28,11 +28,53 @@ import ( "github.com/pkg/errors" "unsafe" ) +func unpackX2apPduUPer(logger *logger.Logger, allocationBufferSize int, packedBufferSize int, packedBuf []byte, maxMessageBufferSize int) (*C.E2AP_PDU_t, error) { + pdu := C.new_pdu(C.ulong(allocationBufferSize)) + + if pdu == nil { + return nil, errors.New("allocation failure (pdu)") + } + + logger.Debugf("#x2apPdu_asn1_unpacker.unpackX2apPduUPer - Packed pdu(%d):%x", packedBufferSize, packedBuf) + + errBuf := make([]C.char, maxMessageBufferSize) + if !C.unpack_pdu_aux(pdu, C.ulong(packedBufferSize), (*C.uchar)(unsafe.Pointer(&packedBuf[0])), C.ulong(len(errBuf)), &errBuf[0], C.ATS_UNALIGNED_BASIC_PER) { + return nil, errors.New(fmt.Sprintf("unpacking error: %s", C.GoString(&errBuf[0]))) + } + + if logger.DebugEnabled() { + C.asn1_pdu_printer(pdu, C.size_t(len(errBuf)), &errBuf[0]) + logger.Debugf("#x2apPdu_asn1_unpacker.unpackX2apPduUPer - PDU: %v packed size:%d", C.GoString(&errBuf[0]), packedBufferSize) + } + return pdu, nil +} type X2PduRefinedResponse struct { pduPrint string } +//func unpackX2apPduUPer(logger *logger.Logger, allocationBufferSize int, packedBufferSize int, packedBuf []byte, maxMessageBufferSize int) (*C.E2AP_PDU_t, error) { +// pdu := C.new_pdu(C.ulong(allocationBufferSize)) +// +// if pdu == nil { +// return nil, errors.New("allocation failure (pdu)") +// } +// +// logger.Debugf("#x2apPdu_asn1_unpacker.unpackX2apPduUPer - Packed pdu(%d):%x", packedBufferSize, packedBuf) +// +// errBuf := make([]C.char, maxMessageBufferSize) +// if !C.unpack_pdu_aux(pdu, C.ulong(packedBufferSize), (*C.uchar)(unsafe.Pointer(&packedBuf[0])), C.ulong(len(errBuf)), &errBuf[0], C.ATS_UNALIGNED_BASIC_PER) { +// return nil, errors.New(fmt.Sprintf("unpacking error: %s", C.GoString(&errBuf[0]))) +// } +// +// if logger.DebugEnabled() { +// C.asn1_pdu_printer(pdu, C.size_t(len(errBuf)), &errBuf[0]) +// logger.Debugf("#x2apPdu_asn1_unpacker.unpackX2apPduUPer - PDU: %v packed size:%d", C.GoString(&errBuf[0]), packedBufferSize) +// } +// +// return pdu, nil +//} + func unpackX2apPdu(logger *logger.Logger, allocationBufferSize int, packedBufferSize int, packedBuf []byte, maxMessageBufferSize int) (*C.E2AP_PDU_t, error) { pdu := C.new_pdu(C.ulong(allocationBufferSize))