From 4523ed4356291b9bc61587e1657eb43a8260a180 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mar 16 2009 14:22:41 +0000 Subject: - Update to 4.33 --- diff --git a/.cvsignore b/.cvsignore index 27b907c..956cbfe 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -bluez-4.32.tar.gz +bluez-4.33.tar.gz diff --git a/bluez-fix-sdp-copy-for-strings-with-nulls.patch b/bluez-fix-sdp-copy-for-strings-with-nulls.patch deleted file mode 100644 index 18847ed..0000000 --- a/bluez-fix-sdp-copy-for-strings-with-nulls.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff --git a/lib/sdp.c b/lib/sdp.c -index 896c5eb..66e65ca 100644 ---- a/lib/sdp.c -+++ b/lib/sdp.c -@@ -97,6 +97,7 @@ static uint128_t bluetooth_base_uuid = { - #define SDP_MAX_ATTR_LEN 65535 - - static sdp_data_t *sdp_copy_seq(sdp_data_t *data); -+static int sdp_attr_add_new_with_length(sdp_record_t *rec, uint16_t attr, uint8_t dtd, const void *value, uint32_t len); - - /* Message structure. */ - struct tupla { -@@ -1381,7 +1382,7 @@ static void sdp_copy_pattern(void *value, void *udata) - sdp_pattern_add_uuid(rec, uuid); - } - --static void *sdp_data_value(sdp_data_t *data) -+static void *sdp_data_value(sdp_data_t *data, uint32_t *len) - { - void *val = NULL; - -@@ -1435,6 +1436,8 @@ static void *sdp_data_value(sdp_data_t *data) - case SDP_URL_STR32: - case SDP_TEXT_STR32: - val = data->val.str; -+ if (len) -+ *len = data->unitSize - 1; - break; - case SDP_ALT8: - case SDP_ALT16: -@@ -1457,7 +1460,7 @@ static sdp_data_t *sdp_copy_seq(sdp_data_t *data) - sdp_data_t *datatmp; - void *value; - -- value = sdp_data_value(tmp); -+ value = sdp_data_value(tmp, NULL); - datatmp = sdp_data_alloc_with_length(tmp->dtd, value, - tmp->unitSize); - -@@ -1477,10 +1480,14 @@ static void sdp_copy_attrlist(void *value, void *udata) - sdp_data_t *data = value; - sdp_record_t *rec = udata; - void *val; -+ uint32_t len = 0; - -- val = sdp_data_value(data); -+ val = sdp_data_value(data, &len); - -- sdp_attr_add_new(rec, data->attrId, data->dtd, val); -+ if (!len) -+ sdp_attr_add_new(rec, data->attrId, data->dtd, val); -+ else -+ sdp_attr_add_new_with_length(rec, data->attrId, data->dtd, val, len); - } - - sdp_record_t *sdp_copy_record(sdp_record_t *rec) -@@ -2068,6 +2075,17 @@ int sdp_attr_add_new(sdp_record_t *rec, uint16_t attr, uint8_t dtd, - return -1; - } - -+static int sdp_attr_add_new_with_length(sdp_record_t *rec, uint16_t attr, uint8_t dtd, -+ const void *value, uint32_t len) -+{ -+ sdp_data_t *d = sdp_data_alloc_with_length(dtd, value, len); -+ if (d) { -+ sdp_attr_replace(rec, attr, d); -+ return 0; -+ } -+ return -1; -+} -+ - /* - * Set the information attributes of the service - * pointed to by rec. The attributes are diff --git a/bluez-port-cups-to-bluez4.patch b/bluez-port-cups-to-bluez4.patch deleted file mode 100644 index d737a8a..0000000 --- a/bluez-port-cups-to-bluez4.patch +++ /dev/null @@ -1,633 +0,0 @@ -diff --git a/cups/main.c b/cups/main.c -index d8b899e..002c96a 100644 ---- a/cups/main.c -+++ b/cups/main.c -@@ -33,6 +33,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -42,8 +43,6 @@ - - #include "cups.h" - --#define PRINTER_SERVICE_CLASS_NAME "printer" -- - struct cups_device { - char *bdaddr; - char *name; -@@ -53,53 +52,87 @@ struct cups_device { - static GSList *device_list = NULL; - static GMainLoop *loop = NULL; - static DBusConnection *conn = NULL; -+static gboolean doing_disco = FALSE; - - #define ATTRID_1284ID 0x0300 - --static sdp_record_t *sdp_xml_parse_record(const char *data, int size) --{ -- return NULL; --} -+struct context_data { -+ gboolean found; -+ char *id; -+}; - --static char *parse_xml_sdp(const char *xml) -+static void element_start(GMarkupParseContext *context, -+ const gchar *element_name, const gchar **attribute_names, -+ const gchar **attribute_values, gpointer user_data, GError **err) - { -- sdp_record_t *sdp_record; -- sdp_list_t *l; -- char *str = NULL; -+ struct context_data *ctx_data = user_data; - -- sdp_record = sdp_xml_parse_record(xml, strlen(xml)); -- if (sdp_record == NULL) -- return NULL; -+ if (!strcmp(element_name, "record")) -+ return; - -- for (l = sdp_record->attrlist; l != NULL; l = l->next) { -- sdp_data_t *data; -+ if (!strcmp(element_name, "attribute")) { -+ int i; -+ for (i = 0; attribute_names[i]; i++) { -+ if (!strcmp(attribute_names[i], "id")) { -+ if (strtol(attribute_values[i], 0, 0) == ATTRID_1284ID) -+ ctx_data->found = TRUE; -+ break; -+ } -+ } -+ return; -+ } - -- data = (sdp_data_t *) l->data; -- if (data->attrId != ATTRID_1284ID) -- continue; -- /* Ignore the length, it's null terminated */ -- str = g_strdup(data->val.str + 2); -- break; -+ if (ctx_data->found && !strcmp(element_name, "text")) { -+ int i; -+ for (i = 0; attribute_names[i]; i++) { -+ if (!strcmp(attribute_names[i], "value")) { -+ ctx_data->id = g_strdup (attribute_values[i] + 2); -+ ctx_data->found = FALSE; -+ } -+ } - } -- sdp_record_free(sdp_record); -+} -+ -+static GMarkupParser parser = { -+ element_start, NULL, NULL, NULL, NULL -+}; - -- return str; -+static char *sdp_xml_parse_record(const char *data) -+{ -+ GMarkupParseContext *ctx; -+ struct context_data ctx_data; -+ int size; -+ -+ size = strlen (data); -+ ctx_data.found = FALSE; -+ ctx_data.id = NULL; -+ ctx = g_markup_parse_context_new(&parser, 0, &ctx_data, NULL); -+ -+ if (g_markup_parse_context_parse(ctx, data, size, NULL) == FALSE) { -+ g_markup_parse_context_free(ctx); -+ g_free (ctx_data.id); -+ return NULL; -+ } -+ -+ g_markup_parse_context_free(ctx); -+ -+ return ctx_data.id; - } - --static char *device_get_ieee1284_id(const char *adapter, const char *bdaddr) -+static char *device_get_ieee1284_id(const char *adapter, const char *device) - { -- guint service_handle; - DBusMessage *message, *reply; -- DBusMessageIter iter, reply_iter, iter_array; -+ DBusMessageIter iter, reply_iter; -+ DBusMessageIter reply_iter_entry; - const char *hcr_print = "00001126-0000-1000-8000-00805f9b34fb"; -- char *xml, *id; -+ const char *xml; -+ char *id = NULL; - - /* Look for the service handle of the HCRP service */ -- message = dbus_message_new_method_call("org.bluez", adapter, -- "org.bluez.Adapter", -- "GetRemoteServiceHandles"); -+ message = dbus_message_new_method_call("org.bluez", device, -+ "org.bluez.Device", -+ "DiscoverServices"); - dbus_message_iter_init_append(message, &iter); -- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr); - dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &hcr_print); - - reply = dbus_connection_send_with_reply_and_block(conn, -@@ -111,40 +144,41 @@ static char *device_get_ieee1284_id(const char *adapter, const char *bdaddr) - return NULL; - - dbus_message_iter_init(reply, &reply_iter); -- if (dbus_message_iter_get_arg_type(&reply_iter) != DBUS_TYPE_ARRAY) { -- dbus_message_unref(reply); -- return NULL; -- } - -- /* Hopefully we only get one handle, or take a punt */ -- dbus_message_iter_recurse(&reply_iter, &iter_array); -- while (dbus_message_iter_get_arg_type(&iter_array) == DBUS_TYPE_UINT32) { -- dbus_message_iter_get_basic(&iter_array, &service_handle); -- dbus_message_iter_next(&iter_array); -+ if (dbus_message_iter_get_arg_type (&reply_iter) != DBUS_TYPE_ARRAY) { -+ dbus_message_unref(reply); -+ return NULL; - } - -- dbus_message_unref(reply); -+ dbus_message_iter_recurse (&reply_iter, &reply_iter_entry); - -- /* Now get the XML for the HCRP service record */ -- message = dbus_message_new_method_call("org.bluez", adapter, -- "org.bluez.Adapter", -- "GetRemoteServiceRecordAsXML"); -- dbus_message_iter_init_append(message, &iter); -- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr); -- dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &service_handle); -+ /* Hopefully we only get one handle, or take a punt */ -+ while (dbus_message_iter_get_arg_type(&reply_iter_entry) == DBUS_TYPE_DICT_ENTRY) { -+ guint32 key; -+ DBusMessageIter dict_entry; - -- reply = dbus_connection_send_with_reply_and_block(conn, -- message, -1, NULL); -+ dbus_message_iter_recurse (&reply_iter_entry, &dict_entry); - -- dbus_message_unref(message); -+ /* Key ? */ -+ dbus_message_iter_get_basic (&dict_entry, &key); -+ if (!key) { -+ dbus_message_iter_next (&reply_iter_entry); -+ continue; -+ } - -- if (!reply) -- return NULL; -+ /* Try to get the value */ -+ if (!dbus_message_iter_next (&dict_entry)) { -+ dbus_message_iter_next (&reply_iter_entry); -+ continue; -+ } - -- dbus_message_iter_init(reply, &reply_iter); -- dbus_message_iter_get_basic(&reply_iter, &xml); -+ dbus_message_iter_get_basic(&dict_entry, &xml); - -- id = parse_xml_sdp(xml); -+ id = sdp_xml_parse_record(xml); -+ if (id != NULL) -+ break; -+ dbus_message_iter_next (&reply_iter_entry); -+ } - - dbus_message_unref(reply); - -@@ -161,8 +195,12 @@ static void add_device_to_list(const char *name, const char *bdaddr, const char - device = (struct cups_device *) l->data; - - if (strcmp(device->bdaddr, bdaddr) == 0) { -- g_free(device->name); -- device->name = g_strdup(name); -+ if (device->name != name) { -+ g_free(device->name); -+ device->name = g_strdup(name); -+ } -+ g_free(device->id); -+ device->id = g_strdup(id); - return; - } - } -@@ -176,25 +214,12 @@ static void add_device_to_list(const char *name, const char *bdaddr, const char - device_list = g_slist_prepend(device_list, device); - } - --static char *escape_name(const char *str, char orig, char dest) --{ -- char *ret, *s; -- -- ret = g_strdup(str); -- while ((s = strchr(ret, orig)) != NULL) -- s[0] = dest; -- return ret; --} -- - static void print_printer_details(const char *name, const char *bdaddr, const char *id) - { - char *uri, *escaped; -- guint len; - -- escaped = escape_name(name, '\"', '\''); -- len = strlen("bluetooth://") + 12 + 1; -- uri = g_malloc(len); -- snprintf(uri, len, "bluetooth://%c%c%c%c%c%c%c%c%c%c%c%c", -+ 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], -@@ -210,48 +235,71 @@ static void print_printer_details(const char *name, const char *bdaddr, const ch - g_free(uri); - } - --static gboolean device_is_printer(const char *adapter, const char *bdaddr) -+static gboolean parse_device_properties(DBusMessageIter *reply_iter, char **name, char **bdaddr) - { -- char *class; -- DBusMessage *message, *reply; -- DBusMessageIter iter, reply_iter; -+ guint32 class = 0; -+ DBusMessageIter reply_iter_entry; - -- message = dbus_message_new_method_call("org.bluez", adapter, -- "org.bluez.Adapter", -- "GetRemoteMinorClass"); -- dbus_message_iter_init_append(message, &iter); -- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr); -+ if (dbus_message_iter_get_arg_type (reply_iter) != DBUS_TYPE_ARRAY) -+ return FALSE; - -- reply = dbus_connection_send_with_reply_and_block(conn, -- message, -1, NULL); -+ dbus_message_iter_recurse (reply_iter, &reply_iter_entry); - -- dbus_message_unref(message); -+ while (dbus_message_iter_get_arg_type(&reply_iter_entry) == DBUS_TYPE_DICT_ENTRY) { -+ const char *key; -+ DBusMessageIter dict_entry, iter_dict_val; - -- if (!reply) -- return FALSE; -+ dbus_message_iter_recurse (&reply_iter_entry, &dict_entry); - -- dbus_message_iter_init(reply, &reply_iter); -- dbus_message_iter_get_basic(&reply_iter, &class); -+ /* Key == Class ? */ -+ dbus_message_iter_get_basic (&dict_entry, &key); -+ if (!key) { -+ dbus_message_iter_next (&reply_iter_entry); -+ continue; -+ } - -- if (class != NULL && strcmp(class, PRINTER_SERVICE_CLASS_NAME) == 0) { -- dbus_message_unref(reply); -- return TRUE; -+ if (strcmp(key, "Class") != 0 && strcmp(key, "Alias") != 0 && strcmp (key, "Address") != 0) { -+ dbus_message_iter_next (&reply_iter_entry); -+ continue; -+ } -+ -+ /* Try to get the value */ -+ if (!dbus_message_iter_next (&dict_entry)) { -+ dbus_message_iter_next (&reply_iter_entry); -+ continue; -+ } -+ dbus_message_iter_recurse (&dict_entry, &iter_dict_val); -+ if (strcmp(key, "Class") == 0) { -+ dbus_message_iter_get_basic (&iter_dict_val, &class); -+ } else { -+ const char *value; -+ dbus_message_iter_get_basic (&iter_dict_val, &value); -+ if (strcmp(key, "Alias") == 0) { -+ *name = g_strdup (value); -+ } else if (bdaddr) { -+ *bdaddr = g_strdup (value); -+ } -+ } -+ dbus_message_iter_next (&reply_iter_entry); - } - -+ if (class == 0) -+ return FALSE; -+ if (((class & 0x1f00) >> 8) == 0x06 && (class & 0x80)) -+ return TRUE; -+ - return FALSE; - } - --static char *device_get_name(const char *adapter, const char *bdaddr) -+static gboolean device_is_printer(const char *adapter, const char *device_path, char **name, char **bdaddr) - { - DBusMessage *message, *reply; -- DBusMessageIter iter, reply_iter; -- char *name; -+ DBusMessageIter reply_iter; -+ gboolean retval; - -- message = dbus_message_new_method_call("org.bluez", adapter, -- "org.bluez.Adapter", -- "GetRemoteName"); -- dbus_message_iter_init_append(message, &iter); -- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr); -+ message = dbus_message_new_method_call("org.bluez", device_path, -+ "org.bluez.Device", -+ "GetProperties"); - - reply = dbus_connection_send_with_reply_and_block(conn, - message, -1, NULL); -@@ -259,56 +307,78 @@ static char *device_get_name(const char *adapter, const char *bdaddr) - dbus_message_unref(message); - - if (!reply) -- return NULL; -+ return FALSE; - - dbus_message_iter_init(reply, &reply_iter); -- dbus_message_iter_get_basic(&reply_iter, &name); - -- name = g_strdup(name); -+ retval = parse_device_properties(&reply_iter, name, bdaddr); -+ - dbus_message_unref(reply); - -- return name; -+ return retval; - } - --static void remote_device_found(const char *adapter, const char *bdaddr, guint class, int rssi) -+static void remote_device_found(const char *adapter, const char *bdaddr, const char *name) - { -- uint8_t major_index = (class >> 8) & 0x1F; -- uint8_t minor_index; -- uint8_t shift_minor = 0; -- gboolean found = FALSE; -- char *name, *id; -- -- /* Check if we have a printer -- * From hcid/dbus-adapter.c minor_class_str() */ -- if (major_index != 6) -- return; -+ DBusMessage *message, *reply, *adapter_reply; -+ DBusMessageIter iter; -+ char *object_path = NULL; -+ char *id; - -- minor_index = (class >> 4) & 0x0F; -- while (shift_minor < 4) { -- if (((minor_index >> shift_minor) & 0x01) == 0x01) { -- if (shift_minor == 3) { -- found = TRUE; -- break; -- } -- } -- shift_minor++; -+ adapter_reply = NULL; -+ -+ if (adapter == NULL) { -+ message = dbus_message_new_method_call("org.bluez", "/", -+ "org.bluez.Manager", -+ "DefaultAdapter"); -+ -+ adapter_reply = dbus_connection_send_with_reply_and_block(conn, -+ message, -1, NULL); -+ -+ dbus_message_unref(message); -+ -+ if (dbus_message_get_args(adapter_reply, NULL, DBUS_TYPE_OBJECT_PATH, &adapter, DBUS_TYPE_INVALID) == FALSE) -+ return; - } - -- if (!found) -- return; -+ message = dbus_message_new_method_call("org.bluez", adapter, -+ "org.bluez.Adapter", -+ "FindDevice"); -+ dbus_message_iter_init_append(message, &iter); -+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr); -+ -+ if (adapter_reply != NULL) -+ dbus_message_unref(adapter_reply); -+ -+ reply = dbus_connection_send_with_reply_and_block(conn, -+ message, -1, NULL); -+ -+ dbus_message_unref(message); -+ -+ if (!reply) { -+ message = dbus_message_new_method_call("org.bluez", adapter, -+ "org.bluez.Adapter", -+ "CreateDevice"); -+ dbus_message_iter_init_append(message, &iter); -+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr); - -- name = device_get_name(adapter, bdaddr); -- id = device_get_ieee1284_id(adapter, bdaddr); -+ reply = dbus_connection_send_with_reply_and_block(conn, -+ message, -1, NULL); -+ -+ dbus_message_unref(message); -+ -+ if (!reply) -+ return; -+ } else { -+ if (dbus_message_get_args(reply, NULL, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID) == FALSE) -+ return; -+ } -+ -+ id = device_get_ieee1284_id(adapter, object_path); - add_device_to_list(name, bdaddr, id); -- g_free(name); - g_free(id); - } - --static void remote_name_updated(const char *bdaddr, const char *name) --{ -- add_device_to_list(name, bdaddr, NULL); --} -- - static void discovery_completed(void) - { - GSList *l; -@@ -317,7 +387,10 @@ static void discovery_completed(void) - struct cups_device *device = (struct cups_device *) l->data; - - if (device->name == NULL) -- device->name = escape_name(device->bdaddr, ':', '-'); -+ 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); -@@ -356,7 +429,7 @@ static gboolean list_known_printers(const char *adapter) - - message = dbus_message_new_method_call ("org.bluez", adapter, - "org.bluez.Adapter", -- "ListRemoteDevices"); -+ "ListDevices"); - if (message == NULL) - return FALSE; - -@@ -376,18 +449,21 @@ static gboolean list_known_printers(const char *adapter) - } - - dbus_message_iter_recurse(&reply_iter, &iter_array); -- while (dbus_message_iter_get_arg_type(&iter_array) == DBUS_TYPE_STRING) { -- char *bdaddr; -+ while (dbus_message_iter_get_arg_type(&iter_array) == DBUS_TYPE_OBJECT_PATH) { -+ const char *object_path; -+ char *name = NULL; -+ char *bdaddr = NULL; - -- dbus_message_iter_get_basic(&iter_array, &bdaddr); -- if (device_is_printer(adapter, bdaddr)) { -- char *name, *id; -- name = device_get_name(adapter, bdaddr); -- id = device_get_ieee1284_id(adapter, bdaddr); -+ dbus_message_iter_get_basic(&iter_array, &object_path); -+ if (device_is_printer(adapter, object_path, &name, &bdaddr)) { -+ char *id; -+ -+ id = device_get_ieee1284_id(adapter, object_path); - add_device_to_list(name, bdaddr, id); -- g_free(name); - g_free(id); - } -+ g_free(name); -+ g_free(bdaddr); - dbus_message_iter_next(&iter_array); - } - -@@ -398,32 +474,22 @@ static gboolean list_known_printers(const char *adapter) - - static DBusHandlerResult filter_func(DBusConnection *connection, DBusMessage *message, void *user_data) - { -- const char *adapter; -- - if (dbus_message_is_signal(message, "org.bluez.Adapter", -- "RemoteDeviceFound")) { -- char *bdaddr; -- guint class; -- int rssi; -+ "DeviceFound")) { -+ const char *adapter, *bdaddr; -+ char *name; -+ DBusMessageIter iter; - -- dbus_message_get_args(message, NULL, -- DBUS_TYPE_STRING, &bdaddr, -- DBUS_TYPE_UINT32, &class, -- DBUS_TYPE_INT32, &rssi, -- DBUS_TYPE_INVALID); -- adapter = dbus_message_get_path(message); -- remote_device_found(adapter, bdaddr, class, rssi); -- } else if (dbus_message_is_signal(message, "org.bluez.Adapter", -- "RemoteNameUpdated")) { -- char *bdaddr, *name; -+ dbus_message_iter_init(message, &iter); -+ dbus_message_iter_get_basic(&iter, &bdaddr); -+ dbus_message_iter_next(&iter); - -- dbus_message_get_args(message, NULL, -- DBUS_TYPE_STRING, &bdaddr, -- DBUS_TYPE_STRING, &name, -- DBUS_TYPE_INVALID); -- remote_name_updated(bdaddr, name); -+ adapter = dbus_message_get_path(message); -+ if (parse_device_properties(&iter, &name, NULL)) -+ remote_device_found(adapter, bdaddr, name); -+ g_free (name); - } else if (dbus_message_is_signal(message, "org.bluez.Adapter", -- "RemoteDeviceDisappeared")) { -+ "DeviceDisappeared")) { - char *bdaddr; - - dbus_message_get_args(message, NULL, -@@ -431,8 +497,21 @@ static DBusHandlerResult filter_func(DBusConnection *connection, DBusMessage *me - DBUS_TYPE_INVALID); - remote_device_disappeared(bdaddr); - } else if (dbus_message_is_signal(message, "org.bluez.Adapter", -- "DiscoveryCompleted")) { -- discovery_completed(); -+ "PropertyChanged")) { -+ DBusMessageIter iter, value_iter; -+ const char *name; -+ gboolean discovering; -+ -+ dbus_message_iter_init(message, &iter); -+ dbus_message_iter_get_basic(&iter, &name); -+ dbus_message_iter_next(&iter); -+ dbus_message_iter_recurse(&iter, &value_iter); -+ dbus_message_iter_get_basic(&value_iter, &discovering); -+ -+ if (discovering == FALSE && doing_disco) { -+ doing_disco = FALSE; -+ discovery_completed(); -+ } - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -@@ -452,7 +531,6 @@ static gboolean list_printers(void) - DBusMessage *reply, *message; - DBusMessageIter reply_iter; - char *adapter, *match; -- guint len; - - conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, NULL); - if (conn == NULL) -@@ -486,7 +564,7 @@ static gboolean list_printers(void) - } - - dbus_message_iter_init(reply, &reply_iter); -- if (dbus_message_iter_get_arg_type(&reply_iter) != DBUS_TYPE_STRING) { -+ if (dbus_message_iter_get_arg_type(&reply_iter) != DBUS_TYPE_OBJECT_PATH) { - dbus_message_unref(reply); - dbus_connection_unref(conn); - return FALSE; -@@ -508,19 +586,17 @@ static gboolean list_printers(void) - "sender='org.bluez'," \ - "path='%s'" - -- len = strlen(MATCH_FORMAT) - 2 + strlen(adapter) + 1; -- match = g_malloc(len); -- snprintf(match, len, "type='signal'," -- "interface='org.bluez.Adapter'," -- "sender='org.bluez'," -- "path='%s'", -- adapter); -+ match = g_strdup_printf(MATCH_FORMAT, adapter); - dbus_bus_add_match(conn, match, &error); - g_free(match); - -+ /* Add the the recent devices */ -+ list_known_printers(adapter); -+ -+ doing_disco = TRUE; - message = dbus_message_new_method_call("org.bluez", adapter, - "org.bluez.Adapter", -- "DiscoverDevicesWithoutNameResolving"); -+ "StartDiscovery"); - - if (!dbus_connection_send_with_reply(conn, message, NULL, -1)) { - dbus_message_unref(message); -@@ -530,9 +606,6 @@ static gboolean list_printers(void) - } - dbus_message_unref(message); - -- /* Also add the the recent devices */ -- g_timeout_add(0, (GSourceFunc) list_known_printers, adapter); -- - loop = g_main_loop_new(NULL, TRUE); - g_main_loop_run(loop); - diff --git a/bluez-sdp-xml-with-nulls-2.patch b/bluez-sdp-xml-with-nulls-2.patch deleted file mode 100644 index bec4f0d..0000000 --- a/bluez-sdp-xml-with-nulls-2.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/common/sdp-xml.c b/common/sdp-xml.c -index 0403dcd..c3d3934 100644 ---- a/common/sdp-xml.c -+++ b/common/sdp-xml.c -@@ -239,9 +239,7 @@ static void convert_raw_data_to_xml(sdp_data_t *value, int indent_level, - hex = 0; - - for (i = 0; i < length; i++) { -- if (value->val.str[i] == '\0') -- break; -- if (!isprint(value->val.str[i])) { -+ if (!isprint(value->val.str[i]) && value->val.str[i] != '\0') { - hex = 1; - break; - } -@@ -304,7 +302,9 @@ static void convert_raw_data_to_xml(sdp_data_t *value, int indent_level, - strBuf[j++] = 'o'; - strBuf[j++] = 't'; - } -- else { -+ else if (value->val.str[i] == '\0') { -+ strBuf[j++] = ' '; -+ } else { - strBuf[j++] = value->val.str[i]; - } - } diff --git a/bluez.spec b/bluez.spec index 81502df..099df06 100644 --- a/bluez.spec +++ b/bluez.spec @@ -1,6 +1,6 @@ Summary: Bluetooth utilities Name: bluez -Version: 4.32 +Version: 4.33 Release: 10%{?dist} License: GPLv2+ Group: Applications/System @@ -12,14 +12,8 @@ Patch1: bluez-utils-oui-usage.patch # https://bugzilla.redhat.com/show_bug.cgi?id=450081 # http://thread.gmane.org/gmane.linux.bluez.kernel/1687 Patch2: bluez-try-utf8-harder.patch -# http://thread.gmane.org/gmane.linux.bluez.kernel/1688 -Patch3: bluez-sdp-xml-with-nulls-2.patch -# http://thread.gmane.org/gmane.linux.bluez.kernel/1688/focus=1708 -Patch4: bluez-fix-sdp-copy-for-strings-with-nulls.patch -# http://thread.gmane.org/gmane.linux.bluez.kernel/1688/focus=1712 -Patch5: bluez-port-cups-to-bluez4.patch # Adapted from http://cs.ozerki.net/zap/wacom-bt/ -Patch6: bluez-activate-wacom-mode2.patch +Patch3: bluez-activate-wacom-mode2.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root URL: http://www.bluez.org/ @@ -107,10 +101,7 @@ use in Bluetooth applications. %setup -q %patch1 -p0 -b .oui %patch2 -p1 -b .non-utf8-name -%patch3 -p1 -b .nulls-in-sdp-text -%patch4 -p1 -b .more-nulls-in-sdp-text -%patch5 -p1 -b .cups-bluez4 -%patch6 -p1 -b .wacom +%patch3 -p1 -b .wacom %build %configure --enable-cups --enable-hid2hci --enable-dfutool --enable-tools --enable-bccmd --enable-gstreamer --enable-hidd --enable-pand --enable-dund @@ -203,6 +194,9 @@ fi %{_libdir}/alsa-lib/*.so %changelog +* Mon Mar 16 2009 - Bastien Nocera - 4.33-1 +- Update to 4.33 + * Sat Mar 14 2009 - Bastien Nocera - 4.32-10 - Fix a couple of warnings in the CUPS/BlueZ 4.x patch diff --git a/sources b/sources index c93a9a1..27a5dd2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a3c1007cbeca6865cd202ac205769551 bluez-4.32.tar.gz +13cb8c25706dc8c874d1c82fa24b3aae bluez-4.33.tar.gz