Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp23503pxb; Mon, 28 Mar 2022 23:02:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxotyN+BjGQqZW8mgQL+CvTfZezSZDLSYyYOPKMBB9jWhRTPgJj7aqt+X6F8kVLnR1ygjMd X-Received: by 2002:ac8:5754:0:b0:2e1:eee8:be0b with SMTP id 20-20020ac85754000000b002e1eee8be0bmr26107882qtx.349.1648533758482; Mon, 28 Mar 2022 23:02:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648533758; cv=none; d=google.com; s=arc-20160816; b=tmtXUXzadd1xF8350uxqDuUmgQ8CI4V47yDfpcgKwZ+aJg5yAh3Suw8oO9NZJix5Af mlsBA8DVdKkfmTqTOzDpmVQnCIfZkFZIuJLj6LFiO/eNl0QdFpauViFMWRaMxvWkUZg5 lJQrPMTdUPRy9IYG3Kw5tBbUjtJDdaidcAlA5eJ8RbOSojaEgr1v1ccOlTfip4lkxtt3 mrm4gQDnpmZh956eZ6H/OqhADtlZ3ELyad7a7hM7fve+SGOCr4islK2zeQN50P0FWTUn nxHaEIZ4wjb0mr/kRCDJHAcEYfGcB5czoQfbZNHvaHTXq552bLsv6hxkLEQy4ZxoLF34 boCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from; bh=FgBVWMVZ64eY6miXlcKdMgEZZRfArET1TrgAaDp55Os=; b=UaoCj635fC/2CMjlQxnwtinHHS26ho2h0fQcIPvOvtQL7i/DiU1Q24w/M/Pxpi9QMN jSCTWyqtbQ5bS+812InAX3XxShha4AYW0A9OXdvonMJ9eOUQv1YN+H0WxFmQBv55dnDD kOs4Fo+WyTglkgetVHkPygUanDuF96JibYckeTjyhw7uGazaothPcO4AWtO81tZfv7Ti kuQ4pk6JER2WHRxftGXCz8CS609p/6jOpC5lvcKlmGgzqeUKO0emJnJCcOu6sp2KDTxG gWDfUTuHvv6SRtEQcLZtafnc8TobZQwlVYuf1u1PbOqebSWZs2+MjgT3fS5hr2bKtpuR umPg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x5-20020ac84a05000000b002e200e2b4d0si7536557qtq.195.2022.03.28.23.01.49; Mon, 28 Mar 2022 23:02:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231912AbiC2FaQ (ORCPT + 99 others); Tue, 29 Mar 2022 01:30:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43372 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231612AbiC2FaQ (ORCPT ); Tue, 29 Mar 2022 01:30:16 -0400 Received: from smtpbguseast1.qq.com (smtpbguseast1.qq.com [54.204.34.129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DD893FD15 for ; Mon, 28 Mar 2022 22:28:25 -0700 (PDT) X-QQ-mid: bizesmtp67t1648531697tlw8inkj Received: from localhost.localdomain ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 29 Mar 2022 13:28:10 +0800 (CST) X-QQ-SSF: 01400000002000D0D000000A0000000 X-QQ-FEAT: dpyQmELDBxHsTX3hz177724oFuYzRqdrgOCmUPl1+7kkt5+NKUukizqP71H3Q eXnvzt0Wb1UEltTrTy7MCJx+m6vL/TVFXZZhhVIAm1ey2HXPa0f5mU/9wgGvPwYgmmY8fwJ UDoKGNyyS/wtmfRIMjx948qrxw3WZXKXuS0GwKvBB1UjYUfZUQ6QhsGhIJGutwAl+EHyvv+ +Xv6dUGFwb/MxljuA4sSGqupbRL2W08JkryVgYnc8pB9Ow29iFNyhHZIu4m8SriSaer7HU3 IlCT4BKdo+Y8JLTU0bT+vI5Eq3+hKTApUaKuy1WhSCkqBkxpkKLbO1RGz86O5C6NuCgGTF6 nH6HRByHySkXfFcM8ZpQFb6iFR6hw== X-QQ-GoodBg: 1 From: xinpeng wang To: linux-bluetooth@vger.kernel.org Cc: xinpeng wang Subject: [PATCH v4] obexd: Fix can't receive small files sent by windows Date: Tue, 29 Mar 2022 13:28:01 +0800 Message-Id: <20220329052801.28748-1-wangxinpeng@uniontech.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:uniontech.com:qybgforeign:qybgforeign9 X-QQ-Bgrelay: 1 X-Spam-Status: No, score=1.4 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, RCVD_IN_SBL_CSS,SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Level: * X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org When obexd receives a file, it parses the filename and other parameters when processing the packet for the first time, store filename in obex_session and emit the dbus signal, The signal will be pending first. then when this file is received, transfer_complete reset obex_session is called. When using a computer with Windows 10 installed to send a file to bluez, obexd will read the data through read_stream; if it is a small file, the data processed for the first time is marked as final, and transfer_complete reset obex_session will be called when the data is processed for the first time. At this point, the dbus signal is still pending, and the dbus method that requests the file path has not been processed. This will cause the upper application to not be able to transfer files from the cache directory to the directory specified by the user. To solve this problem, emit Filename's dbus signal and force it when status=active. Ways to reproduce the problem: 1. Use the computer with windows 10 installed to send a small file to the computer with ubuntu installed; 2. file size < 10k; 3. After sending, in most cases, the file is located in the ~/.cache/obexd/ directory. Normally, the file should be located in the ~/Download directory. To fix this, after applying this commit, it also needs to be modified by the upper-level application. Modified to read Filename from dbus signal if there is Filename in dbus signal. Otherwise, use the dbus method to request Filename. --- v4: fix COMMIT_LOG_LONG_LINE error of checkpatch obexd/src/manager.c | 6 +++++- obexd/src/obex.c | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/obexd/src/manager.c b/obexd/src/manager.c index 01741fe62..2c180dc44 100644 --- a/obexd/src/manager.c +++ b/obexd/src/manager.c @@ -533,8 +533,12 @@ void manager_emit_transfer_property(struct obex_transfer *transfer, void manager_emit_transfer_started(struct obex_transfer *transfer) { transfer->status = TRANSFER_STATUS_ACTIVE; + if (!transfer->path) + return; - manager_emit_transfer_property(transfer, "Status"); + g_dbus_emit_property_changed_full(connection, transfer->path, + TRANSFER_INTERFACE, "Status", + G_DBUS_PROPERTY_CHANGED_FLAG_FLUSH); } static void emit_transfer_completed(struct obex_transfer *transfer, diff --git a/obexd/src/obex.c b/obexd/src/obex.c index 3a68fd66c..c0d9e160a 100644 --- a/obexd/src/obex.c +++ b/obexd/src/obex.c @@ -720,6 +720,7 @@ int obex_put_stream_start(struct obex_session *os, const char *filename) manager_emit_transfer_property(os->service_data, "Size"); os->path = g_strdup(filename); + manager_emit_transfer_property(os->service_data, "Filename"); return 0; } -- 2.20.1