From 0e1cf2e135301fdb57c4e45b495e0ab28adbc0d0 Mon Sep 17 00:00:00 2001 From: kylin-bot Date: Fri, 13 Mar 2026 15:34:38 +0800 Subject: [PATCH 1/3] apply patch 5132 --- obexd/client/session.c | 11 ++++++++++- obexd/client/transfer.c | 4 ++++ obexd/client/transfer.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/obexd/client/session.c b/obexd/client/session.c index 5d3c450..82fab04 100644 --- a/obexd/client/session.c +++ b/obexd/client/session.c @@ -100,6 +100,7 @@ struct obc_session { guint process_id; char *folder; struct callback_data *callback; + guint check; }; static GSList *sessions = NULL; @@ -600,6 +601,7 @@ struct obc_session *obc_session_create(const char *source, session->channel = channel; session->queue = g_queue_new(); session->folder = g_strdup("/"); + session->check = 0; if (owner) obc_session_set_owner(session, owner, owner_disconnected); @@ -620,6 +622,7 @@ void obc_session_shutdown(struct obc_session *session) { struct pending_request *p; GError *err; + guint8 ret = 0; DBG("%p", session); @@ -633,6 +636,11 @@ void obc_session_shutdown(struct obc_session *session) p = session->p; session->p = NULL; + DBG("id: %d, transeffed: %llu, process_id: %d", p->id, obc_transfer_get_transferred(p->transfer), session->process_id); + if (!session->check && obc_transfer_get_transferred(p->transfer) <= 534) { + ret = 1; + } + if (p->func) p->func(session, p->transfer, err, p->data); @@ -652,7 +660,7 @@ void obc_session_shutdown(struct obc_session *session) if (session->path) session_unregistered(session); - if (session->obex) + if (ret && session->obex) g_obex_shutdown_io(session->obex); obc_session_unref(session); @@ -936,6 +944,7 @@ static void session_notify_complete(struct obc_session *session, { DBG("Transfer(%p) complete", transfer); + session->check = 1; session_terminate_transfer(session, transfer, NULL); } diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c index 798ac47..e4bbe4a 100644 --- a/obexd/client/transfer.c +++ b/obexd/client/transfer.c @@ -976,3 +976,7 @@ gint64 obc_transfer_get_size(struct obc_transfer *transfer) { return transfer->size; } + +gint64 obc_transfer_get_transferred(struct obc_transfer *transfer) { + return transfer->transferred; +} diff --git a/obexd/client/transfer.h b/obexd/client/transfer.h index 323332a..593a911 100644 --- a/obexd/client/transfer.h +++ b/obexd/client/transfer.h @@ -44,6 +44,7 @@ int obc_transfer_get_contents(struct obc_transfer *transfer, char **contents, const char *obc_transfer_get_path(struct obc_transfer *transfer); gint64 obc_transfer_get_size(struct obc_transfer *transfer); +gint64 obc_transfer_get_transferred(struct obc_transfer *transfer); DBusMessage *obc_transfer_create_dbus_reply(struct obc_transfer *transfer, DBusMessage *message); -- Gitee From 7f9ba76f3666c45eaa8f84ca8793f51eb4fa93ce Mon Sep 17 00:00:00 2001 From: kylin-bot Date: Fri, 13 Mar 2026 15:34:53 +0800 Subject: [PATCH 2/3] apply patch 5133 --- Makefile.in | 2 +- debian/libbluetooth3.symbols | 2 -- src/adapter.c | 2 +- src/main.conf | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Makefile.in b/Makefile.in index 4001b5c..a505fb4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3407,7 +3407,7 @@ pkginclude_HEADERS = $(am__append_1) AM_CFLAGS = $(MISC_CFLAGS) $(WARNING_CFLAGS) $(UDEV_CFLAGS) $(LIBEBOOK_CFLAGS) \ $(LIBEDATASERVER_CFLAGS) $(ell_cflags) -AM_LDFLAGS = $(MISC_LDFLAGS) -Wl -fpie +AM_LDFLAGS = $(MISC_LDFLAGS) confdir = $(sysconfdir)/bluetooth statedir = $(localstatedir)/lib/bluetooth @DATAFILES_TRUE@dbusdir = $(DBUS_CONFDIR)/dbus-1/system.d diff --git a/debian/libbluetooth3.symbols b/debian/libbluetooth3.symbols index d892e5f..2272ab3 100644 --- a/debian/libbluetooth3.symbols +++ b/debian/libbluetooth3.symbols @@ -217,5 +217,3 @@ libbluetooth.so.3 libbluetooth3 #MINVER# sdp_uuid_to_uuid128@Base 4.91 str2ba@Base 4.91 strtoba@Base 4.91 -sixaxis.so libbluetooth3 #MINVER# - bluetooth_plugin_desc@Base 5.20 diff --git a/src/adapter.c b/src/adapter.c index 5e6d037..db2cbd8 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -4359,7 +4359,7 @@ static void load_link_keys(struct btd_adapter *adapter, GSList *keys, struct link_key_info *info = l->data; bacpy(&key->addr.bdaddr, &info->bdaddr); - key->addr.type = info->bdaddr_type; + key->addr.type = BDADDR_BREDR; key->type = info->type; memcpy(key->val, info->key, 16); key->pin_len = info->pin_len; diff --git a/src/main.conf b/src/main.conf index b90e61d..f2d8fd5 100644 --- a/src/main.conf +++ b/src/main.conf @@ -289,7 +289,7 @@ TemporaryTimeout = 300 # Possible values: # basic: Use L2CAP Basic Mode # ertm: Use L2CAP Enhanced Retransmission Mode -SessionMode = ertm +SessionMode = basic # AVDTP L2CAP Transport Channel Mode. # Possible values: -- Gitee From f1abcd23240cc0cb76def6f5999a099a77757c28 Mon Sep 17 00:00:00 2001 From: kylin-bot Date: Fri, 13 Mar 2026 15:35:03 +0800 Subject: [PATCH 3/3] apply patch 5134 --- src/device.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/device.c b/src/device.c index c702f92..84a1e83 100644 --- a/src/device.c +++ b/src/device.c @@ -2479,9 +2479,10 @@ static uint8_t select_conn_bearer(struct btd_device *dev) { time_t bredr_last = NVAL_TIME, le_last = NVAL_TIME; time_t current = time(NULL); + DBG("addr_type: %d, le: %d, bre: %d", dev->bdaddr_type, dev->le, dev->bredr); /* Prefer bonded bearer in case only one is bonded */ - if (dev->bredr_state.bonded && !dev->le_state.bonded ) + if (dev->bredr_state.bonded ) return BDADDR_BREDR; else if (!dev->bredr_state.bonded && dev->le_state.bonded) return dev->bdaddr_type; @@ -2502,14 +2503,22 @@ static uint8_t select_conn_bearer(struct btd_device *dev) le_last = NVAL_TIME; } - if (le_last == NVAL_TIME && bredr_last == NVAL_TIME) - return dev->bdaddr_type; + if (le_last == NVAL_TIME && bredr_last == NVAL_TIME) { + DBG("No recent seen info, prefer BR/EDR"); + return BDADDR_BREDR; + } + - if (dev->bredr && (!dev->le || le_last == NVAL_TIME)) + if (dev->bredr && (!dev->le || le_last == NVAL_TIME)) { + DBG("Only BR/EDR available"); return BDADDR_BREDR; + } + - if (dev->le && (!dev->bredr || bredr_last == NVAL_TIME)) + if (dev->le && (!dev->bredr || bredr_last == NVAL_TIME)) { + DBG("Only LE available"); return dev->bdaddr_type; + } /* * Prefer BR/EDR if time is the same since it might be from an @@ -2517,6 +2526,11 @@ static uint8_t select_conn_bearer(struct btd_device *dev) */ if (bredr_last <= le_last && btd_adapter_get_bredr(dev->adapter)) return BDADDR_BREDR; + + if (!dev->le_state.connectable) { + DBG("LE not connectable, prefer BR/EDR"); + return BDADDR_BREDR; + } return dev->bdaddr_type; } @@ -2552,6 +2566,8 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, else bdaddr_type = select_conn_bearer(dev); + DBG("bdaddr_type: %d", bdaddr_type); + if (bdaddr_type != BDADDR_BREDR) { int err; @@ -4296,7 +4312,7 @@ struct btd_device *device_create(struct btd_adapter *adapter, const char *storage_dir; ba2str(bdaddr, dst); - DBG("dst %s", dst); + DBG("dst %s, type: %d", dst, bdaddr_type); device = device_new(adapter, dst); if (device == NULL) -- Gitee