refactoring: using xml params part IV (default values)
- File Transfert/IP is now set by default to the ip externally visible
This commit is contained in:
parent
ea056ce96e
commit
b772500c91
2 changed files with 40 additions and 8 deletions
|
|
@ -59,8 +59,9 @@ from logging import debug, info, error
|
|||
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 @@ class XEP_0065(XMPPHandler):
|
|||
params = """
|
||||
<params>
|
||||
<category name="File Transfert">
|
||||
<param name="IP" value="192.168.0.10" type="string" />
|
||||
<param name="IP" value='0.0.0.0' default_cb='yes' type="string" />
|
||||
<param name="Port" value="28915" type="string" />
|
||||
</category>
|
||||
</params>
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self, host):
|
||||
info("Plugin XEP_0065 initialization")
|
||||
self.host = host
|
||||
|
|
@ -467,11 +468,16 @@ class XEP_0065(XMPPHandler):
|
|||
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)
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import pickle
|
|||
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 @@ class Param():
|
|||
#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 @@ class Param():
|
|||
|
||||
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 @@ class Memory:
|
|||
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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue