<gh_stars>0
# ==================================================================================
#
#       Copyright (c) 2021 Samsung Electronics Co., Ltd. All Rights Reserved.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#          http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
# ==================================================================================
"""
Handles subscription messages from enbs and gnbs through rmr.
"""

import json
from ricxappframe.xapp_frame import RMRXapp, rmr
from ..utils.constants import Constants
from ._BaseHandler import _BaseHandler
from ..manager.SdlManager import SdlManager
class SubscriptionHandler(_BaseHandler):

    def __init__(self, rmr_xapp: RMRXapp, msgtype):
        super().__init__(rmr_xapp, msgtype)


    def request_handler(self, rmr_xapp, summary, sbuf):
        """
                Handles subscription messages.

                Parameters
                ----------
                rmr_xapp: rmr Instance Context

                summary: dict (required)
                    buffer content

                sbuf: str (required)
                    length of the message
        """
        self._rmr_xapp.rmr_free(sbuf)
        try:
            req = json.loads(summary[rmr.RMR_MS_PAYLOAD])  # input should be a json encoded as bytes
            self.logger.debug("SubscriptionHandler.resp_handler:: Handler processing request")
        except (json.decoder.JSONDecodeError, KeyError):
            self.logger.error("Subscription.resp_handler:: Handler failed to parse request")
            return

        if self.verifySubscription(req):
            self.logger.info("SubscriptionHandler.resp_handler:: Handler processed request: {}".format(req))
        else:
            self.logger.error("SubscriptionHandler.resp_handler:: Request verification failed: {}".format(req))
            return
        self.logger.debug("SubscriptionHandler.resp_handler:: Request verification success: {}".format(req))


    def verifySubscription(self, req: dict):
        for i in ["subscription_id", "message"]:
            if i not in req:
                return False
        return True











# ==================================================================================
#
#       Copyright (c) 2021 Samsung Electronics Co., Ltd. All Rights Reserved.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#          http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
# ==================================================================================
"""
Handles subscription messages from enbs and gnbs through rmr.
"""

import json
from ricxappframe.xapp_frame import RMRXapp, rmr
from ..utils.constants import Constants
from ._BaseHandler import _BaseHandler
from ..manager.SdlManager import SdlManager
class SubscriptionHandler(_BaseHandler):

    def __init__(self, rmr_xapp: RMRXapp, msgtype):
        super().__init__(rmr_xapp, msgtype)


    def request_handler(self, rmr_xapp, summary, sbuf):
        """
                Handles subscription messages.

                Parameters
                ----------
                rmr_xapp: rmr Instance Context

                summary: dict (required)
                    buffer content

                sbuf: str (required)
                    length of the message
        """
        self._rmr_xapp.rmr_free(sbuf)
        try:
            req = json.loads(summary[rmr.RMR_MS_PAYLOAD])  # input should be a json encoded as bytes
            self.logger.debug("SubscriptionHandler.resp_handler:: Handler processing request")
        except (json.decoder.JSONDecodeError, KeyError):
            self.logger.error("Subscription.resp_handler:: Handler failed to parse request")
            return

        if self.verifySubscription(req):
            self.logger.info("SubscriptionHandler.resp_handler:: Handler processed request: {}".format(req))
        else:
            self.logger.error("SubscriptionHandler.resp_handler:: Request verification failed: {}".format(req))
            return
        self.logger.debug("SubscriptionHandler.resp_handler:: Request verification success: {}".format(req))


    def verifySubscription(self, req: dict):
        for i in ["subscription_id", "message"]:
            if i not in req:
                return False
        return True
# ================================================================================== # #       Copyright (c) 2021 Samsung Electronics Co., Ltd. All Rights Reserved. # #   Licensed under the Apache License, Version 2.0 (the "License"); #   you may not use this file except in compliance with the License. #   You may obtain a copy of the License at # #          http://www.apache.org/licenses/LICENSE-2.0 # #   Unless required by applicable law or agreed to in writing, software #   distributed under the License is distributed on an "AS IS" BASIS, #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #   See the License for the specific language governing permissions and #   limitations under the License. # # ================================================================================== Handles subscription messages from enbs and gnbs through rmr. Handles subscription messages.                  Parameters                 ----------                 rmr_xapp: rmr Instance Context                  summary: dict (required)                     buffer content                  sbuf: str (required)                     length of the message # input should be a json encoded as bytes