# HG changeset patch # User Goffi # Date 1257635460 -3600 # Node ID fc8c202cda87236301294d85f891d763ed3bca1c # Parent f2a745ca0fbc5e1ad33d0cc685623c712b6d5793 refactoring: using xml params part IV (default values) - File Transfert/IP is now set by default to the ip externally visible diff -r f2a745ca0fbc -r fc8c202cda87 plugins/plugin_xep_0065.py --- a/plugins/plugin_xep_0065.py Sat Nov 07 21:23:28 2009 +0100 +++ b/plugins/plugin_xep_0065.py Sun Nov 08 00:11:00 2009 +0100 @@ -59,8 +59,9 @@ from twisted.internet import protocol, reactor from twisted.protocols.basic import FileSender from twisted.words.xish import domish +from twisted.web.client import getPage import struct -from binascii import hexlify +import urllib import hashlib, pdb from zope.interface import implements @@ -454,12 +455,12 @@ params = """ - + """ - + def __init__(self, host): info("Plugin XEP_0065 initialization") self.host = host @@ -467,11 +468,16 @@ self.server_factory = Socks5ServerFactory() self.server_factory.protocol.host = self.host #needed for progress CB self.client_factory = Socks5ClientFactory() - host.memory.import_params(self, XEP_0065.params) + host.memory.importParams(self, XEP_0065.params) + host.memory.setDefault("IP", "File Transfert", self.getExternalIP) port = int(self.host.memory.getParamV("Port", "File Transfert")) info("Launching Socks5 Stream server on port %d", port) reactor.listenTCP(port, self.server_factory) + def getExternalIP(self): + """Return IP visible from outside, by asking to a website""" + return getPage("http://www.goffi.org/sat_tools/get_ip.php") + def connectionInitialized(self): self.xmlstream.addObserver(BS_REQUEST, self.getFile) diff -r f2a745ca0fbc -r fc8c202cda87 tools/memory.py --- a/tools/memory.py Sat Nov 07 21:23:28 2009 +0100 +++ b/tools/memory.py Sun Nov 08 00:11:00 2009 +0100 @@ -27,6 +27,7 @@ from xml.dom import minidom from logging import debug, info, error import pdb +from twisted.internet import defer const_SAVEFILE_PARAM=os.path.expanduser("~/.sat_param.save") const_SAVEFILE_HISTORY=os.path.expanduser("~/.sat_history.save") @@ -70,11 +71,10 @@ #the node is new return None - def import_params(self, parent, xml): + def importParams(self, parent, xml): """import xml in parameters, do nothing if the param already exist @param parent: parent class (usefull for callbacks) @param xml: parameters in xml form""" - src_dom = minidom.parseString(xml) def import_node(tgt_parent, src_parent): @@ -90,6 +90,29 @@ import_node(self.dom.documentElement, src_dom.documentElement) + def __default_ok(self, value, name, category): + self.setParam(name, value, category) + + def __default_ko(self, failure, name, category): + error ("Can't determine default value for [%s/%s]: %s" % (category, name, str(failure.value))) + + def setDefault(self, name, category, callback, errback=None): + """Set default value of parameter + 'default_cb' attibute of parameter must be set to 'yes' + @param name: name of the parameter + @param category: category of the parameter + @param callback: must return a string with the value (use deferred if needed) + @param errback: must manage the error with args failure, name, category + """ + node = self.__getParamNode(name, category) + if not node: + error("Requested param [%s] in category [%s] doesn't exist !" , name, category) + return + if node.getAttribute('default_cb') == 'yes': + del node.attributes['default_cb'] + d = defer.maybeDeferred(callback) + d.addCallback(self.__default_ok, name, category) + d.addErrback(errback or self.__default_ko, name, category) def getParamV(self, name, category): """Helper method to get the value in the good type @@ -251,5 +274,8 @@ def setParam(self, name, value, category): return self.params.setParam(name, value, category) - def import_params(self, parent, xml): - return self.params.import_params(parent, xml) + def importParams(self, parent, xml): + return self.params.importParams(parent, xml) + + def setDefault(self, name, category, callback, errback=None): + return self.params.setDefault(name, category, callback, errback)