Giter Site home page Giter Site logo

telepathyim / telepathy-gabble Goto Github PK

View Code? Open in Web Editor NEW
12.0 12.0 3.0 11.59 MB

XMPP connection manager based on telepathy-glib

Home Page: https://telepathy.freedesktop.org

License: Other

Makefile 0.92% Shell 0.47% M4 0.55% C 61.61% C++ 0.03% Python 34.60% GDB 0.01% XSLT 1.00% Meson 0.83%

telepathy-gabble's People

Contributors

0xdaf avatar alban avatar andrunko avatar asoliverez-ccu avatar barisione avatar bpepple avatar cosimoc avatar danni avatar debarshiray avatar drdanz avatar eeejay avatar fledermaus avatar gkiagia avatar jonnylamb avatar kaffeine avatar michaelkuhn avatar ndufresne avatar noonien-d avatar ocrete avatar ollisal avatar pierlux avatar rufferson avatar senko avatar sjoerdsimons avatar smcv avatar tflueeli avatar tomeuv avatar vuntz avatar wjt avatar xclaesse avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

telepathy-gabble's Issues

XEP-0333 Chat Markers implementation

I was trying to create test unit for markers and stumbled upon several inconsistencies

  • No caps discovery - it relies on receipts_conceivably_supported which checks for receipts but not markers
  • No ignore unknown markers rule - unsolicited marker creates a new channel
  • Marker is parsed as part of the message while XEP mandates marker to be sent in separate message, similar to receipt, and receipt is parsed (and ignored) separately.

@noonien-d I might be missing something - do you remember what driven you to these decisions, was it just a quick'n'dirty patch in (proof of concept implementation) or there were some other drivers doing it this way? I.e. I think the driver was to use carbon extraction and perhaps just misses a condition case to suppress create_if_missing?

XEP-0443: XMPP Compliance Suites 2021

Please add support of XEP-0443: XMPP Compliance Suites 2021: https://xmpp.org/extensions/xep-0443.html

Which replaces:

Set silent flag for Sent carbons

Silent flag (hint) in headers part of the message suppresses incoming message notifications hence needs to be set for any non-incoming message (such us outgoing carbon and mam).
https://telepathy.freedesktop.org/spec/Channel_Interface_Messages.html#Simple-Type:Message_Header_Key

silent (b)
    If present and true, the incoming message should not trigger a user notification.

https://telepathy.freedesktop.org/doc/telepathy-glib-0.24.x/TpMessage.html#tp-message-set-boolean

void                tp_message_set_boolean              (TpMessage *self,
                                                         guint part,
                                                         const gchar *key,
                                                         gboolean b);

Headers are in part 0.

XEP-0095 deprecated in favour of XEP-0234

Just internal tracker for XEP-0234 implementation which I'm currently trying to achieve.

Effectively once JingleFT is stabilized we may need to clean it up removing at least gtalk part is this is clearly obsolete by now. SI should be kept for backward compatibility.

coredump on connection destroy

latest MR introduced regression with GHashTable being destroyed with g_object_unref instead of g_hash_table_unref

trivial fix - just a reminder

GValueArray is deprecated

While struggling with trying to figure out how to send a a{sa(ss)} result over dbus with gabble (instead of a{sa{ss}} which worked) I tried to use a GValueArray for the a(ss) portion. However apparently g_value_array_new () is deprecated, and current code is supposed to use g_array_new ().

Does gabble need to be updated to GArray? GValueArray is used in a few places.

