--- /dev/null
+# Copyright 2019 Nokia
+#
+# 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.
+#
+
+import logging
+from dss.api import dss_msg
+from dss.server import dss_rpc_handler
+
+class RPCProcessor(object):
+ def __init__(self):
+ self.handlers = []
+
+ def add_handler(self, handler):
+ self.handlers.append(handler)
+
+ def get_handler(self, name):
+ for handler in self.handlers:
+ if handler.get_name() == name:
+ return handler
+ return None
+
+ '''
+ process the request
+ Arguments:
+ reqstring the request string
+ Return:
+ repstring the reply string
+ '''
+ def process(self, reqstring):
+ reppayload = {}
+ result = 'OK'
+ id = None
+ name = None
+ try:
+ # deserialize req string
+ reqmsg = dss_msg.Msg()
+ reqmsg.deserialize(reqstring)
+ name = reqmsg.get_name()
+
+ logging.info("Processing %s" % name)
+
+ id = reqmsg.get_id()
+
+ # find suitable handler
+ handler = self.get_handler(name)
+
+ # process message
+ reppayload = handler.handle(reqmsg.get_payload())
+ except Exception as exp:
+ logging.warning('Failed when processing %s' % reqstring)
+ result = str(exp)
+
+ repmsg = dss_msg.Msg(name, id, reppayload, result)
+
+ return repmsg.serialize()