plugin XEP-0198: Stream Management implementation:
- hooks can now be set in stream onElement and send methods - xmllog refactored to use new hooks - client.isConnected now uses transport.connected method - fixed reconnection, SàT will now try to reconnect indefinitely until it success, unresolvable failure happen (e.g. invalid certificate), or explicit disconnection is requested (or a plugin change this behaviour) - new triggers: "stream_hooks", "disconnecting", "disconnected", and "xml_init" (replace "XML Initialized")
This commit is contained in:
parent
604238e035
commit
05b59775d0
1 changed files with 641 additions and 113 deletions
|
|
@ -23,7 +23,7 @@ from sat.core.log import getLogger
|
|||
|
||||
log = getLogger(__name__)
|
||||
from twisted.words.xish import domish
|
||||
from twisted.words.xish import xmlstream
|
||||
from functools import partial
|
||||
|
||||
PLUGIN_INFO = {
|
||||
C.PI_NAME: "Raw XML log Plugin",
|
||||
|
|
@ -36,26 +36,6 @@ PLUGIN_INFO = {
|
|||
C.PI_DESCRIPTION: _(u"""Send raw XML logs to bridge"""),
|
||||
}
|
||||
|
||||
host = None
|
||||
|
||||
|
||||
def send(self, obj):
|
||||
global host
|
||||
if isinstance(obj, basestring):
|
||||
log = unicode(obj)
|
||||
elif isinstance(obj, domish.Element):
|
||||
log = obj.toXml()
|
||||
else:
|
||||
log.error(_(u"INTERNAL ERROR: Unmanaged XML type"))
|
||||
host.bridge.xmlLog("OUT", log, self._profile)
|
||||
return self._original_send(obj)
|
||||
|
||||
|
||||
def onElement(self, element):
|
||||
global host
|
||||
host.bridge.xmlLog("IN", element.toXml(), self._profile)
|
||||
return self._original_onElement(element)
|
||||
|
||||
|
||||
class XmlLog(object):
|
||||
|
||||
|
|
@ -71,30 +51,32 @@ class XmlLog(object):
|
|||
"label_xmllog": _("Activate XML log")
|
||||
}
|
||||
|
||||
def __init__(self, host_):
|
||||
def __init__(self, host):
|
||||
log.info(_("Plugin XML Log initialization"))
|
||||
global host
|
||||
host = host_
|
||||
|
||||
# parameters
|
||||
self.host = host
|
||||
host.memory.updateParams(self.params)
|
||||
|
||||
# bridge
|
||||
host.bridge.addSignal(
|
||||
"xmlLog", ".plugin", signature="sss"
|
||||
) # args: direction("IN" or "OUT"), xml_data, profile
|
||||
|
||||
self.do_log = host.memory.getParamA("Xml log", "Debug")
|
||||
if self.do_log:
|
||||
XmlStream = xmlstream.XmlStream
|
||||
XmlStream._original_send = XmlStream.send
|
||||
XmlStream._original_onElement = XmlStream.onElement
|
||||
XmlStream.send = send
|
||||
XmlStream.onElement = onElement
|
||||
XmlStream._profile = ""
|
||||
host.trigger.add("XML Initialized", self.setProfile)
|
||||
log.info(_(u"XML log activated"))
|
||||
host.trigger.add("stream_hooks", self.addHooks)
|
||||
|
||||
def setProfile(self, xmlstream, profile):
|
||||
xmlstream._profile = profile
|
||||
def addHooks(self, client, receive_hooks, send_hooks):
|
||||
self.do_log = self.host.memory.getParamA("Xml log", "Debug")
|
||||
if self.do_log:
|
||||
receive_hooks.append(partial(self.onReceive, client=client))
|
||||
send_hooks.append(partial(self.onSend, client=client))
|
||||
log.info(_(u"XML log activated"))
|
||||
return True
|
||||
|
||||
def onReceive(self, element, client):
|
||||
self.host.bridge.xmlLog("IN", element.toXml(), client.profile)
|
||||
|
||||
def onSend(self, obj, client):
|
||||
if isinstance(obj, basestring):
|
||||
log = unicode(obj)
|
||||
elif isinstance(obj, domish.Element):
|
||||
log = obj.toXml()
|
||||
else:
|
||||
log.error(_(u"INTERNAL ERROR: Unmanaged XML type"))
|
||||
self.host.bridge.xmlLog("OUT", log, client.profile)
|
||||
|
|
|
|||
Loading…
Reference in a new issue