(Also FWIW, the a{sa(ss)} was my attempt to return the list of commands from xep 50 as {"jid to send commands to": [("node", "name"),]}

But so far all my attempts to create that data structure using gvalues are failing.

Also the freedesktop bug tracker isn't letting me log in right now.

Implement XEP-0280: Message Carbons

I just bought Sailfish OS for a Sony Xperia X. It is using Telepathy as communication framework and I really like how integrated it is. Unfortunately telepathy-gabble does not support message carbons, so my chat is out of sync with the other devices.

XEP-0198 SM Support

Support for SM should primarily be done in wocky (see TelepathyIM/wocky#14) however first - gabble need to understand resuming state to adjust timers/signal gui and second - the non-fatal resumption failure requires special handling (as TpBaseConnection is not reusable).

This issue will track the adoption of TelepathyIM/wocky#16 by gabble.

XEPs and RFCs support page with version

XEP-0313 MAM Implementation

Carbons is good and well needed but there's tendency to shift towards MAM using it as subscription to pick up communication. Also it makes more sense to have it for mobile devices (sleep, wake, sync).

Any volunteers or perhaps even ready implementations? I have it on to-do list but not sure how fast i can approach it.

SCRAM-SHA-1(-PLUS) + SCRAM-SHA-256(-PLUS) supports

"When using the SASL SCRAM mechanism, the SCRAM-SHA-256-PLUS variant SHOULD be preferred over the SCRAM-SHA-256 variant, and SHA-256 variants [RFC7677] SHOULD be preferred over SHA-1 variants [RFC5802]".

Can you add support for?

I add SCRAM-SHA-512(-PLUS): https://xmpp.org/extensions/inbox/hash-recommendations.html

Linked to:

BUG: telepathy-gabble crashes when libsoup-3 is called by another plugin.

telepathy-gabble: libsoup2 symbols detected. Using libsoup2 and libsoup3 in the same process is not supported.

When telepathy-gabble is used alongside another account manager plugin (such as telepathy-haze) that uses libsoup-3. telepathy-gabble crashes, crashing the entire telepathy stack.

There is no work-around, and due-to wocky using removed soupmessage functions, just swapping library versions at build-time is not a option.

Build fails with openssl-1.1

/bin/sh ../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I..    -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wnested-externs -Wpointer-ari
th -Wformat-security -Winit-self -Wno-missing-field-initializers -Wno-unused-parameter  -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libxml2 -pthread -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/u
sr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DG_LOG_DOMAIN=\"wocky\" -DWOCKY_COMPILATION -march=native -mtune=native -O2 -pipe -c -o wocky-openssl.lo wocky-openssl.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wnested-externs -Wpointer-arith -Wformat-security -Winit-se
lf -Wno-missing-field-initializers -Wno-unused-parameter -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libxml2 -pthread -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib6
4/glib-2.0/include -DG_LOG_DOMAIN=\"wocky\" -DWOCKY_COMPILATION -march=native -mtune=native -O2 -pipe -c wocky-openssl.c  -fPIC -DPIC -o .libs/wocky-openssl.o
wocky-openssl.c: In function ‘check_peer_name’:
wocky-openssl.c:888:23: error: dereferencing pointer to incomplete type ‘X509’ {aka ‘struct x509_st’}
   X509_CINF *ci = cert->cert_info;
                       ^~
wocky-openssl.c:909:19: error: dereferencing pointer to incomplete type ‘X509_CINF’ {aka ‘struct x509_cinf_st’}
   if (!rval && (ci->extensions != NULL))
                   ^~
wocky-openssl.c:918:22: error: dereferencing pointer to incomplete type ‘X509_EXTENSION’ {aka ‘struct X509_extension_st’}
         int len = ext->value->length;
                      ^~
wocky-openssl.c: In function ‘_cert_status’:
wocky-openssl.c:1122:33: error: dereferencing pointer to incomplete type ‘X509_STORE’ {aka ‘struct x509_store_st’}
           long old_flags = store->param->flags;
                                 ^~
wocky-openssl.c: In function ‘wocky_tls_session_init’:
wocky-openssl.c:1681:31: warning: implicit declaration of function ‘CRYPTO_malloc_init’; did you mean ‘CRYPTO_malloc’? [-Wimplicit-function-declaration]
       malloc_init_succeeded = CRYPTO_malloc_init ();
                               ^~~~~~~~~~~~~~~~~~
                               CRYPTO_malloc
wocky-openssl.c:1681:31: warning: nested extern declaration of ‘CRYPTO_malloc_init’ [-Wnested-externs]
wocky-openssl.c: In function ‘wocky_tls_session_constructed’:
wocky-openssl.c:1781:7: warning: ‘TLSv1_server_method’ is deprecated [-Wdeprecated-declarations]
       session->method = (SSL_METHOD *) TLSv1_server_method ();
       ^~~~~~~
In file included from /usr/include/openssl/opensslconf.h:10,
                 from /usr/include/openssl/e_os2.h:13,
                 from /usr/include/openssl/ssl.h:15,
                 from wocky-openssl.c:47:
/usr/include/openssl/ssl.h:1853:1: note: declared here
 DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void))
 ^~~~~~~~~~~~~~~~~~
