From: Till Kamppeter <till.kamppeter@gmail.com>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: linux-bluetooth@vger.kernel.org, Mario Limonciello <superm1@ubuntu.com>
Subject: Re: PATCHES: Device discovery of the "bluetooth" CUPS backend does not work
Date: Wed, 26 Aug 2009 21:12:26 +0200 [thread overview]
Message-ID: <4A95891A.20402@gmail.com> (raw)
In-Reply-To: <1251310460.2950.98.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 1866 bytes --]
Thank you for the quick answer.
Patch in GIT format attached.
Till
Marcel Holtmann wrote:
> Hi Till,
>
>> I am using Bluez 4.48 in Ubuntu Karmic. First thank you for applying my
>> patches. The bluetooth backend works perfectly now with CUPS 1.3.x and
>> older. On the new CUPS 1.4.x a new problem appeared: The new CUPS does
>> device discovery only for a given time frame requested by the client
>> (printer setup tool, "lpinfo" command). CUPS's default for
>> CUPS-1.3.x-ish requests without timeout specification seems to be 10
>> seconds. CUPS startys all backends at once in the beginning (in
>> parallel) and kills every backend which remains running at the end of
>> the timeout. It accepts output from the backends whenever it occurs not
>> only when the backend finishes, so a backend can search for printers
>> infinitely long if it outputs every found device immediately. Then all
>> printers found during CUPS' timeout are taken into account.
>>
>> The bluetooth backend o 4.48 asks the Bluetooth daemon for printers and
>> collects results for 10 seconds and after that it output them. This
>> takes a total of 10.5 sec and so CUPS kills the backend right before it
>> answers (at least with the 10-second default timeout), resulting in
>> Bluetooth printers never being discovered by CUPS.
>>
>> I have fixed this now with the attached patch, by making each new
>> printer added to the list being output immediately. Note that the list
>> structure cannot be removed from cups/main.c as otherwise we would get
>> duplicate listings.
>>
>> Can you please apply this patch to Bluez so that Bluez gets ready for
>> the new CUPS 1.4.x generation? Thanks.
>
> send a patch created with git format-patch so we can apply them properly
> without me having to modify the commit message manually.
>
> Regards
>
> Marcel
>
>
>
[-- Attachment #2: 0001-Make-discovery-mode-of-bluetooth-CUPS-backend-work-w.patch --]
[-- Type: text/x-patch, Size: 3603 bytes --]
>From e9f4b0053ca32a17dfff7d19adb521952c45cf61 Mon Sep 17 00:00:00 2001
From: Till Kamppeter <till.kamppeter@gmail.com>
Date: Wed, 26 Aug 2009 21:05:43 +0200
Subject: [PATCH] Make discovery mode of bluetooth CUPS backend work with CUPS 1.4.0.
---
ChangeLog | 2 +
cups/main.c | 63 +++++++++++++++++++++++-----------------------------------
2 files changed, 27 insertions(+), 38 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index d06f494..6c170f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+ver 4.51:
+ Make discovery mode of bluetooth CUPS backend work with CUPS 1.4.0.
ver 4.50:
Fix issue with missing manual pages in distribution.
Fix issue with the configuration and state directories.
diff --git a/cups/main.c b/cups/main.c
index da757b0..1bbc78c 100644
--- a/cups/main.c
+++ b/cups/main.c
@@ -185,6 +185,27 @@ static char *device_get_ieee1284_id(const char *adapter, const char *device)
return id;
}
+static void print_printer_details(const char *name, const char *bdaddr, const char *id)
+{
+ char *uri, *escaped;
+
+ escaped = g_strdelimit(g_strdup(name), "\"", '\'');
+ uri = g_strdup_printf("bluetooth://%c%c%c%c%c%c%c%c%c%c%c%c",
+ bdaddr[0], bdaddr[1],
+ bdaddr[3], bdaddr[4],
+ bdaddr[6], bdaddr[7],
+ bdaddr[9], bdaddr[10],
+ bdaddr[12], bdaddr[13],
+ bdaddr[15], bdaddr[16]);
+ printf("direct %s \"%s\" \"%s (Bluetooth)\"", uri, escaped, escaped);
+ if (id != NULL)
+ printf(" \"%s\"\n", id);
+ else
+ printf("\n");
+ g_free(escaped);
+ g_free(uri);
+}
+
static void add_device_to_list(const char *name, const char *bdaddr, const char *id)
{
struct cups_device *device;
@@ -212,27 +233,7 @@ static void add_device_to_list(const char *name, const char *bdaddr, const char
device->id = g_strdup(id);
device_list = g_slist_prepend(device_list, device);
-}
-
-static void print_printer_details(const char *name, const char *bdaddr, const char *id)
-{
- char *uri, *escaped;
-
- escaped = g_strdelimit(g_strdup(name), "\"", '\'');
- uri = g_strdup_printf("bluetooth://%c%c%c%c%c%c%c%c%c%c%c%c",
- bdaddr[0], bdaddr[1],
- bdaddr[3], bdaddr[4],
- bdaddr[6], bdaddr[7],
- bdaddr[9], bdaddr[10],
- bdaddr[12], bdaddr[13],
- bdaddr[15], bdaddr[16]);
- printf("direct %s \"%s\" \"%s (Bluetooth)\"", uri, escaped, escaped);
- if (id != NULL)
- printf(" \"%s\"\n", id);
- else
- printf("\n");
- g_free(escaped);
- g_free(uri);
+ print_printer_details(device->name, device->bdaddr, device->id);
}
static gboolean parse_device_properties(DBusMessageIter *reply_iter, char **name, char **bdaddr)
@@ -384,23 +385,6 @@ static void remote_device_found(const char *adapter, const char *bdaddr, const c
static void discovery_completed(void)
{
- GSList *l;
-
- for (l = device_list; l != NULL; l = l->next) {
- struct cups_device *device = (struct cups_device *) l->data;
-
- if (device->name == NULL)
- device->name = g_strdelimit(g_strdup(device->bdaddr), ":", '-');
- /* Give another try to getting an ID for the device */
- if (device->id == NULL)
- remote_device_found(NULL, device->bdaddr, device->name);
- print_printer_details(device->name, device->bdaddr, device->id);
- g_free(device->name);
- g_free(device->bdaddr);
- g_free(device->id);
- g_free(device);
- }
-
g_slist_free(device_list);
device_list = NULL;
@@ -638,6 +622,9 @@ int main(int argc, char *argv[])
/* Make sure status messages are not buffered */
setbuf(stderr, NULL);
+ /* Make sure output is not buffered */
+ setbuf(stdout, NULL);
+
/* Ignore SIGPIPE signals */
#ifdef HAVE_SIGSET
sigset(SIGPIPE, SIG_IGN);
--
1.6.3.3
next prev parent reply other threads:[~2009-08-26 19:12 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-26 17:59 PATCHES: Device discovery of the "bluetooth" CUPS backend does not work Till Kamppeter
2009-08-26 18:14 ` Marcel Holtmann
2009-08-26 19:12 ` Till Kamppeter [this message]
2009-08-27 2:35 ` Marcel Holtmann
2009-08-27 9:33 ` [PATCH] Make discovery mode of bluetooth CUPS backend work with CUPS 1.4.0 Till Kamppeter
2009-08-27 19:21 ` Marcel Holtmann
2009-08-28 2:39 ` Mario Limonciello
2009-08-29 4:26 ` Marcel Holtmann
2009-08-28 2:40 ` Mario Limonciello
2009-09-01 16:13 ` Bastien Nocera
-- strict thread matches above, loose matches on Subject: below --
2009-08-10 20:19 PATCHES: Device discovery of the "bluetooth" CUPS backend does not work Till Kamppeter
2009-08-11 10:33 ` Bastien Nocera
2009-08-11 11:19 ` Till Kamppeter
2009-08-11 11:33 ` Bastien Nocera
2009-08-11 12:24 ` Till Kamppeter
2009-08-11 13:12 ` Bastien Nocera
2009-08-11 22:09 ` Marcel Holtmann
2009-08-11 22:14 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A95891A.20402@gmail.com \
--to=till.kamppeter@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
--cc=superm1@ubuntu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox