plugin pipe/stream, file transfert: refactoring and improvments:
this is a big patch as things had to be changed at the same time. - changed methods using profile argument to use client instead - move SatFile in a new tools.stream module, has it should be part of core, not a plugin - new IStreamProducer interface, to handler starting a pull producer - new FileStreamObject which create a stream producer/consumer from a SatFile - plugin pipe is no more using unix named pipe, as it complicate the thing, special care need to be taken to not block, and it's generally not necessary. Instead a socket is now used, so the plugin has been renomed to jingle stream. - bad connection/error should be better handler in jingle stream plugin, and code should not block anymore - jp pipe commands have been updated accordingly fix bug 237
This commit is contained in:
parent
ece10e8cd2
commit
60b8c8fa73
15 changed files with 870 additions and 670 deletions
|
|
@ -111,11 +111,10 @@ class IPPlugin(object):
|
|||
self._external_ip_cache = None
|
||||
self._local_ip_cache = None
|
||||
|
||||
def _externalAllowed(self, profile):
|
||||
def _externalAllowed(self, client):
|
||||
"""Return value of parameter with autorisation of user to do external requests
|
||||
|
||||
if parameter is not set, a dialog is shown to use to get its confirmation, and parameted is set according to answer
|
||||
@param profile: %(doc_profile)s
|
||||
@return (defer.Deferred[bool]): True if external request is autorised
|
||||
"""
|
||||
allow_get_ip = self.host.memory.params.getParamA(GET_IP_NAME, GET_IP_CATEGORY, use_default=False)
|
||||
|
|
@ -127,7 +126,7 @@ class IPPlugin(object):
|
|||
# need to be fixed when params will be refactored
|
||||
self.host.memory.setParam(GET_IP_NAME, C.boolConst(allowed), GET_IP_CATEGORY)
|
||||
return allowed
|
||||
d = xml_tools.deferConfirm(self.host, _(GET_IP_CONFIRM), _(GET_IP_CONFIRM_TITLE), profile=profile)
|
||||
d = xml_tools.deferConfirm(self.host, _(GET_IP_CONFIRM), _(GET_IP_CONFIRM_TITLE), profile=client.profile)
|
||||
d.addCallback(setParam)
|
||||
return d
|
||||
|
||||
|
|
@ -185,10 +184,9 @@ class IPPlugin(object):
|
|||
return d
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def getLocalIPs(self, profile):
|
||||
def getLocalIPs(self, client):
|
||||
"""Try do discover local area network IPs
|
||||
|
||||
@param profile): %(doc_profile)s
|
||||
@return (deferred): list of lan IP addresses
|
||||
if there are several addresses, the one used with the server is put first
|
||||
if no address is found, localhost IP will be in the list
|
||||
|
|
@ -196,7 +194,6 @@ class IPPlugin(object):
|
|||
# TODO: manage permission requesting (e.g. for UMTS link)
|
||||
if self._local_ip_cache is not None:
|
||||
defer.returnValue(self._local_ip_cache)
|
||||
client = self.host.getClient(profile)
|
||||
addresses = []
|
||||
localhost = ['127.0.0.1']
|
||||
|
||||
|
|
@ -231,7 +228,7 @@ class IPPlugin(object):
|
|||
defer.returnValue(addresses)
|
||||
|
||||
# still not luck, we need to contact external website
|
||||
allow_get_ip = yield self._externalAllowed(profile)
|
||||
allow_get_ip = yield self._externalAllowed(client)
|
||||
|
||||
if not allow_get_ip:
|
||||
defer.returnValue(addresses or localhost)
|
||||
|
|
@ -245,22 +242,19 @@ class IPPlugin(object):
|
|||
defer.returnValue(addresses)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def getExternalIP(self, profile):
|
||||
def getExternalIP(self, client):
|
||||
"""Try to discover external IP
|
||||
|
||||
@param profile: %(doc_profile)s
|
||||
@return (deferred): external IP address or None if it can't be discovered
|
||||
"""
|
||||
if self._external_ip_cache is not None:
|
||||
defer.returnValue(self._external_ip_cache)
|
||||
|
||||
client = self.host.getClient(profile)
|
||||
|
||||
# we first try with XEP-0279
|
||||
ip_check = yield self.host.hasFeature(client, NS_IP_CHECK)
|
||||
if ip_check:
|
||||
log.debug(u"Server IP Check available, we use it to retrieve our IP")
|
||||
client = self.host.getClient(profile)
|
||||
iq_elt = client.IQ("get")
|
||||
iq_elt.addElement((NS_IP_CHECK, 'address'))
|
||||
try:
|
||||
|
|
@ -287,7 +281,7 @@ class IPPlugin(object):
|
|||
defer.returnValue(nat_ip)
|
||||
|
||||
# and finally by requesting external website
|
||||
allow_get_ip = yield self._externalAllowed(profile)
|
||||
allow_get_ip = yield self._externalAllowed(client)
|
||||
try:
|
||||
ip = (yield webclient.getPage(GET_IP_PAGE)) if allow_get_ip else None
|
||||
except (internet_error.DNSLookupError, internet_error.TimeoutError):
|
||||
|
|
|
|||
Loading…
Reference in a new issue