# # NEPI, a framework to manage network experiments # Copyright (C) 2013 INRIA # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Author: Alina Quereilhac # Julien Tribino from xml.etree import cElementTree as ET class MessageHandler(): """ .. class:: Class Args : :param sliceid: Slice Name (= Xmpp Slice) :type expid: str :param expid: Experiment ID (= Xmpp User) :type expid: str .. note:: This class is used only for OMF 5.4 Protocol and is going to become unused """ def __init__(self): """ """ pass def _type_element(self, type_elt, xmlns, msg_id): """ Insert a markup element with an id """ elt = ET.Element(type_elt) elt.set("xmlns", xmlns) elt.set("mid", msg_id) return elt def _attr_element(self, parent, markup, text, type_key=None, type_value = None): """ Insert a markup element with a text (value) :param parent: Parent element in an XML point of view :type parent: ElementTree Element :param markup: Name of the markup :type markup: str :param text: Value of the markup element :type text: str """ elt = ET.SubElement(parent, markup) if type_key and type_value: elt.set(type_key, type_value) elt.text = text return elt def _id_element(self, parent, markup, key, value): """ Insert a markup element with a text (value) :param parent: Parent element in an XML point of view :type parent: ElementTree Element :param markup: Name of the markup :type markup: str :param text: Value of the markup element :type text: str """ elt = ET.SubElement(parent, markup) elt.set(key, value) return elt def create_function(self, msg_id, src, rtype, timestamp, props = None, guards = None): """ Build a create message """ payload = self._type_element("create", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id ) self._attr_element(payload,"src",src) self._attr_element(payload,"ts",timestamp) self._attr_element(payload,"rtype",rtype) if props : if rtype == "application" : properties = self._id_element(payload,"props","xmlns:application", "http://schema.mytestbed.net/omf/6.0/protocol/application") elif rtype == "wlan" : properties = self._id_element(payload,"props","xmlns:wlan", "http://schema.mytestbed.net/omf/6.0/protocol/wlan") else: properties = self._attr_element(payload,"props","") for prop in props.keys(): if isinstance(props[prop],str): self._attr_element(properties,prop,props[prop],type_key="type", type_value = "string") elif isinstance(props[prop],dict): key = self._attr_element(properties,prop,"",type_key="type", type_value = "hash") for comp in props[prop].keys(): self._attr_element(key,comp,props[prop][comp],type_key="type", type_value = "string") if guards : guardians = self._attr_element(payload,"guard","") for guard in guards.keys(): self._attr_element(guardians,guard,guards[guard],type_key="type", type_value = "string") return payload def configure_function(self, msg_id, src, timestamp, props = None, guards = None): """ Build a configure message """ payload = self._type_element("configure", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id ) self._attr_element(payload,"src",src) self._attr_element(payload,"ts",timestamp) if props : properties = self._attr_element(payload,"props","") for prop in props.keys(): self._attr_element(properties,prop,props[prop],type_key="type", type_value = "symbol") if guards : guardians = self._attr_element(payload,"guard","") for guard in guards.keys(): self._attr_element(guardians,guard,guards[guard],type_key="type", type_value = "string") return payload def request_function(self, msg_id, src, timestamp, props = None, guards = None): """ Build a request message """ payload = self._type_element("request", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id ) self._attr_element(payload,"src",src) self._attr_element(payload,"ts",timestamp) if props : properties = self._attr_element(payload,"props","") for prop in props.keys(): self._attr_element(properties,prop,props[prop]) if guards : guardians = self._attr_element(payload,"guard","") for guard in guards.keys(): self._attr_element(guardians,guard,guards[guard]) return payload def inform_function(self, msg_id, src, timestamp, cid, itype): """ Build an inform message """ payload = self._type_element("inform", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id ) sliceid = self._attr_element(payload,"src",src) expid = self._attr_element(config,"ts",timestamp) target = self._attr_element(config,"cid",cid) value = self._attr_element(config,"itype",value) path = self._attr_element(config,"properties",path) return payload def release_function(self, msg_id, src, timestamp, res_id = None, props = None, guards = None): """ Build a release message """ payload = self._type_element("release", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id ) self._attr_element(payload,"src",src) self._attr_element(payload,"ts",timestamp) if res_id : self._attr_element(payload,"res_id",res_id) if props : properties = self._id_element(payload,"props","xmlns:frcp", "http://schema.mytestbed.net/omf/6.0/protocol") for prop in props.keys(): self._attr_element(properties,prop,props[prop]) if guards : guardians = self._attr_element(payload,"guard","") for guard in guards.keys(): self._attr_element(guardians,guard,guards[guard]) return payload