diff --git a/sat/plugins/plugin_xep_0359.py b/sat/plugins/plugin_xep_0359.py
index b189f5ce..f3667e50 100644
--- a/sat/plugins/plugin_xep_0359.py
+++ b/sat/plugins/plugin_xep_0359.py
@@ -18,13 +18,14 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
+import uuid
+from zope.interface import implementer
+from twisted.words.protocols.jabber import xmlstream
+from wokkel import disco
from sat.core.constants import Const as C
from sat.core import exceptions
from sat.core.i18n import _
from sat.core.log import getLogger
-from twisted.words.protocols.jabber import xmlstream
-from zope.interface import implementer
-from wokkel import disco
log = getLogger(__name__)
@@ -88,6 +89,32 @@ class XEP_0359(object):
sid_elt["by"] = client.jid.userhost() if by is None else by.userhost()
sid_elt["id"] = stanza_id
+ def getOriginId(self, element):
+ """Return origin-id if found in element
+
+ @param element(domish.Element): element to parse
+ @return (unicode, None): origin-id if found
+ """
+ try:
+ origin_elt = next(element.elements(NS_SID, "origin-id"))
+ except StopIteration:
+ return None
+ else:
+ return origin_elt.getAttribute("id")
+
+ def addOriginId(self, element, origin_id=None):
+ """Add a to a stanza
+
+ @param element(domish.Element): stanza where the must be added
+ @param origin_id(str): id to use, None to automatically generate
+ @return (str): origin_id
+ """
+ if origin_id is None:
+ origin_id = str(uuid.uuid4())
+ sid_elt = element.addElement((NS_SID, "origin-id"))
+ sid_elt["id"] = origin_id
+ return origin_id
+
def getHandler(self, client):
return XEP_0359_handler()