wocky-openssl.c:1786:7: warning: ‘TLSv1_client_method’ is deprecated [-Wdeprecated-declarations]
       session->method = (SSL_METHOD *) TLSv1_client_method ();
       ^~~~~~~
In file included from /usr/include/openssl/opensslconf.h:10,
                 from /usr/include/openssl/e_os2.h:13,
                 from /usr/include/openssl/ssl.h:15,
                 from wocky-openssl.c:47:
/usr/include/openssl/ssl.h:1854:1: note: declared here
 DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void))
 ^~~~~~~~~~~~~~~~~~
In file included from /usr/include/glib-2.0/glib.h:62,
                 from /usr/include/glib-2.0/gobject/gbinding.h:28,
                 from /usr/include/glib-2.0/glib-object.h:23,
                 from /usr/include/glib-2.0/gio/gioenums.h:28,
                 from /usr/include/glib-2.0/gio/giotypes.h:28,
                 from /usr/include/glib-2.0/gio/gio.h:26,
                 from wocky-tls.h:32,
                 from wocky-openssl.c:40:
wocky-openssl.c: In function ‘wocky_tls_output_stream_write_async’:
/usr/include/glib-2.0/glib/gmessages.h:337:25: warning: this statement may fall through [-Wimplicit-fallthrough=]
 #define g_warning(...)  g_log (G_LOG_DOMAIN,         \
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                G_LOG_LEVEL_WARNING,  \
                                ~~~~~~~~~~~~~~~~~~~~~~~
                                __VA_ARGS__)
                                ~~~~~~~~~~~~
wocky-openssl.c:1369:11: note: in expansion of macro ‘g_warning’
           g_warning ("write caused read: unsupported TLS re-negotiation?");
           ^~~~~~~~~
wocky-openssl.c:1373:9: note: here
         default:
         ^~~~~~~
In file included from /usr/include/glib-2.0/glib.h:62,
                 from /usr/include/glib-2.0/gobject/gbinding.h:28,
                 from /usr/include/glib-2.0/glib-object.h:23,
                 from /usr/include/glib-2.0/gio/gioenums.h:28,
                 from /usr/include/glib-2.0/gio/giotypes.h:28,
                 from /usr/include/glib-2.0/gio/gio.h:26,
                 from wocky-tls.h:32,
                 from wocky-openssl.c:40:
wocky-openssl.c: In function ‘ssl_read_is_complete’:
/usr/include/glib-2.0/glib/gmessages.h:337:25: warning: this statement may fall through [-Wimplicit-fallthrough=]
 #define g_warning(...)  g_log (G_LOG_DOMAIN,         \
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                G_LOG_LEVEL_WARNING,  \
                                ~~~~~~~~~~~~~~~~~~~~~~~
                                __VA_ARGS__)
                                ~~~~~~~~~~~~
wocky-openssl.c:533:11: note: in expansion of macro ‘g_warning’
           g_warning ("read caused write: unsupported TLS re-negotiation?");
           ^~~~~~~~~
wocky-openssl.c:537:9: note: here
         default:
         ^~~~~~~
