X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ntsimulator%2Fntsim-ng%2Ffeatures%2Fmanual_notification%2Fmanual_notification.c;h=a8f0de80ed69641b50cbe80fd7339c65c025a090;hb=15be1f3b456af2c634418ebfa10930bf142c1379;hp=e76fa6105ddd8a560a9dff2c5f116ca65a0e0c15;hpb=f1d5c9198acde7a7ce296490087cad37e008f688;p=sim%2Fo1-interface.git diff --git a/ntsimulator/ntsim-ng/features/manual_notification/manual_notification.c b/ntsimulator/ntsim-ng/features/manual_notification/manual_notification.c index e76fa61..a8f0de8 100644 --- a/ntsimulator/ntsim-ng/features/manual_notification/manual_notification.c +++ b/ntsimulator/ntsim-ng/features/manual_notification/manual_notification.c @@ -30,24 +30,48 @@ #include #include "core/session.h" +#include "core/xpath.h" #include "core/framework.h" -#define MANUAL_NOTIFICATION_RPC_SCHEMA_XPATH "/nts-network-function:invoke-notification" - static int manual_notification_pm_cb(sr_session_ctx_t *session, const char *path, const sr_val_t *input, const size_t input_cnt, sr_event_t event, uint32_t request_id, sr_val_t **output, size_t *output_cnt, void *private_data); +static sr_subscription_ctx_t *manual_notification_subscription = 0; + +int manual_notification_feature_get_status(void) { + return (manual_notification_subscription != 0); +} int manual_notification_feature_start(sr_session_ctx_t *current_session) { assert_session(); + assert(current_session); - int rc = sr_rpc_subscribe(current_session, MANUAL_NOTIFICATION_RPC_SCHEMA_XPATH, manual_notification_pm_cb, 0, 0, SR_SUBSCR_CTX_REUSE, &session_subscription); - if(rc != SR_ERR_OK) { - log_error("error from sr_rpc_subscribe: %s\n", sr_strerror(rc)); - return NTS_ERR_FAILED; + if(manual_notification_subscription == 0) { + int rc = sr_rpc_subscribe(current_session, NTS_NF_RPC_MANUAL_NOTIF_SCHEMA_XPATH, manual_notification_pm_cb, 0, 0, SR_SUBSCR_CTX_REUSE, &manual_notification_subscription); + if(rc != SR_ERR_OK) { + log_error("error from sr_rpc_subscribe: %s\n", sr_strerror(rc)); + return NTS_ERR_FAILED; + } } return NTS_ERR_OK; } +int manual_notification_feature_stop(void) { + assert_session(); + + if(manual_notification_subscription) { + int rc = sr_unsubscribe(manual_notification_subscription); + if(rc != SR_ERR_OK) { + log_error("error from sr_rpc_subscribe: %s\n", sr_strerror(rc)); + return NTS_ERR_FAILED; + } + + manual_notification_subscription = 0; + } + + return NTS_ERR_OK; +} + + static int manual_notification_pm_cb(sr_session_ctx_t *session, const char *path, const sr_val_t *input, const size_t input_cnt, sr_event_t event, uint32_t request_id, sr_val_t **output, size_t *output_cnt, void *private_data) { int rc; @@ -57,7 +81,7 @@ static int manual_notification_pm_cb(sr_session_ctx_t *session, const char *path return rc; } - rc = sr_val_set_xpath(output[0], MANUAL_NOTIFICATION_RPC_SCHEMA_XPATH"/status"); + rc = sr_val_set_xpath(output[0], NTS_NF_RPC_MANUAL_NOTIF_SCHEMA_XPATH"/status"); if(SR_ERR_OK != rc) { return rc; }