From 273bf9cec70dd2e5369c4d6e91dac2f5fe56a03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= Date: Thu, 9 Oct 2025 09:11:59 +0200 Subject: [PATCH] gobex: Fix abort for SRM operation The OBEX Abort operation currently triggers an OBEX session which prevents further OBEX operations: obexd[327475]: obexd/client/transfer.c:obc_transfer_register() 0x50e000001380 registered /org/bluez/obex/client/session0/transfer0 obexd[327475]: obexd/client/session.c:obc_session_ref() 0x50c0000010c0: ref=3 obexd[327475]: obexd/client/session.c:obc_session_ref() 0x50c0000010c0: ref=4 obexd[327475]: obexd/client/session.c:session_process_transfer() Transfer(0x50e000001380) started obexd[327475]: obexd/client/session.c:obc_session_unref() 0x50c0000010c0: ref=3 obexd[327475]: Transfer(0x50e000001380) Error: Transfer cancelled by user obexd[327475]: obexd/client/session.c:obc_session_ref() 0x50c0000010c0: ref=4 obexd[327475]: obexd/client/transfer.c:obc_transfer_unregister() 0x50e000001380 unregistered /org/bluez/obex/client/session0/transfer0 obexd[327475]: obexd/client/transfer.c:obc_transfer_free() 0x50e000001380 obexd[327475]: obexd/client/session.c:obc_session_unref() 0x50c0000010c0: ref=3 obexd[327475]: obexd/client/session.c:obc_session_unref() 0x50c0000010c0: ref=2 obexd[327475]: Unknown header offset for opcode 0x10 obexd[327475]: obexd/client/session.c:obc_session_shutdown() 0x50c0000010c0 obexd[327475]: obexd/client/session.c:obc_session_ref() 0x50c0000010c0: ref=3 obexd[327475]: obexd/client/pbap.c:pbap_remove() /org/bluez/obex/client/session0 obexd[327475]: obexd/client/session.c:obc_session_unref() 0x50c0000010c0: ref=2 obexd[327475]: obexd/client/session.c:obc_session_unref() 0x50c0000010c0: ref=1 obexd[327475]: obexd/client/session.c:session_unregistered() Session(0x50c0000010c0) unregistered /org/bluez/obex/client/session0 obexd[327475]: obexd/client/session.c:obc_session_unref() 0x50c0000010c0: ref=0 As its highest bit is always set to 1, and so its value located after G_OBEX_RSP_CONTINUE, the G_OBEX_OP_ABORT is part of the operations constants. This has been tested for PBAP and BIP-AVRCP with Android 15 and 16. Signed-off-by: Luiz Augusto von Dentz --- gobex/gobex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gobex/gobex.c b/gobex/gobex.c index 0e33ececf..df80d79f3 100644 --- a/gobex/gobex.c +++ b/gobex/gobex.c @@ -382,7 +382,7 @@ static void check_srm_final(GObex *obex, guint8 op) case G_OBEX_OP_CONNECT: return; default: - if (op <= G_OBEX_RSP_CONTINUE) + if (op <= G_OBEX_RSP_CONTINUE || op == G_OBEX_OP_ABORT) return; } -- 2.47.3