make[8]: *** [Makefile:780: wocky-openssl.lo] Error 1

See also downstream bug report: https://bugs.gentoo.org/658902

Assertion g_hash_table_foreach 'version == hash_table->version' failed

Which means GHashTable is modified in the foreach loop, which is not allowed.
The debug trace below has additional debug injected into control points touching the table - namely cache_entry_attempt_to_free (../src/vcard-manager.c:451)

(telepathy-gabble:372456): gabble-DEBUG: 00:04:59.275: gabble_disco_finalize (../src/disco.c:254): called with 0x5555557157a0
(telepathy-gabble:372456): gabble-DEBUG: 00:04:59.275: gabble_request_pipeline_dispose (../src/request-pipeline.c:275): disposing request-pipeline
(telepathy-gabble:372456): gabble-DEBUG: 00:04:59.275: gabble_vcard_manager_dispose (../src/vcard-manager.c:546): 0x55555570da80
(telepathy-gabble:372456): gabble-DEBUG: 00:04:59.275: delete_request (../src/vcard-manager.c:730): Discarding request 0x555555ea26a0
(telepathy-gabble:372456): gabble-DEBUG: 00:04:59.275: cache_entry_attempt_to_free (../src/vcard-manager.c:451): 

(telepathy-gabble:372456): GLib-CRITICAL **: 00:04:59.276: g_hash_table_foreach: assertion 'version == hash_table->version' failed

Thread 1 "telepathy-gabbl" received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffff7e112e3 in g_logv () from /usr/lib/libglib-2.0.so.0
(gdb) 
(gdb) bt
#0  0x00007ffff7e112e3 in g_logv () at /usr/lib/libglib-2.0.so.0
#1  0x00007ffff7e11560 in g_log () at /usr/lib/libglib-2.0.so.0
#2  0x00005555555ebfe0 in gabble_vcard_manager_dispose (object=0x55555570da80) at ../src/vcard-manager.c:560
#3  0x00007ffff7bbd785 in g_object_unref () at /usr/lib/libgobject-2.0.so.0
#4  0x00005555555b99fd in gabble_connection_dispose (object=0x5555557064f0) at ../src/connection.c:1341
#5  0x00007ffff7bbd785 in g_object_unref () at /usr/lib/libgobject-2.0.so.0
#6  0x00007ffff7bcde68 in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0
#7  0x00007ffff7bce210 in g_signal_emit () at /usr/lib/libgobject-2.0.so.0
#8  0x00005555555bce82 in closed_cb (source=0x5555556e2460, res=0x5555556deb30, user_data=0x5555557064f0) at ../src/connection.c:2511
#9  0x00007ffff7c983d4 in  () at /usr/lib/libgio-2.0.so.0
#10 0x00007ffff7c9c7b9 in  () at /usr/lib/libgio-2.0.so.0
#11 0x00007ffff7f3d8d1 in complete_close (self=0x5555556e2460, error=0x0) at ../subprojects/wocky/wocky/wocky-c2s-porter.c:864
#12 0x00007ffff7f3e660 in remote_connection_closed (self=0x5555556e2460, error=0x555555f26860) at ../subprojects/wocky/wocky/wocky-c2s-porter.c:1293
#13 0x00007ffff7f4032f in stanza_received_cb (source=0x555555d28430, res=0x5555557661a0, user_data=0x5555556e2460) at ../subprojects/wocky/wocky/wocky-c2s-porter.c:1844
#14 0x00007ffff7c983d4 in  () at /usr/lib/libgio-2.0.so.0
#15 0x00007ffff7c9c7b9 in  () at /usr/lib/libgio-2.0.so.0
#16 0x00007ffff7f8a5ac in _xmpp_connection_received_data (source=0x7fffdc003310, result=0x555555d73980, user_data=0x555555d28430) at ../subprojects/wocky/wocky/wocky-xmpp-connection.c:514

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.