Make stream initiation methods unregisterable.
This commit is contained in:
parent
400f08db9d
commit
82e1508d6f
1 changed files with 20 additions and 4 deletions
|
@ -37,11 +37,12 @@ class XEP_0095(BasePlugin):
|
||||||
def plugin_init(self):
|
def plugin_init(self):
|
||||||
self._profiles = {}
|
self._profiles = {}
|
||||||
self._methods = {}
|
self._methods = {}
|
||||||
|
self._methods_order = []
|
||||||
self._pending_lock = threading.Lock()
|
self._pending_lock = threading.Lock()
|
||||||
self._pending= {}
|
self._pending= {}
|
||||||
|
|
||||||
self.register_method(SOCKS5, 'xep_0065')
|
self.register_method(SOCKS5, 'xep_0065', 100)
|
||||||
self.register_method(IBB, 'xep_0047')
|
self.register_method(IBB, 'xep_0047', 50)
|
||||||
|
|
||||||
register_stanza_plugin(Iq, SI)
|
register_stanza_plugin(Iq, SI)
|
||||||
register_stanza_plugin(SI, self.xmpp['xep_0020'].stanza.FeatureNegotiation)
|
register_stanza_plugin(SI, self.xmpp['xep_0020'].stanza.FeatureNegotiation)
|
||||||
|
@ -71,8 +72,16 @@ class XEP_0095(BasePlugin):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def register_method(self, method, plugin_name):
|
def register_method(self, method, plugin_name, order=50):
|
||||||
self._methods[method] = plugin_name
|
self._methods[method] = plugin_name
|
||||||
|
self._methods_order.append((order, method, plugin_name))
|
||||||
|
self._methods_order.sort()
|
||||||
|
|
||||||
|
def unregister_method(self, method, plugin_name, order):
|
||||||
|
if method in self._methods:
|
||||||
|
del self._methods[method]
|
||||||
|
self._methods_order.remove((order, method, plugin_name))
|
||||||
|
self._methods_order.sort()
|
||||||
|
|
||||||
def _handle_request(self, iq):
|
def _handle_request(self, iq):
|
||||||
profile = iq['si']['profile']
|
profile = iq['si']['profile']
|
||||||
|
@ -101,7 +110,14 @@ class XEP_0095(BasePlugin):
|
||||||
extension='no-valid-streams',
|
extension='no-valid-streams',
|
||||||
extension_ns=SI.namespace)
|
extension_ns=SI.namespace)
|
||||||
|
|
||||||
selected_method = SOCKS5 if SOCKS5 in methods else IBB
|
selected_method = None
|
||||||
|
log.debug('Available: %s', methods)
|
||||||
|
for order, method, plugin in self._methods_order:
|
||||||
|
log.debug('Testing: %s', method)
|
||||||
|
if method in methods:
|
||||||
|
selected_method = method
|
||||||
|
break
|
||||||
|
|
||||||
receiver = iq['to']
|
receiver = iq['to']
|
||||||
sender = iq['from']
|
sender = iq['from']
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue