diff --git a/sat/core/patches.py b/sat/core/patches.py index cafa8783..ebe09f83 100644 --- a/sat/core/patches.py +++ b/sat/core/patches.py @@ -1,4 +1,5 @@ -from twisted.words.protocols.jabber import xmlstream, sasl, client as tclient +import copy +from twisted.words.protocols.jabber import xmlstream, sasl, client as tclient, jid from twisted.internet import ssl from wokkel import client from sat.core.constants import Const as C @@ -139,9 +140,31 @@ class CheckAuthInitializer(client.CheckAuthInitializer): raise Exception("No available authentication method found") +# jid fix + +def internJID(jidstring): + """ + Return interned JID. + + @rtype: L{JID} + """ + # XXX: this interJID return a copy of the cached jid + # this avoid modification of cached jid as JID is mutable + # TODO: propose this upstream + + if jidstring in jid.__internJIDs: + return copy.copy(jid.__internJIDs[jidstring]) + else: + j = jid.JID(jidstring) + jid.__internJIDs[jidstring] = j + return copy.copy(j) + + def apply(): # certificate validation xmlstream.TLSInitiatingInitializer = TLSInitiatingInitializer client.XMPPClient = XMPPClient # XmlStream triggers xmlstream.XmlStreamFactory.protocol = XmlStream + # jid fix + jid.internJID = internJID