Xep-363 and xep-359 support

Hi,
I’m using Freedombox on a 386 laptop. Ejabberd was installed. İt works as expected with Android clients but on iOS client file sharing doesn’t work. İt warns xep-363 not supported on server side.
How can I add xep-363 and xep-359 support to my server?
Thanks in advance.

Do you perhaps mean XEP-357 (Push Notifications), not 359?

There is an open issue to enable XEP-0363 and XEP-0357:

They are supported in Ejabberd through mod_http_upload and mod_push. These would need to be enabled in the Ejabberd configuration. It would be helpful for someone to try this and report back their findings.

Hi,
You can see warning screenshot on attached image.

Hi,
I’m edited ejabberd.yml file as follow;

  • port: 5443
    ip: “::”
    module: ejabberd_http
    request_handlers:
    “/api”: mod_http_api
    “/bosh”: mod_bosh
    “/upload”: mod_http_upload
    “/ws”: ejabberd_http_ws

    captcha: true

    register: true

    tls: false
    protocol_options: ‘TLS_OPTIONS’
    web_admin: true

uncomment of this line -> “/upload”: mod_http_upload

ejabberd servis not restart. Related logs attached below.
I dont send files from iOS client devices. Android clients work as expected.
Thanks in advance.


Feb 22 12:24:58 freedombox sudo[2001]: pam_unix(sudo:session): session closed for user root
Feb 22 12:25:06 freedombox /usr/bin/plinth[436]: # ejabberd mam status
Feb 22 12:25:06 freedombox sudo[2135]: plinth : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/share/plinth/actions/ejabberd mam status
Feb 22 12:25:06 freedombox sudo[2135]: pam_unix(sudo:session): session opened for user root by catav(uid=0)
Feb 22 12:25:07 freedombox sudo[2135]: pam_unix(sudo:session): session closed for user root
Feb 22 12:25:07 freedombox /usr/bin/plinth[436]: Error executing command - [‘sudo’, ‘-n’, ‘/usr/share/plinth/actions/ejabberd’, ‘mam’, ‘status’], , Traceback (most recent call last):
File “/usr/share/plinth/actions/ejabberd”, line 327, in
main()
File “/usr/share/plinth/actions/ejabberd”, line 323, in main
subcommand_method(arguments)
File “/usr/share/plinth/actions/ejabberd”, line 258, in subcommand_mam
conf = ruamel.yaml.round_trip_load(file_handle, preserve_quotes=True)
File “/usr/lib/python3/dist-packages/ruamel/yaml/main.py”, line 685, in round_trip_load
return load(stream, RoundTripLoader, version, preserve_quotes=preserve_quotes)
File “/usr/lib/python3/dist-packages/ruamel/yaml/main.py”, line 636, in load
return loader._constructor.get_single_data() # type: ignore
File “/usr/lib/python3/dist-packages/ruamel/yaml/constructor.py”, line 102, in get_single_data
node = self.composer.get_single_node()
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 75, in get_single_node
document = self.compose_document()
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 96, in compose_document
node = self.compose_node(None, None)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 132, in compose_node
node = self.compose_mapping_node(anchor)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 194, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 130, in compose_node
node = self.compose_sequence_node(anchor)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 163, in compose_sequence_node
node.value.append(self.compose_node(node, index))
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 132, in compose_node
node = self.compose_mapping_node(anchor)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 194, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 132, in compose_node
node = self.compose_mapping_node(anchor)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 194, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 106, in compose_node
if self.parser.check_event(AliasEvent):
File “/usr/lib/python3/dist-packages/ruamel/yaml/parser.py”, line 144, in check_event
self.current_event = self.state()
File “/usr/lib/python3/dist-packages/ruamel/yaml/parser.py”, line 577, in parse_block_mapping_value
if self.scanner.check_token(ValueToken):
File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 1620, in check_token
self._gather_comments()
File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 1662, in _gather_comments
self.fetch_more_tokens()
File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 273, in fetch_more_tokens
return self.fetch_value()
File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 626, in fetch_value
self.reader.get_mark())
ruamel.yaml.scanner.ScannerError: mapping values are not allowed here
in “/etc/ejabberd/ejabberd.yml”, line 74, column 16
Feb 22 12:25:07 freedombox /usr/bin/plinth[436]: Internal Server Error: /plinth/apps/ejabberd/
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/django/core/handlers/exception.py”, line 41, in inner
response = get_response(request)
File “/usr/lib/python3/dist-packages/django/core/handlers/base.py”, line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File “/usr/lib/python3/dist-packages/django/core/handlers/base.py”, line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File “/usr/lib/python3/dist-packages/django/views/generic/base.py”, line 68, in view
return self.dispatch(request, *args, **kwargs)
File “/usr/lib/python3/dist-packages/django/views/generic/base.py”, line 88, in dispatch
return handler(request, *args, **kwargs)
File “/usr/lib/python3/dist-packages/django/views/generic/edit.py”, line 174, in get
return self.render_to_response(self.get_context_data())
File “/usr/lib/python3/dist-packages/plinth/modules/ejabberd/views.py”, line 49, in get_context_data
context = super().get_context_data(*args, **kwargs)
File “/usr/lib/python3/dist-packages/plinth/views.py”, line 188, in get_context_data
context = super().get_context_data(*args, **kwargs)
File “/usr/lib/python3/dist-packages/django/views/generic/edit.py”, line 93, in get_context_data
kwargs[‘form’] = self.get_form()
File “/usr/lib/python3/dist-packages/django/views/generic/edit.py”, line 45, in get_form
return form_class(**self.get_form_kwargs())
File “/usr/lib/python3/dist-packages/django/views/generic/edit.py”, line 52, in get_form_kwargs
‘initial’: self.get_initial(),
File “/usr/lib/python3/dist-packages/plinth/modules/ejabberd/views.py”, line 44, in get_initial
initdict.update({‘MAM_enabled’: self.is_MAM_enabled()})
File “/usr/lib/python3/dist-packages/plinth/modules/ejabberd/views.py”, line 88, in is_MAM_enabled
output = actions.superuser_run(‘ejabberd’, [‘mam’, ‘status’])
File “/usr/lib/python3/dist-packages/plinth/actions.py”, line 120, in superuser_run
log_error=log_error)
File “/usr/lib/python3/dist-packages/plinth/actions.py”, line 215, in _run
raise ActionError(action, output, error)
plinth.errors.ActionError: (‘ejabberd’, ‘’, ‘Traceback (most recent call last):\n File “/usr/share/plinth/actions/ejabberd”, line 327, in \n main()\n File “/usr/share/plinth/actions/ejabberd”, line 323, in main\n subcommand_method(arguments)\n File “/usr/share/plinth/actions/ejabberd”, line 258, in subcommand_mam\n conf = ruamel.yaml.round_trip_load(file_handle, preserve_quotes=True)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/main.py”, line 685, in round_trip_load\n return load(stream, RoundTripLoader, version, preserve_quotes=preserve_quotes)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/main.py”, line 636, in load\n return loader._constructor.get_single_data() # type: ignore\n File “/usr/lib/python3/dist-packages/ruamel/yaml/constructor.py”, line 102, in get_single_data\n node = self.composer.get_single_node()\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 75, in get_single_node\n document = self.compose_document()\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 96, in compose_document\n node = self.compose_node(None, None)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 132, in compose_node\n node = self.compose_mapping_node(anchor)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 194, in compose_mapping_node\n item_value = self.compose_node(node, item_key)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 130, in compose_node\n node = self.compose_sequence_node(anchor)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 163, in compose_sequence_node\n node.value.append(self.compose_node(node, index))\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 132, in compose_node\n node = self.compose_mapping_node(anchor)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 194, in compose_mapping_node\n item_value = self.compose_node(node, item_key)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 132, in compose_node\n node = self.compose_mapping_node(anchor)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 194, in compose_mapping_node\n item_value = self.compose_node(node, item_key)\n File “/usr/lib/python3/dist-packages/ruamel/yaml/composer.py”, line 106, in compose_node\n if self.parser.check_event(AliasEvent):\n File “/usr/lib/python3/dist-packages/ruamel/yaml/parser.py”, line 144, in check_event\n self.current_event = self.state()\n File “/usr/lib/python3/dist-packages/ruamel/yaml/parser.py”, line 577, in parse_block_mapping_value\n if self.scanner.check_token(ValueToken):\n File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 1620, in check_token\n self._gather_comments()\n File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 1662, in _gather_comments\n self.fetch_more_tokens()\n File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 273, in fetch_more_tokens\n return self.fetch_value()\n File “/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py”, line 626, in fetch_value\n self.reader.get_mark())\nruamel.yaml.scanner.ScannerError: mapping values are not allowed here\n in “/etc/ejabberd/ejabberd.yml”, line 74, column 16\n’)
Feb 22 12:25:18 freedombox /usr/bin/plinth[436]: # help get-logs
Feb 22 12:25:18 freedombox sudo[2138]: plinth : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/share/plinth/actions/help get-logs
Feb 22 12:25:18 freedombox sudo[2138]: pam_unix(sudo:session): session opened for user root by catav(uid=0)