Hello community,
here is the log from the commit of package bluez
checked in at Mon Nov 3 11:56:54 CET 2008.
--------
--- bluez/bluez.changes 2008-10-22 10:17:40.000000000 +0200
+++ /mounts/work_src_done/STABLE/bluez/bluez.changes 2008-10-27 20:50:38.000000000 +0100
@@ -1,0 +2,9 @@
+Mon Oct 27 20:48:38 CET 2008 - seife@suse.de
+
+- update to bluez-4.17:
+ - Fix SBC encoder not writing last frame.
+ - Fix missing timer for A2DP suspend.
+ - Add more supported devices to hid2hci utility.
+ - Add additional functionality to Handsfree support.
+
+-------------------------------------------------------------------
bluez-gstreamer.changes: same change
calling whatdependson for head-i586
Old:
----
bluez-4.16.tar.bz2
New:
----
bluez-4.17.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ bluez-gstreamer.spec ++++++
--- /var/tmp/diff_new_pack.K21691/_old 2008-11-03 11:56:03.000000000 +0100
+++ /var/tmp/diff_new_pack.K21691/_new 2008-11-03 11:56:03.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package bluez-gstreamer (Version 4.16)
+# spec file for package bluez-gstreamer (Version 4.17)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -24,7 +24,7 @@
BuildRequires: alsa-devel libsndfile-devel
BuildRequires: gstreamer-0_10-devel gstreamer-0_10-plugins-base-devel
Url: http://www.bluez.org
-Version: 4.16
+Version: 4.17
Release: 1
Summary: Bluetooth Sound Support
Group: Productivity/Multimedia/Sound/Utilities
@@ -107,6 +107,12 @@
%{_libdir}/gstreamer-*/*.so
%changelog
+* Mon Oct 27 2008 seife@suse.de
+- update to bluez-4.17:
+ - Fix SBC encoder not writing last frame.
+ - Fix missing timer for A2DP suspend.
+ - Add more supported devices to hid2hci utility.
+ - Add additional functionality to Handsfree support.
* Wed Oct 22 2008 seife@suse.de
- update to bluez-4.16:
"This release fixes two potential crashes within bluetoothd.
++++++ bluez.spec ++++++
--- /var/tmp/diff_new_pack.K21691/_old 2008-11-03 11:56:03.000000000 +0100
+++ /var/tmp/diff_new_pack.K21691/_new 2008-11-03 11:56:03.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package bluez (Version 4.16)
+# spec file for package bluez (Version 4.17)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -23,7 +23,7 @@
BuildRequires: glib2-devel libnl-devel libusb-devel
BuildRequires: alsa-devel libsndfile-devel
Url: http://www.bluez.org
-Version: 4.16
+Version: 4.17
Release: 1
Summary: Bluetooth Stack for Linux
Group: Hardware/Mobile
@@ -312,6 +312,12 @@
%{_libdir}/alsa-lib/*.so
%changelog
+* Mon Oct 27 2008 seife@suse.de
+- update to bluez-4.17:
+ - Fix SBC encoder not writing last frame.
+ - Fix missing timer for A2DP suspend.
+ - Add more supported devices to hid2hci utility.
+ - Add additional functionality to Handsfree support.
* Wed Oct 22 2008 seife@suse.de
- update to bluez-4.16:
"This release fixes two potential crashes within bluetoothd.
++++++ bluez-4.16.tar.bz2 -> bluez-4.17.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/a2dp.c new/bluez-4.17/audio/a2dp.c
--- old/bluez-4.16/audio/a2dp.c 2008-10-19 23:46:12.000000000 +0200
+++ new/bluez-4.17/audio/a2dp.c 2008-10-26 07:40:34.000000000 +0100
@@ -1071,8 +1071,7 @@
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else {
if (strstr(str, "Sink"))
source = FALSE;
@@ -1084,8 +1083,7 @@
str = g_key_file_get_string(config, "A2DP", "SBCSources", &err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else {
sbc_srcs = atoi(str);
g_free(str);
@@ -1094,8 +1092,7 @@
str = g_key_file_get_string(config, "A2DP", "MPEG12Sources", &err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else {
mpeg12_srcs = atoi(str);
g_free(str);
@@ -1104,8 +1101,7 @@
str = g_key_file_get_string(config, "A2DP", "SBCSinks", &err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else {
sbc_sinks = atoi(str);
g_free(str);
@@ -1114,8 +1110,7 @@
str = g_key_file_get_string(config, "A2DP", "MPEG12Sinks", &err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else {
mpeg12_sinks = atoi(str);
g_free(str);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/audio.conf new/bluez-4.17/audio/audio.conf
--- old/bluez-4.16/audio/audio.conf 2008-09-06 04:27:38.000000000 +0200
+++ new/bluez-4.17/audio/audio.conf 2008-10-26 07:40:34.000000000 +0100
@@ -23,6 +23,9 @@
# Defaults to false
HFP=false
+# Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
+MaxConnections=1
+
# Just an example of potential config options for the other interfaces
#[A2DP]
#SBCSources=1
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/avdtp.c new/bluez-4.17/audio/avdtp.c
--- old/bluez-4.16/audio/avdtp.c 2008-10-19 23:46:12.000000000 +0200
+++ new/bluez-4.17/audio/avdtp.c 2008-10-26 07:40:34.000000000 +0100
@@ -600,8 +600,9 @@
g_free(stream);
}
-static gboolean stream_timeout(struct avdtp_stream *stream)
+static gboolean stream_timeout(gpointer user_data)
{
+ struct avdtp_stream *stream = user_data;
struct avdtp *session = stream->session;
avdtp_close(session, stream);
@@ -701,6 +702,10 @@
switch (state) {
case AVDTP_STATE_OPEN:
+ if (old_state > AVDTP_STATE_OPEN)
+ stream->idle_timer = g_timeout_add(STREAM_TIMEOUT,
+ stream_timeout,
+ stream);
break;
case AVDTP_STATE_STREAMING:
case AVDTP_STATE_CLOSING:
@@ -1957,9 +1962,6 @@
avdtp_sep_set_state(session, sep, AVDTP_STATE_OPEN);
- stream->idle_timer = g_timeout_add(STREAM_TIMEOUT,
- (GSourceFunc) stream_timeout, stream);
-
if (sep->cfm && sep->cfm->suspend)
sep->cfm->suspend(session, sep, stream, NULL, sep->user_data);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/headset.c new/bluez-4.17/audio/headset.c
--- old/bluez-4.16/audio/headset.c 2008-10-19 23:46:12.000000000 +0200
+++ new/bluez-4.17/audio/headset.c 2008-10-26 07:40:34.000000000 +0100
@@ -144,6 +144,7 @@
gboolean cli_active;
gboolean cme_enabled;
gboolean cwa_enabled;
+ gboolean pending_ring;
headset_state_t state;
struct pending_connect *pending;
@@ -457,6 +458,55 @@
return cb->id;
}
+static void send_foreach_headset(GSList *devices,
+ int (*cmp) (struct headset *hs),
+ char *format, ...)
+{
+ GSList *l;
+ va_list ap;
+
+ for (l = devices; l != NULL; l = l->next) {
+ struct audio_device *device = l->data;
+ struct headset *hs = device->headset;
+ int ret;
+
+ assert(hs != NULL);
+
+ if (cmp && cmp(hs) != 0)
+ continue;
+
+ va_start(ap, format);
+ ret = headset_send_valist(hs, format, ap);
+ if (ret < 0)
+ error("Failed to send to headset: %s (%d)",
+ strerror(-ret), -ret);
+ va_end(ap);
+ }
+}
+
+static int cli_cmp(struct headset *hs)
+{
+ if (!hs->hfp_active)
+ return -1;
+
+ if (hs->cli_active)
+ return 0;
+ else
+ return -1;
+}
+
+static gboolean ring_timer_cb(gpointer data)
+{
+ send_foreach_headset(active_devices, NULL, "\r\nRING\r\n");
+
+ if (ag.number)
+ send_foreach_headset(active_devices, cli_cmp,
+ "\r\n+CLIP:\"%s\",%d\r\n",
+ ag.number, ag.number_type);
+
+ return TRUE;
+}
+
static void sco_connect_cb(GIOChannel *chan, int err, const bdaddr_t *src,
const bdaddr_t *dst, gpointer user_data)
{
@@ -490,8 +540,7 @@
if (p->msg) {
DBusMessage *reply = dbus_message_new_method_return(p->msg);
- dbus_connection_send(dev->conn, reply, NULL);
- dbus_message_unref(reply);
+ g_dbus_send_message(dev->conn, reply);
}
pending_connect_finalize(dev);
@@ -499,6 +548,13 @@
fcntl(sk, F_SETFL, 0);
headset_set_state(dev, HEADSET_STATE_PLAYING);
+
+ if (hs->pending_ring) {
+ ring_timer_cb(NULL);
+ ag.ring_timer = g_timeout_add(RING_INTERVAL, ring_timer_cb,
+ NULL);
+ hs->pending_ring = FALSE;
+ }
}
static int sco_connect(struct audio_device *dev, headset_stream_cb_t cb,
@@ -538,33 +594,6 @@
return -1;
}
-static void send_foreach_headset(GSList *devices,
- int (*cmp)(struct headset *hs),
- char *format, ...)
-{
- GSList *l;
- va_list ap;
-
- for (l = devices; l != NULL; l = l->next) {
- struct audio_device *device = l->data;
- struct headset *hs = device->headset;
- int ret;
-
- assert(hs != NULL);
-
- if (cmp && cmp(hs) != 0)
- continue;
-
- va_start(ap, format);
- ret = headset_send_valist(hs, format, ap);
- if (ret < 0)
- error("Failed to send to headset: %s (%d)",
- strerror(-ret), -ret);
- va_end(ap);
- }
-}
-
-
static void hfp_slc_complete(struct audio_device *dev)
{
struct headset *hs = dev->headset;
@@ -580,8 +609,7 @@
if (p->target_state == HEADSET_STATE_CONNECTED) {
if (p->msg) {
DBusMessage *reply = dbus_message_new_method_return(p->msg);
- dbus_connection_send(dev->conn, reply, NULL);
- dbus_message_unref(reply);
+ g_dbus_send_message(dev->conn, reply);
}
pending_connect_finalize(dev);
return;
@@ -714,12 +742,11 @@
int telephony_answer_call_rsp(void *telephony_device, cme_error_t err)
{
- struct audio_device *device = telephony_device;
- struct headset *hs = device->headset;
-
- if (err != CME_ERROR_NONE)
- return telephony_generic_rsp(telephony_device, err);
+ return telephony_generic_rsp(telephony_device, err);
+}
+static int answer_call(struct audio_device *device, const char *buf)
+{
if (ag.ring_timer) {
g_source_remove(ag.ring_timer);
ag.ring_timer = 0;
@@ -730,16 +757,6 @@
ag.number = NULL;
}
- return headset_send(hs, "\r\nOK\r\n");
-}
-
-int telephony_anser_call_rsp(void *telephony_device, cme_error_t err)
-{
- return telephony_generic_rsp(telephony_device, err);
-}
-
-static int answer_call(struct audio_device *device, const char *buf)
-{
telephony_answer_call_req(device);
return 0;
@@ -758,6 +775,11 @@
AUDIO_HEADSET_INTERFACE, "CallTerminated",
DBUS_TYPE_INVALID);
+ return headset_send(hs, "\r\nOK\r\n");
+}
+
+static int terminate_call(struct audio_device *device, const char *buf)
+{
if (ag.number) {
g_free(ag.number);
ag.number = NULL;
@@ -768,11 +790,6 @@
ag.ring_timer = 0;
}
- return headset_send(hs, "\r\nOK\r\n");
-}
-
-static int terminate_call(struct audio_device *device, const char *buf)
-{
telephony_terminate_call_req(device);
return 0;
@@ -1197,8 +1214,7 @@
if (p->msg) {
DBusMessage *reply = dbus_message_new_method_return(p->msg);
- dbus_connection_send(dev->conn, reply, NULL);
- dbus_message_unref(reply);
+ g_dbus_send_message(dev->conn, reply);
}
pending_connect_finalize(dev);
@@ -1466,6 +1482,10 @@
return g_dbus_create_error(msg, ERROR_INTERFACE ".NotReady",
"Telephony subsystem not ready");
+ if (!manager_allow_headset_connection(&device->src))
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAllowed",
+ "Too many connected devices");
+
err = rfcomm_connect(device, NULL, NULL, NULL);
if (err < 0)
return g_dbus_create_error(msg, ERROR_INTERFACE
@@ -1479,29 +1499,6 @@
return NULL;
}
-static int cli_cmp(struct headset *hs)
-{
- if (!hs->hfp_active)
- return -1;
-
- if (hs->cli_active)
- return 0;
- else
- return -1;
-}
-
-static gboolean ring_timer_cb(gpointer data)
-{
- send_foreach_headset(active_devices, NULL, "\r\nRING\r\n");
-
- if (ag.number)
- send_foreach_headset(active_devices, cli_cmp,
- "\r\n+CLIP:\"%s\",%d\r\n",
- ag.number, ag.number_type);
-
- return TRUE;
-}
-
static DBusMessage *hs_ring(DBusConnection *conn, DBusMessage *msg,
void *data)
{
@@ -1585,6 +1582,10 @@
".NotConnected",
"Device not Connected");
case HEADSET_STATE_PLAY_IN_PROGRESS:
+ if (hs->pending && hs->pending->msg == NULL) {
+ hs->pending->msg = dbus_message_ref(msg);
+ return NULL;
+ }
return g_dbus_create_error(msg, ERROR_INTERFACE
".InProgress",
"Play in Progress");
@@ -2036,8 +2037,7 @@
&err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else {
if (strcmp(str, "PCM") == 0)
sco_hci = FALSE;
@@ -2169,6 +2169,13 @@
hs->sco = io;
+ if (hs->pending_ring) {
+ ring_timer_cb(NULL);
+ ag.ring_timer = g_timeout_add(RING_INTERVAL, ring_timer_cb,
+ NULL);
+ hs->pending_ring = FALSE;
+ }
+
return 0;
}
@@ -2413,9 +2420,16 @@
int telephony_incoming_call_ind(const char *number, int type)
{
+ struct audio_device *dev;
+ struct headset *hs;
+
if (!active_devices)
return -ENODEV;
+ /* Get the latest connected device */
+ dev = active_devices->data;
+ hs = dev->headset;
+
if (ag.ring_timer) {
debug("telephony_incoming_call_ind: already calling");
return -EBUSY;
@@ -2425,6 +2439,21 @@
ag.number = g_strdup(number);
ag.number_type = type;
+ if (ag.features & AG_FEATURE_INBAND_RINGTONE && hs->hfp_active &&
+ hs->state != HEADSET_STATE_PLAYING) {
+ if (hs->state == HEADSET_STATE_CONNECTED) {
+ int ret;
+
+ ret = sco_connect(dev, NULL, NULL, NULL);
+ if (ret < 0)
+ return ret;
+ }
+
+ hs->pending_ring = TRUE;
+
+ return 0;
+ }
+
ring_timer_cb(NULL);
ag.ring_timer = g_timeout_add(RING_INTERVAL, ring_timer_cb, NULL);
@@ -2433,14 +2462,23 @@
int telephony_calling_stopped_ind(void)
{
+ struct audio_device *dev;
+
if (!active_devices)
return -ENODEV;
- if (!ag.ring_timer)
+ /* In case SCO isn't fully up yet */
+ dev = active_devices->data;
+
+ if (!dev->headset->pending_ring && !ag.ring_timer)
return -EINVAL;
- g_source_remove(ag.ring_timer);
- ag.ring_timer = 0;
+ dev->headset->pending_ring = FALSE;
+
+ if (ag.ring_timer) {
+ g_source_remove(ag.ring_timer);
+ ag.ring_timer = 0;
+ }
return 0;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/manager.c new/bluez-4.17/audio/manager.c
--- old/bluez-4.16/audio/manager.c 2008-10-10 15:41:22.000000000 +0200
+++ new/bluez-4.17/audio/manager.c 2008-10-26 07:40:34.000000000 +0100
@@ -97,6 +97,7 @@
GIOChannel *hsp_hs_server;
};
+static int max_connected_headsets = 1;
static DBusConnection *connection = NULL;
static GKeyFile *config = NULL;
static GSList *adapters = NULL;
@@ -452,6 +453,11 @@
if (!device)
goto drop;
+ if (!manager_allow_headset_connection(&device->src)) {
+ debug("Refusing headset: too many existing connections");
+ goto drop;
+ }
+
if (!device->headset)
btd_device_add_uuid(device->btd_dev, remote_uuid);
@@ -506,8 +512,7 @@
&err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else
master = tmp;
}
@@ -591,8 +596,7 @@
&err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else
master = tmp;
}
@@ -914,11 +918,19 @@
&err);
if (err) {
debug("audio.conf: %s", err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else
enabled.hfp = b;
+ err = NULL;
+ i = g_key_file_get_integer(config, "Headset", "MaxConnected",
+ &err);
+ if (err) {
+ debug("audio.conf: %s", err->message);
+ g_clear_error(&err);
+ } else
+ max_connected_headsets = i;
+
proceed:
if (enabled.headset) {
telephony_init();
@@ -1062,3 +1074,28 @@
return dev;
}
+
+gboolean manager_allow_headset_connection(bdaddr_t *src)
+{
+ GSList *l;
+ int connected = 0;
+
+ for (l = devices; l != NULL; l = l->next) {
+ struct audio_device *dev = l->data;
+ struct headset *hs = dev->headset;
+
+ if (bacmp(&dev->src, src))
+ continue;
+
+ if (!hs)
+ continue;
+
+ if (headset_get_state(dev) > HEADSET_STATE_DISCONNECTED)
+ connected++;
+
+ if (connected >= max_connected_headsets)
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/manager.h new/bluez-4.17/audio/manager.h
--- old/bluez-4.16/audio/manager.h 2008-10-10 15:41:22.000000000 +0200
+++ new/bluez-4.17/audio/manager.h 2008-10-26 07:40:34.000000000 +0100
@@ -41,3 +41,5 @@
struct audio_device *manager_get_device(const bdaddr_t *src,
const bdaddr_t *dst);
+
+gboolean manager_allow_headset_connection(bdaddr_t *src);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/sink.c new/bluez-4.17/audio/sink.c
--- old/bluez-4.16/audio/sink.c 2008-10-16 23:11:39.000000000 +0200
+++ new/bluez-4.17/audio/sink.c 2008-10-26 07:40:34.000000000 +0100
@@ -100,8 +100,7 @@
sink->disconnect = NULL;
reply = dbus_message_new_method_return(p->msg);
- dbus_connection_send(p->conn, reply, NULL);
- dbus_message_unref(reply);
+ g_dbus_send_message(p->conn, reply);
pending_request_free(p);
}
@@ -168,8 +167,7 @@
DBusMessage *reply;
debug("Stream successfully created, after XCASE connect:connect");
reply = dbus_message_new_method_return(pending->msg);
- dbus_connection_send(pending->conn, reply, NULL);
- dbus_message_unref(reply);
+ g_dbus_send_message(pending->conn, reply);
} else {
debug("Stream setup failed, after XCASE connect:connect");
error_failed(pending->conn, pending->msg, "Stream setup failed");
@@ -194,8 +192,7 @@
DBusMessage *reply;
sink->connect = NULL;
reply = dbus_message_new_method_return(pending->msg);
- dbus_connection_send(pending->conn, reply, NULL);
- dbus_message_unref(reply);
+ g_dbus_send_message(pending->conn, reply);
pending_request_free(pending);
debug("Stream successfully created");
} else {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/audio/telephony-dummy.c new/bluez-4.17/audio/telephony-dummy.c
--- old/bluez-4.16/audio/telephony-dummy.c 2008-10-19 23:46:12.000000000 +0200
+++ new/bluez-4.17/audio/telephony-dummy.c 2008-10-26 07:40:34.000000000 +0100
@@ -64,6 +64,12 @@
{ NULL }
};
+static inline DBusMessage *invalid_args(DBusMessage *msg)
+{
+ return g_dbus_create_error(msg, "org.bluez.Error.InvalidArguments",
+ "Invalid arguments in method call");
+}
+
void telephony_device_connected(void *telephony_device)
{
debug("telephony-dummy: device %p connected", telephony_device);
@@ -198,7 +204,7 @@
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number,
DBUS_TYPE_INVALID))
- return NULL;
+ return invalid_args(msg);
debug("telephony-dummy: outgoing call to %s", number);
@@ -223,7 +229,7 @@
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number,
DBUS_TYPE_INVALID))
- return NULL;
+ return invalid_args(msg);
debug("telephony-dummy: incoming call to %s", number);
@@ -269,10 +275,10 @@
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_UINT32, &strength,
DBUS_TYPE_INVALID))
- return NULL;
+ return invalid_args(msg);
if (strength > 5)
- return NULL;
+ return invalid_args(msg);
telephony_update_indicator(dummy_indicators, "signal", strength);
@@ -288,10 +294,10 @@
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_UINT32, &level,
DBUS_TYPE_INVALID))
- return NULL;
+ return invalid_args(msg);
if (level > 5)
- return NULL;
+ return invalid_args(msg);
telephony_update_indicator(dummy_indicators, "battchg", level);
@@ -308,7 +314,7 @@
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_BOOLEAN, &roaming,
DBUS_TYPE_INVALID))
- return NULL;
+ return invalid_args(msg);
val = roaming ? EV_ROAM_ACTIVE : EV_ROAM_INACTIVE;
@@ -327,7 +333,7 @@
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_BOOLEAN, ®istration,
DBUS_TYPE_INVALID))
- return NULL;
+ return invalid_args(msg);
val = registration ? EV_SERVICE_PRESENT : EV_SERVICE_NONE;
@@ -346,7 +352,7 @@
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number,
DBUS_TYPE_INVALID))
- return NULL;
+ return invalid_args(msg);
g_free(subscriber_number);
subscriber_number = g_strdup(number);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/ChangeLog new/bluez-4.17/ChangeLog
--- old/bluez-4.16/ChangeLog 2008-10-21 17:28:33.000000000 +0200
+++ new/bluez-4.17/ChangeLog 2008-10-26 07:40:34.000000000 +0100
@@ -1,3 +1,9 @@
+ver 4.17:
+ Fix SBC encoder not writing last frame.
+ Fix missing timer for A2DP suspend.
+ Add more supported devices to hid2hci utility.
+ Add additional functionality to Handsfree support.
+
ver 4.16:
Fix wrong parameter usage of watch callbacks.
Fix parameters for callback upon path removal.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/configure new/bluez-4.17/configure
--- old/bluez-4.16/configure 2008-10-21 17:29:03.000000000 +0200
+++ new/bluez-4.17/configure 2008-10-26 07:41:11.000000000 +0100
@@ -2387,7 +2387,7 @@
# Define the identity of the package.
PACKAGE=bluez
- VERSION=4.16
+ VERSION=4.17
cat >>confdefs.h <<_ACEOF
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/configure.ac new/bluez-4.17/configure.ac
--- old/bluez-4.16/configure.ac 2008-10-21 17:28:33.000000000 +0200
+++ new/bluez-4.17/configure.ac 2008-10-26 07:40:34.000000000 +0100
@@ -1,7 +1,7 @@
AC_PREREQ(2.50)
AC_INIT()
-AM_INIT_AUTOMAKE(bluez, 4.16)
+AM_INIT_AUTOMAKE(bluez, 4.17)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/doc/device-api.txt new/bluez-4.17/doc/device-api.txt
--- old/bluez-4.16/doc/device-api.txt 2008-09-26 07:39:55.000000000 +0200
+++ new/bluez-4.17/doc/device-api.txt 2008-10-26 07:40:34.000000000 +0100
@@ -124,6 +124,11 @@
The Bluetooth remote name. This value can not be
changed. Use the Alias property instead.
+ string Icon [readonly]
+
+ Proposed icon name according to the freedesktop.org
+ icon naming specification.
+
uint32 Class [readonly]
The Bluetooth class of device of the remote device.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/network/manager.c new/bluez-4.17/network/manager.c
--- old/bluez-4.16/network/manager.c 2008-10-10 15:41:22.000000000 +0200
+++ new/bluez-4.17/network/manager.c 2008-10-26 07:40:34.000000000 +0100
@@ -95,7 +95,7 @@
if (!g_key_file_load_from_file(keyfile, file, 0, &err)) {
error("Parsing %s failed: %s", file, err->message);
- g_error_free(err);
+ g_clear_error(&err);
goto done;
}
@@ -103,8 +103,7 @@
"Disable", NULL, &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
} else {
int i;
for (i = 0; disabled[i] != NULL; i++) {
@@ -120,56 +119,49 @@
"DisableSecurity", &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
}
conf.panu_script = g_key_file_get_string(keyfile, "PANU Role",
"Script", &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
}
conf.gn_script = g_key_file_get_string(keyfile, "GN Role",
"Script", &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
}
conf.nap_script = g_key_file_get_string(keyfile, "NAP Role",
"Script", &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
}
conf.iface_prefix = g_key_file_get_string(keyfile, "PANU Role",
"Interface", &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
}
conf.gn_iface = g_key_file_get_string(keyfile, "GN Role",
"Interface", &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
}
conf.nap_iface = g_key_file_get_string(keyfile, "NAP Role",
"Interface", &err);
if (err) {
debug("%s: %s", file, err->message);
- g_error_free(err);
- err = NULL;
+ g_clear_error(&err);
}
done:
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/bluez-4.16/sbc/formats.h new/bluez-4.17/sbc/formats.h
--- old/bluez-4.16/sbc/formats.h 1970-01-01 01:00:00.000000000 +0100
+++ new/bluez-4.17/sbc/formats.h 2008-10-26 07:40:34.000000000 +0100
@@ -0,0 +1,55 @@
+/*
+ *
+ * Bluetooth low-complexity, subband codec (SBC) library
+ *
+ * Copyright (C) 2004-2008 Marcel Holtmann