e2Error, _ := err.(*e2managererrors.RmrError)
errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
httpError = http.StatusInternalServerError
+ case *e2managererrors.ResourceNotFoundError:
+ e2Error, _ := err.(*e2managererrors.ResourceNotFoundError)
+ errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
+ httpError = http.StatusNotFound
default:
e2Error, _ := err.(*e2managererrors.InternalError)
package e2managererrors
+import "fmt"
+
type WrongStateError struct {
Err BaseError
}
-func NewWrongStateError() *RnibDbError {
- return &RnibDbError{
+func NewWrongStateError(state string) *WrongStateError {
+ return &WrongStateError{
BaseError{
Code: 403,
- Message: "RAN in wrong state",
+ Message: fmt.Sprintf("The RAN state <%s> isn’t in the appropriate state.", state) ,
},
}
}
func (handler *X2ResetRequestHandler) Handle(logger *logger.Logger, request models.Request, rmrResponseChannel chan<- *models.NotificationResponse) error {
resetRequest := request.(models.ResetRequest)
+
+ if len(resetRequest.Cause) == 0 {
+ resetRequest.Cause = "misc:om-intervention"
+ }
+ cause, ok:= knownCauses[resetRequest.Cause]
+ if !ok {
+ logger.Errorf("#reset_request_handler.Handle - Unknown cause (%s)", resetRequest.Cause)
+ return e2managererrors.NewRequestValidationError()
+ }
+
nodeb, err := handler.readerProvider().GetNodeb(resetRequest.RanName)
if err != nil {
logger.Errorf("#reset_request_handler.Handle - failed to get status of RAN: %s from RNIB. Error: %s", resetRequest.RanName, err.Error())
if nodeb.ConnectionStatus != entities.ConnectionStatus_CONNECTED {
logger.Errorf("#reset_request_handler.Handle - RAN: %s in wrong state (%s)", resetRequest.RanName, entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)])
- return e2managererrors.NewWrongStateError()
- }
-
-
- if len(resetRequest.Cause) == 0 {
- resetRequest.Cause = "misc:om-intervention"
- }
- cause, ok:= knownCauses[resetRequest.Cause]
- if !ok {
- logger.Errorf("#reset_request_handler.Handle - Unknown cause (%s)", resetRequest.Cause)
- return e2managererrors.NewRequestValidationError()
+ return e2managererrors.NewWrongStateError(entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)])
}
var payloadSize = C.ulong(MaxAsn1PackedBufferSize)
func (src X2ResetResponseHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions,
request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
-
+ request.TransactionId = request.RanName
logger.Debugf("#x2ResetResponseHandler.Handle - transactionId %s: received reset response. Payload: %s", request.TransactionId, request.Payload)
if nb, rNibErr := src.rnibReaderProvider().GetNodeb(request.RanName); rNibErr != nil {
logger.Errorf("#x2ResetResponseHandler.Handle - transactionId %s: failed to retrieve nb entity. RanName: %s. Error: %s", request.TransactionId, request.RanName, rNibErr.Error())
} else {
logger.Debugf("#x2ResetResponseHandler.Handle - transactionId %s: nb entity retrieved. RanName %s, ConnectionStatus %s", request.TransactionId, nb.RanName, nb.ConnectionStatus)
+ //TODO: only returned in debug mode
refinedMessage, err := unpackX2apPduAndRefine(logger, MaxAsn1CodecAllocationBufferSize /*allocation buffer*/, request.Len, request.Payload, MaxAsn1CodecMessageBufferSize /*message buffer*/)
if err != nil {
logger.Errorf("#x2ResetResponseHandler.Handle - transactionId %s: failed to unpack reset response message. RanName %s, Payload: %s", request.TransactionId , request.RanName, request.Payload)
"e2mgr/rmrCgo"
"e2mgr/sessions"
"e2mgr/tests"
- "fmt"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
h := NewX2ResetResponseHandler(rnibReaderProvider)
e2Sessions := make(sessions.E2Sessions)
- xaction := []byte(fmt.Sprintf("%32s", "1234"))
+ //xaction := []byte(fmt.Sprintf("%32s", "1234"))
+ xaction := []byte("RanName")
e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
h := NewX2ResetResponseHandler(rnibReaderProvider)
e2Sessions := make(sessions.E2Sessions)
- xaction := []byte(fmt.Sprintf("%32s", "1234"))
+ //xaction = []byte(fmt.Sprintf("%32s", "1234"))
+ xaction := []byte("RanName")
e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
h := NewX2ResetResponseHandler(rnibReaderProvider)
e2Sessions := make(sessions.E2Sessions)
- xaction := []byte(fmt.Sprintf("%32s", "1234"))
+ //xaction := []byte(fmt.Sprintf("%32s", "1234"))
+ xaction := []byte("RanName")
e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
router.GET("/v1/nodeb/:ranName", controller.GetNodeb)
router.GET("/v1/health", controller.HandleHealthCheckRequest)
router.PUT("/v1/nodeb/shutdown", newController.ShutdownHandler)
- //router.PUT("/v1/nodeb-reset/:ranName", newController.X2ResetHandler)
+ router.PUT("/v1/nodeb-reset/:ranName", newController.X2ResetHandler)
port := fmt.Sprintf(":%d", config.Http.Port)
if err := http.ListenAndServe(port, router); err != nil {