2 # NEPI, a framework to manage network experiments
3 # Copyright (C) 2013 INRIA
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
19 # Julien Tribino <julien.tribino@inria.fr>
21 from xml.etree import cElementTree as ET
23 class MessageHandler():
25 .. class:: Class Args :
27 :param sliceid: Slice Name (= Xmpp Slice)
29 :param expid: Experiment ID (= Xmpp User)
34 This class is used only for OMF 5.4 Protocol and is going to become unused
44 def _type_element(self, type_elt, xmlns, msg_id):
45 """ Insert a markup element with an id
48 elt = ET.Element(type_elt)
49 elt.set("xmlns", xmlns)
50 elt.set("mid", msg_id)
55 def _attr_element(self, parent, markup, text, type_key=None, type_value = None):
56 """ Insert a markup element with a text (value)
58 :param parent: Parent element in an XML point of view
59 :type parent: ElementTree Element
60 :param markup: Name of the markup
62 :param text: Value of the markup element
66 elt = ET.SubElement(parent, markup)
67 if type_key and type_value:
68 elt.set(type_key, type_value)
72 def _id_element(self, parent, markup, key, value):
73 """ Insert a markup element with a text (value)
75 :param parent: Parent element in an XML point of view
76 :type parent: ElementTree Element
77 :param markup: Name of the markup
79 :param text: Value of the markup element
83 elt = ET.SubElement(parent, markup)
87 def create_function(self, msg_id, src, rtype, timestamp, props = None, guards = None):
88 """ Build a create message
90 payload = self._type_element("create", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
91 self._attr_element(payload,"src",src)
92 self._attr_element(payload,"ts",timestamp)
93 self._attr_element(payload,"rtype",rtype)
96 if rtype == "application" :
97 properties = self._id_element(payload,"props","xmlns:application",
98 "http://schema.mytestbed.net/omf/6.0/protocol/application")
100 properties = self._attr_element(payload,"props","")
102 for prop in props.keys():
103 self._attr_element(properties,prop,props[prop],type_key="type", type_value = "string")
106 guardians = self._attr_element(payload,"guard","")
107 for guard in guards.keys():
108 self._attr_element(guardians,guard,guards[guard],type_key="type", type_value = "string")
112 def configure_function(self, msg_id, src, timestamp, props = None, guards = None):
113 """ Build a configure message
115 payload = self._type_element("configure", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
116 self._attr_element(payload,"src",src)
117 self._attr_element(payload,"ts",timestamp)
120 properties = self._attr_element(payload,"props","")
121 for prop in props.keys():
122 self._attr_element(properties,prop,props[prop],type_key="type", type_value = "symbol")
125 guardians = self._attr_element(payload,"guard","")
126 for guard in guards.keys():
127 self._attr_element(guardians,guard,guards[guard],type_key="type", type_value = "string")
131 def request_function(self, msg_id, src, timestamp, props = None, guards = None):
132 """ Build a request message
135 payload = self._type_element("request", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
136 self._attr_element(payload,"src",src)
137 self._attr_element(payload,"ts",timestamp)
140 properties = self._attr_element(payload,"props","")
141 for prop in props.keys():
142 self._attr_element(properties,prop,props[prop])
145 guardians = self._attr_element(payload,"guard","")
146 for guard in guards.keys():
147 self._attr_element(guardians,guard,guards[guard])
150 def inform_function(self, msg_id, src, timestamp, cid, itype):
151 """ Build an inform message
154 payload = self._type_element("inform", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
155 sliceid = self._attr_element(payload,"src",src)
156 expid = self._attr_element(config,"ts",timestamp)
157 target = self._attr_element(config,"cid",cid)
158 value = self._attr_element(config,"itype",value)
159 path = self._attr_element(config,"properties",path)
162 def release_function(self, msg_id, src, timestamp, res_id = None, props = None, guards = None):
163 """ Build a release message
166 payload = self._type_element("release", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
167 self._attr_element(payload,"src",src)
168 self._attr_element(payload,"ts",timestamp)
170 self._attr_element(payload,"res_id",timestamp)
173 properties = self._id_element(payload,"props","xmlns:frcp",
174 "http://schema.mytestbed.net/omf/6.0/protocol")
175 for prop in props.keys():
176 self._attr_element(properties,prop,props[prop])
179 guardians = self._attr_element(payload,"guard","")
180 for guard in guards.keys():
181 self._attr_element(guardians,guard,guards[guard])