view doc/libervia-cli/pubsub_hook.rst @ 4231:e11b13418ba6

plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation: Implement XEP-0343: Signaling WebRTC Data Channels in Jingle. The current version of the XEP (0.3.1) has no implementation and contains some flaws. After discussing this on xsf@, Daniel (from Conversations) mentioned that they had a sprint with Larma (from Dino) to work on another version and provided me with this link: https://gist.github.com/iNPUTmice/6c56f3e948cca517c5fb129016d99e74 . I have used it for my implementation. This implementation reuses work done on Jingle A/V call (notably XEP-0176 and XEP-0167 plugins), with adaptations. When used, XEP-0234 will not handle the file itself as it normally does. This is because WebRTC has several implementations (browser for web interface, GStreamer for others), and file/data must be handled directly by the frontend. This is particularly important for web frontends, as the file is not sent from the backend but from the end-user's browser device. Among the changes, there are: - XEP-0343 implementation. - `file_send` bridge method now use serialised dict as output. - New `BaseTransportHandler.is_usable` method which get content data and returns a boolean (default to `True`) to tell if this transport can actually be used in this context (when we are initiator). Used in webRTC case to see if call data are available. - Support of `application` media type, and everything necessary to handle data channels. - Better confirmation message, with file name, size and description when available. - When file is accepted in preflight, it is specified in following `action_new` signal for actual file transfer. This way, frontend can avoid the display or 2 confirmation messages. - XEP-0166: when not specified, default `content` name is now its index number instead of a UUID. This follows the behaviour of browsers. - XEP-0353: better handling of events such as call taken by another device. - various other updates. rel 441
author Goffi <goffi@goffi.org>
date Sat, 06 Apr 2024 12:57:23 +0200
parents 21e7d46b988c
children
line wrap: on
line source

.. _libervia-cli_pubsub_hook:

====================================
pubsub/hook: PubSub hooks management
====================================

``hook`` is a subcommand grouping all PubSub commands related to hooks management. Hooks
are user actions launched on specific events.

3 types of hooks can be used:

``python``
  A Python module is expected as argument. The module must be available in Python path,
  and it must have a ``hook`` function.

``python_file``
  A path to a Python script is expected as argument. The script must contain a ``hook``
  function.

``python_code``
  Python code which will be directly executed. 3 variables will be set: ``host`` which
  contain the main Libervia instance, ``client`` which contain the session attached to the
  profile, and ``item`` which contain the item attached to the event.

.. note::

   Hooks are executed in Libervia context, and must be asynchronous. If they block, the whole
   Libervia execution will be blocked. They have access to everything, so don't run a code that
   you don't absolutely trust.

.. note::

   Only ``python_file`` type is currently implemented

.. note::
   Hook is an experimental feature, the way to use it may change in the future.

create
======

Create a hook of given type. Type is specified with ``-t {python,python_file,python_code},
--type {python,python_file,python_code}`` and a positional arguments is expected, which
depends on the chosen type.

By default the hook is temporary (it will be lost if the profile is disconnected), but you
can make is persistent accross reconnexions if you use the ``-P, --persistent`` argument.

example
-------

Install a persistent hook on blog node, using the Python script named
``do_something_neat.py`` in ``$HOME`` directory::

  $ li pubsub node hook create -n urn:xmpp:microblog:0 -t python_file --persistent ~/do_something_neat.py

delete
======

Delete one hook or all of them. To delete a hook, specify its type and argument (the that
you have used with ``create``). If you use empty ``--type`` and ``--arg`` all hooks will
be removed.

example
-------

Delete the ``do_something_neat.py`` hook::

  $ li pubsub node hook delete -n urn:xmpp:microblog:0 -t python_file --arg ~/do_something_neat.py

list
====

List registered hooks. The output will give the following informations:

service
  PubSub service on which the hook is attached.

node
  PubSub node on which the hook is attached.

type
  hook type

arg
  hook arguments (dependant of hook type)

persistent
  boolean indicating is the hook persist accross sessions.

example
-------

Get PubSub hooks registered for this profile in JSON::

  $ li pubsub hook list -O json