Mercurial > libervia-backend
diff sat/plugins/plugin_exp_jingle_stream.py @ 3404:26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
- a new `XEP-0166_initiate` async trigger point is available
- `initate` is now a coroutine
- `jingleSessionInit` in applications and transports handlers are now called using
`utils.adDeferred`
- new `getApplication` helper method, to retrieve application from its namespace
- new `getContentData` helper method to retrieve application and its argument from content
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 12 Nov 2020 14:53:15 +0100 |
parents | 559a625a236b |
children | be6d91572633 |
line wrap: on
line diff
--- a/sat/plugins/plugin_exp_jingle_stream.py Thu Nov 12 14:53:15 2020 +0100 +++ b/sat/plugins/plugin_exp_jingle_stream.py Thu Nov 12 14:53:15 2020 +0100 @@ -17,14 +17,8 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -from sat.core.i18n import _, D_ -from sat.core.constants import Const as C -from sat.core import exceptions -from sat.core.log import getLogger - -log = getLogger(__name__) -from sat.tools import xml_tools -from sat.tools import stream +import errno +from zope import interface from twisted.words.xish import domish from twisted.words.protocols.jabber import jid from twisted.internet import defer @@ -33,8 +27,15 @@ from twisted.internet import reactor from twisted.internet import error from twisted.internet import interfaces -from zope import interface -import errno +from sat.core.i18n import _, D_ +from sat.core.constants import Const as C +from sat.core import exceptions +from sat.core.log import getLogger +from sat.tools import xml_tools +from sat.tools import stream + + +log = getLogger(__name__) NS_STREAM = "http://salut-a-toi.org/protocol/stream" SECURITY_LIMIT = 30 @@ -193,10 +194,9 @@ def _streamOut(self, to_jid_s, profile_key): client = self.host.getClient(profile_key) - return self.streamOut(client, jid.JID(to_jid_s)) + return defer.ensureDeferred(self.streamOut(client, jid.JID(to_jid_s))) - @defer.inlineCallbacks - def streamOut(self, client, to_jid): + async def streamOut(self, client, to_jid): """send a stream @param peer_jid(jid.JID): recipient @@ -207,7 +207,7 @@ while True: endpoint = endpoints.TCP4ServerEndpoint(reactor, port) try: - port_listening = yield endpoint.listen(factory) + port_listening = await endpoint.listen(factory) except error.CannotListenError as e: if e.socketError.errno == errno.EADDRINUSE: port += 1 @@ -216,7 +216,8 @@ else: factory.port_listening = port_listening break - self._j.initiate( + # we don't want to wait for IQ result of initiate + defer.ensureDeferred(self._j.initiate( client, to_jid, [ @@ -226,8 +227,8 @@ "app_kwargs": {"stream_object": factory}, } ], - ) - defer.returnValue(str(port)) + )) + return str(port) def jingleSessionInit(self, client, session, content_name, stream_object): content_data = session["contents"][content_name]