Linux bluetooth development
 help / color / mirror / Atom feed
* Re: [PATCH 2/9] Add __btd_error_already_exists()
From: Gustavo F. Padovan @ 2010-11-09 20:30 UTC (permalink / raw)
  To: Jose Antonio Santos Cadenas; +Cc: linux-bluetooth
In-Reply-To: <AANLkTi=7Ou9+j1rEt=d6b9Fc2eHx4L=4aMvGD2OPYooY@mail.gmail.com>

HI Jose,

* Jose Antonio Santos Cadenas <santoscadenas@gmail.com> [2010-11-09 21:13:57 +0100]:

> Hi Gustavo,
> 
> 2010/11/9 Gustavo F. Padovan <padovan@profusion.mobi>:
> > Hi Jose,
> >
> > * Jose Antonio Santos Cadenas <santoscadenas@gmail.com> [2010-11-09 09:22:56 +0100]:
> >
> >> Hi,
> >>
> >> 2010/11/8 Gustavo F. Padovan <padovan@profusion.mobi>:
> >> > ---
> >> >  audio/gateway.c  |    4 +---
> >> >  audio/media.c    |    3 +--
> >> >  network/server.c |    2 +-
> >> >  serial/proxy.c   |    3 +--
> >> >  src/adapter.c    |    8 ++------
> >> >  src/device.c     |    4 +---
> >> >  src/error.c      |    7 +++++++
> >> >  src/error.h      |    1 +
> >> >  8 files changed, 15 insertions(+), 17 deletions(-)
> >> >
> >> > diff --git a/audio/gateway.c b/audio/gateway.c
> >> > index ab7d310..ae0ee75 100644
> >> > --- a/audio/gateway.c
> >> > +++ b/audio/gateway.c
> >> > @@ -488,9 +488,7 @@ static DBusMessage *register_agent(DBusConnection *conn,
> >> >        const char *path, *name;
> >> >
> >> >        if (gw->agent)
> >> > -               return g_dbus_create_error(msg,
> >> > -                                       ERROR_INTERFACE ".AlreadyExists",
> >> > -                                       "Agent already exists");
> >> > +               return __btd_error_already_exists(msg);
> >> >
> >> >        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
> >> >                                                DBUS_TYPE_INVALID))
> >> > diff --git a/audio/media.c b/audio/media.c
> >> > index 862cee6..8821ee1 100644
> >> > --- a/audio/media.c
> >> > +++ b/audio/media.c
> >> > @@ -318,8 +318,7 @@ static DBusMessage *register_endpoint(DBusConnection *conn, DBusMessage *msg,
> >> >        dbus_message_iter_next(&args);
> >> >
> >> >        if (media_adapter_find_endpoint(adapter, sender, path, NULL) != NULL)
> >> > -               return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
> >> > -                               "Endpoint already registered");
> >> > +               return __btd_error_already_exists(msg);
> >> >
> >> >        dbus_message_iter_recurse(&args, &props);
> >> >        if (dbus_message_iter_get_arg_type(&props) != DBUS_TYPE_DICT_ENTRY)
> >> > diff --git a/network/server.c b/network/server.c
> >> > index ce1fe5e..41c9ec3 100644
> >> > --- a/network/server.c
> >> > +++ b/network/server.c
> >> > @@ -605,7 +605,7 @@ static DBusMessage *register_server(DBusConnection *conn,
> >> >                return failed(msg, "Invalid UUID");
> >> >
> >> >        if (ns->record_id)
> >> > -               return failed(msg, "Already registered");
> >> > +               return __btd_error_already_exists(msg);
> >> >
> >> >        reply = dbus_message_new_method_return(msg);
> >> >        if (!reply)
> >> > diff --git a/serial/proxy.c b/serial/proxy.c
> >> > index 8e182b6..de82f9a 100644
> >> > --- a/serial/proxy.c
> >> > +++ b/serial/proxy.c
> >> > @@ -1058,8 +1058,7 @@ static DBusMessage *create_proxy(DBusConnection *conn,
> >> >        if (err == -EINVAL)
> >> >                return __btd_error_invalid_args(msg);
> >> >        else if (err == -EALREADY)
> >> > -               return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyExist",
> >> > -                                               "Proxy already exists");
> >> > +               return __btd_error_already_exists(msg);
> >> >        else if (err < 0)
> >> >                return g_dbus_create_error(msg, ERROR_INTERFACE "Failed",
> >> >                                "Proxy creation failed (%s)", strerror(-err));
> >> > diff --git a/src/adapter.c b/src/adapter.c
> >> > index cc51816..ffbc943 100644
> >> > --- a/src/adapter.c
> >> > +++ b/src/adapter.c
> >> > @@ -1742,9 +1742,7 @@ static DBusMessage *create_device(DBusConnection *conn,
> >> >                return __btd_error_invalid_args(msg);
> >> >
> >> >        if (adapter_find_device(adapter, address))
> >> > -               return g_dbus_create_error(msg,
> >> > -                               ERROR_INTERFACE ".AlreadyExists",
> >> > -                               "Device already exists");
> >> > +               return __btd_error_already_exists(msg);
> >> >
> >> >        DBG("%s", address);
> >> >
> >> > @@ -1906,9 +1904,7 @@ static DBusMessage *register_agent(DBusConnection *conn, DBusMessage *msg,
> >> >                return NULL;
> >> >
> >> >        if (adapter->agent)
> >> > -               return g_dbus_create_error(msg,
> >> > -                               ERROR_INTERFACE ".AlreadyExists",
> >> > -                               "Agent already exists");
> >> > +               return __btd_error_already_exists(msg);
> >> >
> >> >        cap = parse_io_capability(capability);
> >> >        if (cap == IO_CAPABILITY_INVALID)
> >> > diff --git a/src/device.c b/src/device.c
> >> > index ef1a910..6d110dc 100644
> >> > --- a/src/device.c
> >> > +++ b/src/device.c
> >> > @@ -1944,9 +1944,7 @@ DBusMessage *device_create_bonding(struct btd_device *device,
> >> >        str = textfile_caseget(filename, dstaddr);
> >> >        if (str) {
> >> >                free(str);
> >> > -               return g_dbus_create_error(msg,
> >> > -                               ERROR_INTERFACE ".AlreadyExists",
> >> > -                               "Bonding already exists");
> >> > +               return __btd_error_already_exists(msg);
> >> >        }
> >> >
> >> >        /* If our IO capability is NoInputNoOutput use medium security
> >> > diff --git a/src/error.c b/src/error.c
> >> > index a30c050..e268163 100644
> >> > --- a/src/error.c
> >> > +++ b/src/error.c
> >> > @@ -55,3 +55,10 @@ DBusMessage *__btd_error_invalid_args(DBusMessage *msg)
> >> >                                        ".InvalidArguments",
> >> >                                        "Invalid arguments in method call");
> >> >  }
> >> > +
> >> > +DBusMessage *__btd_error_already_exists(DBusMessage *msg)
> >>
> >> I also think that an additional message will be great for a better description.
> >
> > I'm not seeing any case when we need that for already_exists(). All
> > messages were saying the same thing. We don't need them.
> 
> 
> The messages are different for each case: (ie: "Bonding already
> exists", "Agent already exists", etc), they are nearly the same but
> they are a little bit more expressive. Also if we keep the additional
> message, we are following the same behaviour than in the other error
> funtions, this way this API is easy to use.

Yes, they are, but you always know the DBus funcion you called. If you
call RegisterAgent() and it replies .AlreadyExists you will know that is
a Agent that already exists, and not a Bonding, Device, etc. So no need
to explain the error in theses cases.


^ permalink raw reply

* Re: [PATCH 2/9] Add __btd_error_already_exists()
From: Jose Antonio Santos Cadenas @ 2010-11-09 20:13 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth
In-Reply-To: <20101109171317.GA29174@vigoh>

Hi Gustavo,

2010/11/9 Gustavo F. Padovan <padovan@profusion.mobi>:
> Hi Jose,
>
> * Jose Antonio Santos Cadenas <santoscadenas@gmail.com> [2010-11-09 09:22:56 +0100]:
>
>> Hi,
>>
>> 2010/11/8 Gustavo F. Padovan <padovan@profusion.mobi>:
>> > ---
>> >  audio/gateway.c  |    4 +---
>> >  audio/media.c    |    3 +--
>> >  network/server.c |    2 +-
>> >  serial/proxy.c   |    3 +--
>> >  src/adapter.c    |    8 ++------
>> >  src/device.c     |    4 +---
>> >  src/error.c      |    7 +++++++
>> >  src/error.h      |    1 +
>> >  8 files changed, 15 insertions(+), 17 deletions(-)
>> >
>> > diff --git a/audio/gateway.c b/audio/gateway.c
>> > index ab7d310..ae0ee75 100644
>> > --- a/audio/gateway.c
>> > +++ b/audio/gateway.c
>> > @@ -488,9 +488,7 @@ static DBusMessage *register_agent(DBusConnection *conn,
>> >        const char *path, *name;
>> >
>> >        if (gw->agent)
>> > -               return g_dbus_create_error(msg,
>> > -                                       ERROR_INTERFACE ".AlreadyExists",
>> > -                                       "Agent already exists");
>> > +               return __btd_error_already_exists(msg);
>> >
>> >        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
>> >                                                DBUS_TYPE_INVALID))
>> > diff --git a/audio/media.c b/audio/media.c
>> > index 862cee6..8821ee1 100644
>> > --- a/audio/media.c
>> > +++ b/audio/media.c
>> > @@ -318,8 +318,7 @@ static DBusMessage *register_endpoint(DBusConnection *conn, DBusMessage *msg,
>> >        dbus_message_iter_next(&args);
>> >
>> >        if (media_adapter_find_endpoint(adapter, sender, path, NULL) != NULL)
>> > -               return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
>> > -                               "Endpoint already registered");
>> > +               return __btd_error_already_exists(msg);
>> >
>> >        dbus_message_iter_recurse(&args, &props);
>> >        if (dbus_message_iter_get_arg_type(&props) != DBUS_TYPE_DICT_ENTRY)
>> > diff --git a/network/server.c b/network/server.c
>> > index ce1fe5e..41c9ec3 100644
>> > --- a/network/server.c
>> > +++ b/network/server.c
>> > @@ -605,7 +605,7 @@ static DBusMessage *register_server(DBusConnection *conn,
>> >                return failed(msg, "Invalid UUID");
>> >
>> >        if (ns->record_id)
>> > -               return failed(msg, "Already registered");
>> > +               return __btd_error_already_exists(msg);
>> >
>> >        reply = dbus_message_new_method_return(msg);
>> >        if (!reply)
>> > diff --git a/serial/proxy.c b/serial/proxy.c
>> > index 8e182b6..de82f9a 100644
>> > --- a/serial/proxy.c
>> > +++ b/serial/proxy.c
>> > @@ -1058,8 +1058,7 @@ static DBusMessage *create_proxy(DBusConnection *conn,
>> >        if (err == -EINVAL)
>> >                return __btd_error_invalid_args(msg);
>> >        else if (err == -EALREADY)
>> > -               return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyExist",
>> > -                                               "Proxy already exists");
>> > +               return __btd_error_already_exists(msg);
>> >        else if (err < 0)
>> >                return g_dbus_create_error(msg, ERROR_INTERFACE "Failed",
>> >                                "Proxy creation failed (%s)", strerror(-err));
>> > diff --git a/src/adapter.c b/src/adapter.c
>> > index cc51816..ffbc943 100644
>> > --- a/src/adapter.c
>> > +++ b/src/adapter.c
>> > @@ -1742,9 +1742,7 @@ static DBusMessage *create_device(DBusConnection *conn,
>> >                return __btd_error_invalid_args(msg);
>> >
>> >        if (adapter_find_device(adapter, address))
>> > -               return g_dbus_create_error(msg,
>> > -                               ERROR_INTERFACE ".AlreadyExists",
>> > -                               "Device already exists");
>> > +               return __btd_error_already_exists(msg);
>> >
>> >        DBG("%s", address);
>> >
>> > @@ -1906,9 +1904,7 @@ static DBusMessage *register_agent(DBusConnection *conn, DBusMessage *msg,
>> >                return NULL;
>> >
>> >        if (adapter->agent)
>> > -               return g_dbus_create_error(msg,
>> > -                               ERROR_INTERFACE ".AlreadyExists",
>> > -                               "Agent already exists");
>> > +               return __btd_error_already_exists(msg);
>> >
>> >        cap = parse_io_capability(capability);
>> >        if (cap == IO_CAPABILITY_INVALID)
>> > diff --git a/src/device.c b/src/device.c
>> > index ef1a910..6d110dc 100644
>> > --- a/src/device.c
>> > +++ b/src/device.c
>> > @@ -1944,9 +1944,7 @@ DBusMessage *device_create_bonding(struct btd_device *device,
>> >        str = textfile_caseget(filename, dstaddr);
>> >        if (str) {
>> >                free(str);
>> > -               return g_dbus_create_error(msg,
>> > -                               ERROR_INTERFACE ".AlreadyExists",
>> > -                               "Bonding already exists");
>> > +               return __btd_error_already_exists(msg);
>> >        }
>> >
>> >        /* If our IO capability is NoInputNoOutput use medium security
>> > diff --git a/src/error.c b/src/error.c
>> > index a30c050..e268163 100644
>> > --- a/src/error.c
>> > +++ b/src/error.c
>> > @@ -55,3 +55,10 @@ DBusMessage *__btd_error_invalid_args(DBusMessage *msg)
>> >                                        ".InvalidArguments",
>> >                                        "Invalid arguments in method call");
>> >  }
>> > +
>> > +DBusMessage *__btd_error_already_exists(DBusMessage *msg)
>>
>> I also think that an additional message will be great for a better description.
>
> I'm not seeing any case when we need that for already_exists(). All
> messages were saying the same thing. We don't need them.


The messages are different for each case: (ie: "Bonding already
exists", "Agent already exists", etc), they are nearly the same but
they are a little bit more expressive. Also if we keep the additional
message, we are following the same behaviour than in the other error
funtions, this way this API is easy to use.

Regards.

>
> --
> Gustavo F. Padovan
> ProFUSION embedded systems - http://profusion.mobi
>

^ permalink raw reply

* [PATCH] hcitool: Bring up device before sending commands over socket
From: Anderson Lizardo @ 2010-11-09 18:29 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Anderson Lizardo

The Texas specific initialization code sends HCI commands over the
bluetooth socket, but does not bring up the device. This gives these
errors when running "hciattach /dev/ttyUSB0 texas":

Found a Texas Instruments' chip!
Firmware file : /lib/firmware/TIInit_XX.Y.ZZ.bts
Loaded BTS script version 1
Cannot send hci command to socket: Network is down
Can't initialize device: Network is down
---
 tools/hciattach_ti.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/tools/hciattach_ti.c b/tools/hciattach_ti.c
index 7627bc1..e107a65 100644
--- a/tools/hciattach_ti.c
+++ b/tools/hciattach_ti.c
@@ -514,6 +514,13 @@ int texas_post(int fd, struct termios *ti)
 		return -1;
 	}
 
+	if (ioctl(dd, HCIDEVUP, dev_id) < 0 && errno != EALREADY) {
+		fprintf(stderr, "Can't init device hci%d: %s (%d)", dev_id,
+							strerror(errno), errno);
+		hci_close_dev(dd);
+		return -1;
+	}
+
 	ret = brf_do_script(dd, ti, NULL);
 
 	hci_close_dev(dd);
-- 
1.7.0.4


^ permalink raw reply related

* Re: [PATCH 2/9] Add __btd_error_already_exists()
From: Gustavo F. Padovan @ 2010-11-09 17:13 UTC (permalink / raw)
  To: Jose Antonio Santos Cadenas; +Cc: linux-bluetooth
In-Reply-To: <AANLkTinK_6hrW+FJMdfoUPuq+V5EcqaXVQNd0mWu4vZR@mail.gmail.com>

Hi Jose,

* Jose Antonio Santos Cadenas <santoscadenas@gmail.com> [2010-11-09 09:22:56 +0100]:

> Hi,
> 
> 2010/11/8 Gustavo F. Padovan <padovan@profusion.mobi>:
> > ---
> >  audio/gateway.c  |    4 +---
> >  audio/media.c    |    3 +--
> >  network/server.c |    2 +-
> >  serial/proxy.c   |    3 +--
> >  src/adapter.c    |    8 ++------
> >  src/device.c     |    4 +---
> >  src/error.c      |    7 +++++++
> >  src/error.h      |    1 +
> >  8 files changed, 15 insertions(+), 17 deletions(-)
> >
> > diff --git a/audio/gateway.c b/audio/gateway.c
> > index ab7d310..ae0ee75 100644
> > --- a/audio/gateway.c
> > +++ b/audio/gateway.c
> > @@ -488,9 +488,7 @@ static DBusMessage *register_agent(DBusConnection *conn,
> >        const char *path, *name;
> >
> >        if (gw->agent)
> > -               return g_dbus_create_error(msg,
> > -                                       ERROR_INTERFACE ".AlreadyExists",
> > -                                       "Agent already exists");
> > +               return __btd_error_already_exists(msg);
> >
> >        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
> >                                                DBUS_TYPE_INVALID))
> > diff --git a/audio/media.c b/audio/media.c
> > index 862cee6..8821ee1 100644
> > --- a/audio/media.c
> > +++ b/audio/media.c
> > @@ -318,8 +318,7 @@ static DBusMessage *register_endpoint(DBusConnection *conn, DBusMessage *msg,
> >        dbus_message_iter_next(&args);
> >
> >        if (media_adapter_find_endpoint(adapter, sender, path, NULL) != NULL)
> > -               return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
> > -                               "Endpoint already registered");
> > +               return __btd_error_already_exists(msg);
> >
> >        dbus_message_iter_recurse(&args, &props);
> >        if (dbus_message_iter_get_arg_type(&props) != DBUS_TYPE_DICT_ENTRY)
> > diff --git a/network/server.c b/network/server.c
> > index ce1fe5e..41c9ec3 100644
> > --- a/network/server.c
> > +++ b/network/server.c
> > @@ -605,7 +605,7 @@ static DBusMessage *register_server(DBusConnection *conn,
> >                return failed(msg, "Invalid UUID");
> >
> >        if (ns->record_id)
> > -               return failed(msg, "Already registered");
> > +               return __btd_error_already_exists(msg);
> >
> >        reply = dbus_message_new_method_return(msg);
> >        if (!reply)
> > diff --git a/serial/proxy.c b/serial/proxy.c
> > index 8e182b6..de82f9a 100644
> > --- a/serial/proxy.c
> > +++ b/serial/proxy.c
> > @@ -1058,8 +1058,7 @@ static DBusMessage *create_proxy(DBusConnection *conn,
> >        if (err == -EINVAL)
> >                return __btd_error_invalid_args(msg);
> >        else if (err == -EALREADY)
> > -               return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyExist",
> > -                                               "Proxy already exists");
> > +               return __btd_error_already_exists(msg);
> >        else if (err < 0)
> >                return g_dbus_create_error(msg, ERROR_INTERFACE "Failed",
> >                                "Proxy creation failed (%s)", strerror(-err));
> > diff --git a/src/adapter.c b/src/adapter.c
> > index cc51816..ffbc943 100644
> > --- a/src/adapter.c
> > +++ b/src/adapter.c
> > @@ -1742,9 +1742,7 @@ static DBusMessage *create_device(DBusConnection *conn,
> >                return __btd_error_invalid_args(msg);
> >
> >        if (adapter_find_device(adapter, address))
> > -               return g_dbus_create_error(msg,
> > -                               ERROR_INTERFACE ".AlreadyExists",
> > -                               "Device already exists");
> > +               return __btd_error_already_exists(msg);
> >
> >        DBG("%s", address);
> >
> > @@ -1906,9 +1904,7 @@ static DBusMessage *register_agent(DBusConnection *conn, DBusMessage *msg,
> >                return NULL;
> >
> >        if (adapter->agent)
> > -               return g_dbus_create_error(msg,
> > -                               ERROR_INTERFACE ".AlreadyExists",
> > -                               "Agent already exists");
> > +               return __btd_error_already_exists(msg);
> >
> >        cap = parse_io_capability(capability);
> >        if (cap == IO_CAPABILITY_INVALID)
> > diff --git a/src/device.c b/src/device.c
> > index ef1a910..6d110dc 100644
> > --- a/src/device.c
> > +++ b/src/device.c
> > @@ -1944,9 +1944,7 @@ DBusMessage *device_create_bonding(struct btd_device *device,
> >        str = textfile_caseget(filename, dstaddr);
> >        if (str) {
> >                free(str);
> > -               return g_dbus_create_error(msg,
> > -                               ERROR_INTERFACE ".AlreadyExists",
> > -                               "Bonding already exists");
> > +               return __btd_error_already_exists(msg);
> >        }
> >
> >        /* If our IO capability is NoInputNoOutput use medium security
> > diff --git a/src/error.c b/src/error.c
> > index a30c050..e268163 100644
> > --- a/src/error.c
> > +++ b/src/error.c
> > @@ -55,3 +55,10 @@ DBusMessage *__btd_error_invalid_args(DBusMessage *msg)
> >                                        ".InvalidArguments",
> >                                        "Invalid arguments in method call");
> >  }
> > +
> > +DBusMessage *__btd_error_already_exists(DBusMessage *msg)
> 
> I also think that an additional message will be great for a better description.

I'm not seeing any case when we need that for already_exists(). All
messages were saying the same thing. We don't need them.

-- 
Gustavo F. Padovan
ProFUSION embedded systems - http://profusion.mobi

^ permalink raw reply

* Re: [RFC] Bluetooth Low energy support
From: Anderson Lizardo @ 2010-11-09 16:25 UTC (permalink / raw)
  To: Ville Tervo; +Cc: linux-bluetooth
In-Reply-To: <1287406976-13463-1-git-send-email-ville.tervo@nokia.com>

[-- Attachment #1: Type: text/plain, Size: 758 bytes --]

Hi Ville,

On Mon, Oct 18, 2010 at 9:02 AM, Ville Tervo <ville.tervo@nokia.com> wrote:
> Hi,
>
> Here is v2 of bluetooth low energy patch set.
> Changes from previous version.

While doing tests with your most recent trees (using devel HW from
TI), I'm getting consistent panic on the following test:

(dev1) hciconfig hciX leadv
(dev2) hcitool -i hciX lecc <dev2_addr>

I attached two logs. One is from dev1 machine (which has the oops),
the other is from the dev2 machine.

Hope that helps debugging the problem. I'm on IRC if you need any clarification.

For reference, I'm using the tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/vtervo/bluetooth-le-2.6.git
(branch master)

Regards,
-- 
Anderson Lizardo
OpenBossa Labs - INdT
Manaus - Brazil

[-- Attachment #2: dev1_leadv.txt --]
[-- Type: text/plain, Size: 7702 bytes --]

[   91.586913] hci_sock_create: sock d74c5300
[   91.588455] hci_sock_ioctl: cmd 800448d2 arg b8641008
[   91.589757] hci_sock_ioctl: cmd 800448d3 arg bffdd9fc
[   91.591167] hci_dev_get: 0
[   91.592004] hci_sock_release: sock d74c5300 sk d6a7c400
[   92.366309] hci_sock_create: sock d74c5300
[   92.367636] hci_sock_ioctl: cmd 800448d2 arg b98dd008
[   92.369340] hci_sock_ioctl: cmd 800448d3 arg bfd5fa9c
[   92.370705] hci_dev_get: 0
[   92.371570] hci_sock_release: sock d74c5300 sk d69f1400
[   93.120496] hci_sock_create: sock d74c5300
[   93.121813] hci_sock_ioctl: cmd 800448d2 arg b94f8008
[   93.123214] hci_sock_ioctl: cmd 800448d3 arg bfcd86ec
[   93.124827] hci_dev_get: 0
[   93.125658] hci_sock_release: sock d74c5300 sk d6a7ce00
[   94.003517] hci_sock_create: sock d74c5180
[   94.005313] hci_sock_ioctl: cmd 800448d3 arg b785c260
[   94.006913] hci_dev_get: 0
[   94.007821] hci_sock_create: sock d74c5600
[   94.009439] hci_sock_bind: sock d74c5600 sk d6a4d200
[   94.011046] hci_dev_get: 0
[   94.011916] hci_sock_setsockopt: sk d6a4d200, opt 2
[   94.013664] hci_sock_sendmsg: sock d74c5600 sk d6a4d200
[   94.015381] hci_cmd_task: hci0 cmd 1
[   94.016449] hci_send_frame: hci0 type 1 len 4
[   94.017838] hci_send_to_sock: hdev d6a65000 len 4
[   94.019463] hci_uart_send_frame: hci0: type 1 len 4
[   94.020895] ll_enqueue: hu d6bd1380 skb d6b88a80
[   94.022279] ll_enqueue: device awake, sending normally
[   94.023872] hci_uart_tx_wakeup:
[   94.025984] hci_uart_tty_wakeup:
[   94.027265] hci_uart_tx_wakeup:
[   94.032150] ll_recv: hu d6bd1380 count 7 rx_state 0 rx_count 0
[   94.033936] ll_recv: Event packet
[   94.034810] ll_recv: Event header: evt 0x0e plen 4
[   94.035943] ll_check_data_len: len 4 room 1078
[   94.037536] ll_recv: Complete data
[   94.039898] hci_rx_task: hci0
[   94.040708] hci_send_to_sock: hdev d6a65000 len 6
[   94.041920] hci_cmd_complete_evt: hci0 opcode 0x200a
[   94.043381] hci_sock_recvmsg: sock d74c5600, sk d6a4d200
[   94.045647] hci_sock_setsockopt: sk d6a4d200, opt 2
[   94.047169] hci_sock_release: sock d74c5600 sk d6a4d200
[   94.048850] hci_sock_release: sock d74c5180 sk d6a4d000
[   94.948111] ll_recv: hu d6bd1380 count 6 rx_state 0 rx_count 0
[   94.949507] ll_recv: Event packet
[   94.950290] ll_recv: Event header: evt 0x3e plen 19
[   94.951415] ll_check_data_len: len 19 room 1078
[   94.952813] ll_recv: hu d6bd1380 count 16 rx_state 4 rx_count 16
[   94.954252] ll_recv: Complete data
[   94.955388] hci_rx_task: hci0
[   94.956400] hci_le_conn_complete_evt: hci0 status 0
[   94.958075] hci_conn_add: hci0 dst 00:17:E7:90:08:07
[   94.959841] hci_conn_init_sysfs: conn d6bf3800
[   94.961320] hci_conn_add_sysfs: conn d6bf3800
[   94.962665] l2cap_connect_cfm: hcon d6bf3800 bdaddr 00:17:E7:90:08:07 status 0
[   94.964922] l2cap_conn_add: hcon d6bf3800 conn d787dc80
[   94.966370] l2cap_conn_ready: conn d787dc80
[   94.974706] l2cap_le_conn_ready:
[   94.977693] BUG: unable to handle kernel NULL pointer dereference at 00000034
[   94.979982] IP: [<c0132f73>] __ticket_spin_unlock+0x3/0x10
[   94.981627] *pdpt = 0000000014867001 *pde = 0000000000000000
[   94.981627] Oops: 0002 [#1] SMP
[   94.981627] last sysfs file: /sys/module/bluetooth/initstate
[   94.981627] Modules linked in: hci_uart l2cap bluetooth ftdi_sio usbserial uhci_hcd usbcore 8139too 8139cp mii i2c_piix4
[   94.981627]
[   94.981627] Pid: 3, comm: ksoftirqd/0 Not tainted 2.6.36-rc7+ #1 /Bochs
[   94.981627] EIP: 0060:[<c0132f73>] EFLAGS: 00010246 CPU: 0
[   94.981627] EIP is at __ticket_spin_unlock+0x3/0x10
[   94.981627] EAX: 00000034 EBX: d787dc80 ECX: c071fc34 EDX: 00000000
[   94.981627] ESI: d787dce0 EDI: 00000034 EBP: d785be04 ESP: d785be04
[   94.981627]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
[   94.981627] Process ksoftirqd/0 (pid: 3, ti=d785a000 task=d7851960 task.ti=d785a000)
[   94.981627] Stack:
[   94.981627]  d785be48 d921e07c d9224e75 d9224089 d787dc80 d9187992 00000000 d4ba8810
[   94.981627] <0> d785be34 c0169200 d6bceae0 00000000 d785be40 c016927a d6bf3800 00000000
[   94.981627] <0> d4ba8810 d785be58 d917cacd d6bf3800 d4ba880b d785bee0 d9180496 d9184e24
[   94.981627] Call Trace:
[   94.981627]  [<d921e07c>] ? l2cap_connect_cfm+0x25c/0x430 [l2cap]
[   94.981627]  [<c0169200>] ? queue_work_on+0x0/0x40
[   94.981627]  [<c016927a>] ? queue_work+0x1a/0x20
[   94.981627]  [<d917cacd>] ? hci_proto_connect_cfm+0x2d/0x60 [bluetooth]
[   94.981627]  [<d9180496>] ? hci_event_packet+0x15b6/0x22e0 [bluetooth]
[   94.981627]  [<c014c8f8>] ? dequeue_entity+0x1c8/0x210
[   94.981627]  [<c0132fc8>] ? default_spin_lock_flags+0x8/0x10
[   94.981627]  [<c055958f>] ? _raw_spin_lock_irqsave+0x2f/0x50
[   94.981627]  [<c048d810>] ? skb_dequeue+0x50/0x70
[   94.981627]  [<d9177e2b>] ? hci_rx_task+0x28b/0x470 [bluetooth]
[   94.981627]  [<c010851a>] ? __switch_to+0xba/0x170
[   94.981627]  [<c0157887>] ? tasklet_action+0xa7/0xb0
[   94.981627]  [<c01585cc>] ? __do_softirq+0x9c/0x1b0
[   94.981627]  [<c0158725>] ? do_softirq+0x45/0x50
[   94.981627]  [<c015879e>] ? run_ksoftirqd+0x6e/0x100
[   94.981627]  [<c0158730>] ? run_ksoftirqd+0x0/0x100
[   94.981627]  [<c016f3b4>] ? kthread+0x74/0x80
[   94.981627]  [<c016f340>] ? kthread+0x0/0x80
[   94.981627]  [<c010a186>] ? kernel_thread_helper+0x6/0x10
[   94.981627] Code: c3 8d b4 26 00 00 00 00 55 89 c2 89 e5 0f b7 02 38 e0 8d 88 00 01 00 00 75 05 3e 66 0f b1 0a 0f 94 c1 0f b6 c1 5d c3 90 55 89 e5 <3e> fe 00 5d c3 90 8d b4 26 00 00 00 00 55 8b 10 89 e5 5d 89 d0
[   94.981627] EIP: [<c0132f73>] __ticket_spin_unlock+0x3/0x10 SS:ESP 0068:d785be04
[   94.981627] CR2: 0000000000000034
[   95.085803] ---[ end trace b3d0bafeb61a44e4 ]---
[   95.087338] Kernel panic - not syncing: Fatal exception in interrupt
[   95.089445] Pid: 3, comm: ksoftirqd/0 Tainted: G      D     2.6.36-rc7+ #1
[   95.092081] Call Trace:
[   95.092988]  [<c0556c67>] ? printk+0x1d/0x26
[   95.094649]  [<c0556b48>] panic+0x5c/0x15e
[   95.096421]  [<c055aeed>] oops_end+0xcd/0xd0
[   95.098281]  [<c0134106>] no_context+0xc6/0x1a0
[   95.100136]  [<c013421c>] __bad_area_nosemaphore+0x3c/0x160
[   95.102325]  [<c0158869>] ? irq_exit+0x39/0x70
[   95.104167]  [<c0560485>] ? do_IRQ+0x55/0xc0
[   95.105905]  [<c0158869>] ? irq_exit+0x39/0x70
[   95.107681]  [<c0134357>] bad_area_nosemaphore+0x17/0x20
[   95.109690]  [<c055d301>] do_page_fault+0x3b1/0x470
[   95.111695]  [<c0152cb1>] ? vprintk+0x191/0x3f0
[   95.113542]  [<c055cf50>] ? do_page_fault+0x0/0x470
[   95.115464]  [<c055a327>] error_code+0x67/0x70
[   95.117187]  [<c0132f73>] ? __ticket_spin_unlock+0x3/0x10
[   95.119432]  [<d921e07c>] l2cap_connect_cfm+0x25c/0x430 [l2cap]
[   95.121826]  [<c0169200>] ? queue_work_on+0x0/0x40
[   95.123681]  [<c016927a>] ? queue_work+0x1a/0x20
[   95.125357]  [<d917cacd>] hci_proto_connect_cfm+0x2d/0x60 [bluetooth]
[   95.127881]  [<d9180496>] hci_event_packet+0x15b6/0x22e0 [bluetooth]
[   95.130168]  [<c014c8f8>] ? dequeue_entity+0x1c8/0x210
[   95.132314]  [<c0132fc8>] ? default_spin_lock_flags+0x8/0x10
[   95.134434]  [<c055958f>] ? _raw_spin_lock_irqsave+0x2f/0x50
[   95.136702]  [<c048d810>] ? skb_dequeue+0x50/0x70
[   95.138576]  [<d9177e2b>] hci_rx_task+0x28b/0x470 [bluetooth]
[   95.140879]  [<c010851a>] ? __switch_to+0xba/0x170
[   95.142660]  [<c0157887>] tasklet_action+0xa7/0xb0
[   95.144594]  [<c01585cc>] __do_softirq+0x9c/0x1b0
[   95.146336]  [<c0158725>] do_softirq+0x45/0x50
[   95.148053]  [<c015879e>] run_ksoftirqd+0x6e/0x100
[   95.149865]  [<c0158730>] ? run_ksoftirqd+0x0/0x100
[   95.151612]  [<c016f3b4>] kthread+0x74/0x80
[   95.152940]  [<c016f340>] ? kthread+0x0/0x80
[   95.154409]  [<c010a186>] kernel_thread_helper+0x6/0x10


[-- Attachment #3: dev2_lecc.txt --]
[-- Type: text/plain, Size: 2963 bytes --]

[   95.164174] hci_sock_create: sock d7658480
[   95.165661] hci_sock_ioctl: cmd 800448d2 arg b8548008
[   95.167174] hci_sock_ioctl: cmd 800448d3 arg bf96b090
[   95.169134] hci_dev_get: 0
[   95.170087] hci_sock_release: sock d7658480 sk d494fc00
[   95.171717] hci_sock_create: sock d7658480
[   95.173511] hci_sock_bind: sock d7658480 sk d494fc00
[   95.175036] hci_dev_get: 0
[   95.175916] hci_sock_setsockopt: sk d494fc00, opt 2
[   95.177807] hci_sock_sendmsg: sock d7658480 sk d494fc00
[   95.179474] hci_cmd_task: hci0 cmd 1
[   95.180743] hci_send_frame: hci0 type 1 len 28
[   95.182061] hci_send_to_sock: hdev d4081000 len 28
[   95.183559] hci_uart_send_frame: hci0: type 1 len 28
[   95.185083] ll_enqueue: hu d6b46980 skb d69d2240
[   95.186487] ll_enqueue: device awake, sending normally
[   95.187982] hci_uart_tx_wakeup:
[   95.190964] hci_uart_tty_wakeup:
[   95.191971] hci_uart_tx_wakeup:
[   95.196115] ll_recv: hu d6b46980 count 7 rx_state 0 rx_count 0
[   95.197711] ll_recv: Event packet
[   95.198632] ll_recv: Event header: evt 0x0f plen 4
[   95.200003] ll_check_data_len: len 4 room 1078
[   95.201255] ll_recv: Complete data
[   95.202088] hci_rx_task: hci0
[   95.202809] hci_send_to_sock: hdev d4081000 len 6
[   95.204163] hci_cs_le_create_conn: hci0 status 0x0
[   95.205293] hci_sent_cmd_data: hci0 opcode 0x200d
[   95.206376] hci_cs_le_create_conn: hci0 bdaddr 00:17:E7:90:08:6D conn (null)
[   95.208300] hci_conn_add: hci0 dst 00:17:E7:90:08:6D
[   95.210251] hci_conn_init_sysfs: conn d7a59800
[   95.211983] hci_sock_recvmsg: sock d7658480, sk d494fc00
[   95.214411] ll_recv: hu d6b46980 count 22 rx_state 0 rx_count 0
[   95.216160] ll_recv: Event packet
[   95.216996] ll_recv: Event header: evt 0x3e plen 19
[   95.221649] ll_check_data_len: len 19 room 1078
[   95.223225] ll_recv: Complete data
[   95.224721] hci_rx_task: hci0
[   95.225578] hci_send_to_sock: hdev d4081000 len 21
[   95.226983] hci_le_conn_complete_evt: hci0 status 0
[   95.228446] hci_conn_add_sysfs: conn d7a59800
[   95.229613] l2cap_connect_cfm: hcon d7a59800 bdaddr 00:17:E7:90:08:6D status 0
[   95.231870] l2cap_conn_add: hcon d7a59800 conn d791d300
[   95.237446] l2cap_conn_ready: conn d791d300
[   95.238927] hci_sock_recvmsg: sock d7658480, sk d494fc00
[   95.242764] hci_sock_setsockopt: sk d494fc00, opt 2
[   95.244603] hci_sock_release: sock d7658480 sk d494fc00
[   95.304073] ll_recv: hu d6b46980 count 7 rx_state 0 rx_count 0
[   95.305472] ll_recv: Event packet
[   95.306409] ll_recv: Event header: evt 0x05 plen 4
[   95.307517] ll_check_data_len: len 4 room 1078
[   95.308941] ll_recv: Complete data
[   95.311881] hci_rx_task: hci0
[   95.316296] hci_disconn_complete_evt: hci0 status 0
[   95.317676] l2cap_disconn_cfm: hcon d7a59800 reason 62
[   95.320974] l2cap_conn_del: hcon d7a59800 conn d791d300, err 38
[   95.324343] hci_conn_del: hci0 conn d7a59800 handle 1025
[   95.327635] hci_conn_del_sysfs: conn d7a59800

^ permalink raw reply

* Re: [PATCH 2/9] Add __btd_error_already_exists()
From: Jose Antonio Santos Cadenas @ 2010-11-09  8:22 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth
In-Reply-To: <1289197787-16715-3-git-send-email-padovan@profusion.mobi>

Hi,

2010/11/8 Gustavo F. Padovan <padovan@profusion.mobi>:
> ---
>  audio/gateway.c  |    4 +---
>  audio/media.c    |    3 +--
>  network/server.c |    2 +-
>  serial/proxy.c   |    3 +--
>  src/adapter.c    |    8 ++------
>  src/device.c     |    4 +---
>  src/error.c      |    7 +++++++
>  src/error.h      |    1 +
>  8 files changed, 15 insertions(+), 17 deletions(-)
>
> diff --git a/audio/gateway.c b/audio/gateway.c
> index ab7d310..ae0ee75 100644
> --- a/audio/gateway.c
> +++ b/audio/gateway.c
> @@ -488,9 +488,7 @@ static DBusMessage *register_agent(DBusConnection *conn,
>        const char *path, *name;
>
>        if (gw->agent)
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".AlreadyExists",
> -                                       "Agent already exists");
> +               return __btd_error_already_exists(msg);
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
>                                                DBUS_TYPE_INVALID))
> diff --git a/audio/media.c b/audio/media.c
> index 862cee6..8821ee1 100644
> --- a/audio/media.c
> +++ b/audio/media.c
> @@ -318,8 +318,7 @@ static DBusMessage *register_endpoint(DBusConnection *conn, DBusMessage *msg,
>        dbus_message_iter_next(&args);
>
>        if (media_adapter_find_endpoint(adapter, sender, path, NULL) != NULL)
> -               return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
> -                               "Endpoint already registered");
> +               return __btd_error_already_exists(msg);
>
>        dbus_message_iter_recurse(&args, &props);
>        if (dbus_message_iter_get_arg_type(&props) != DBUS_TYPE_DICT_ENTRY)
> diff --git a/network/server.c b/network/server.c
> index ce1fe5e..41c9ec3 100644
> --- a/network/server.c
> +++ b/network/server.c
> @@ -605,7 +605,7 @@ static DBusMessage *register_server(DBusConnection *conn,
>                return failed(msg, "Invalid UUID");
>
>        if (ns->record_id)
> -               return failed(msg, "Already registered");
> +               return __btd_error_already_exists(msg);
>
>        reply = dbus_message_new_method_return(msg);
>        if (!reply)
> diff --git a/serial/proxy.c b/serial/proxy.c
> index 8e182b6..de82f9a 100644
> --- a/serial/proxy.c
> +++ b/serial/proxy.c
> @@ -1058,8 +1058,7 @@ static DBusMessage *create_proxy(DBusConnection *conn,
>        if (err == -EINVAL)
>                return __btd_error_invalid_args(msg);
>        else if (err == -EALREADY)
> -               return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyExist",
> -                                               "Proxy already exists");
> +               return __btd_error_already_exists(msg);
>        else if (err < 0)
>                return g_dbus_create_error(msg, ERROR_INTERFACE "Failed",
>                                "Proxy creation failed (%s)", strerror(-err));
> diff --git a/src/adapter.c b/src/adapter.c
> index cc51816..ffbc943 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -1742,9 +1742,7 @@ static DBusMessage *create_device(DBusConnection *conn,
>                return __btd_error_invalid_args(msg);
>
>        if (adapter_find_device(adapter, address))
> -               return g_dbus_create_error(msg,
> -                               ERROR_INTERFACE ".AlreadyExists",
> -                               "Device already exists");
> +               return __btd_error_already_exists(msg);
>
>        DBG("%s", address);
>
> @@ -1906,9 +1904,7 @@ static DBusMessage *register_agent(DBusConnection *conn, DBusMessage *msg,
>                return NULL;
>
>        if (adapter->agent)
> -               return g_dbus_create_error(msg,
> -                               ERROR_INTERFACE ".AlreadyExists",
> -                               "Agent already exists");
> +               return __btd_error_already_exists(msg);
>
>        cap = parse_io_capability(capability);
>        if (cap == IO_CAPABILITY_INVALID)
> diff --git a/src/device.c b/src/device.c
> index ef1a910..6d110dc 100644
> --- a/src/device.c
> +++ b/src/device.c
> @@ -1944,9 +1944,7 @@ DBusMessage *device_create_bonding(struct btd_device *device,
>        str = textfile_caseget(filename, dstaddr);
>        if (str) {
>                free(str);
> -               return g_dbus_create_error(msg,
> -                               ERROR_INTERFACE ".AlreadyExists",
> -                               "Bonding already exists");
> +               return __btd_error_already_exists(msg);
>        }
>
>        /* If our IO capability is NoInputNoOutput use medium security
> diff --git a/src/error.c b/src/error.c
> index a30c050..e268163 100644
> --- a/src/error.c
> +++ b/src/error.c
> @@ -55,3 +55,10 @@ DBusMessage *__btd_error_invalid_args(DBusMessage *msg)
>                                        ".InvalidArguments",
>                                        "Invalid arguments in method call");
>  }
> +
> +DBusMessage *__btd_error_already_exists(DBusMessage *msg)

I also think that an additional message will be great for a better description.

> +{
> +       return g_dbus_create_error(msg,
> +                               ERROR_INTERFACE ".AlreadyExists",
> +                               "Already Exists");
> +}
> diff --git a/src/error.h b/src/error.h
> index 51c094c..284889f 100644
> --- a/src/error.h
> +++ b/src/error.h
> @@ -31,3 +31,4 @@ DBusHandlerResult error_common_reply(DBusConnection *conn, DBusMessage *msg,
>                                        const char *name, const char *descr);
>
>  DBusMessage *__btd_error_invalid_args(DBusMessage *msg);
> +DBusMessage *__btd_error_already_exists(DBusMessage *msg);
> --
> 1.7.3.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply

* Re: [PATCH 1/9] Create __btd_error_invalid_args()
From: Jose Antonio Santos Cadenas @ 2010-11-09  8:20 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth
In-Reply-To: <1289197787-16715-2-git-send-email-padovan@profusion.mobi>

Hi Gustavo,

2010/11/8 Gustavo F. Padovan <padovan@profusion.mobi>:
> DBus error handling in BlueZ is a mess. This is the first patch to unify
> all DBus error handling like in ConnMan and oFono. This unifies all
> .InvalidArguments errors.
> ---
>  attrib/client.c          |   20 +++++----------
>  audio/gateway.c          |    8 +----
>  audio/headset.c          |   18 ++++---------
>  audio/media.c            |    9 ++----
>  audio/telephony-dummy.c  |   25 ++++++++------------
>  audio/telephony-maemo5.c |   11 ++------
>  audio/telephony-maemo6.c |   11 ++------
>  audio/transport.c        |   14 +++--------
>  health/hdp.c             |   58 ++++++++++++----------------------------------
>  network/server.c         |    7 -----
>  plugins/service.c        |    8 +-----
>  serial/port.c            |    8 ------
>  serial/proxy.c           |   19 ++++----------
>  src/adapter.c            |   52 ++++++++++++++++++-----------------------
>  src/device.c             |   22 ++++++-----------
>  src/error.c              |    7 +++++
>  src/error.h              |    2 +
>  src/manager.c            |    7 -----
>  18 files changed, 100 insertions(+), 206 deletions(-)
>
> diff --git a/attrib/client.c b/attrib/client.c
> index 1f2c217..cd6e401 100644
> --- a/attrib/client.c
> +++ b/attrib/client.c
> @@ -190,12 +190,6 @@ static int watcher_cmp(gconstpointer a, gconstpointer b)
>        return g_strcmp0(watcher->path, match->path);
>  }
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                       "Invalid arguments in method call");
> -}
> -
>  static inline DBusMessage *not_authorized(DBusMessage *msg)
>  {
>        return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAuthorized",
> @@ -465,7 +459,7 @@ static DBusMessage *register_watcher(DBusConnection *conn,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
>                                                        DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (l2cap_connect(prim->gatt, &gerr, TRUE) < 0) {
>                DBusMessage *reply;
> @@ -499,7 +493,7 @@ static DBusMessage *unregister_watcher(DBusConnection *conn,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
>                                                        DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        match = g_new0(struct watcher, 1);
>        match->name = g_strdup(sender);
> @@ -537,7 +531,7 @@ static DBusMessage *set_value(DBusConnection *conn, DBusMessage *msg,
>
>        if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY ||
>                        dbus_message_iter_get_element_type(iter) != DBUS_TYPE_BYTE)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        dbus_message_iter_recurse(iter, &sub);
>
> @@ -586,23 +580,23 @@ static DBusMessage *set_property(DBusConnection *conn,
>        const char *property;
>
>        if (!dbus_message_iter_init(msg, &iter))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        dbus_message_iter_get_basic(&iter, &property);
>        dbus_message_iter_next(&iter);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        dbus_message_iter_recurse(&iter, &sub);
>
>        if (g_str_equal("Value", property))
>                return set_value(conn, msg, &sub, chr);
>
> -       return invalid_args(msg);
> +       return __btd_error_invalid_args(msg);
>  }
>
>  static GDBusMethodTable char_methods[] = {
> diff --git a/audio/gateway.c b/audio/gateway.c
> index 07ebdd4..ab7d310 100644
> --- a/audio/gateway.c
> +++ b/audio/gateway.c
> @@ -494,9 +494,7 @@ static DBusMessage *register_agent(DBusConnection *conn,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
>                                                DBUS_TYPE_INVALID))
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid argument");
> +               return __btd_error_invalid_args(msg);
>
>        name = dbus_message_get_sender(msg);
>        agent = g_new0(struct hf_agent, 1);
> @@ -529,9 +527,7 @@ static DBusMessage *unregister_agent(DBusConnection *conn,
>        if (!dbus_message_get_args(msg, NULL,
>                                DBUS_TYPE_OBJECT_PATH, &path,
>                                DBUS_TYPE_INVALID))
> -               return g_dbus_create_error(msg,
> -                               ERROR_INTERFACE ".InvalidArguments",
> -                               "Invalid argument");
> +               return __btd_error_invalid_args(msg);
>
>        if (strcmp(gw->agent->path, path) != 0)
>                return g_dbus_create_error(msg,
> diff --git a/audio/headset.c b/audio/headset.c
> index 0763585..2cca5ca 100644
> --- a/audio/headset.c
> +++ b/audio/headset.c
> @@ -180,12 +180,6 @@ struct event {
>
>  static GSList *headset_callbacks = NULL;
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                       "Invalid arguments in method call");
> -}
> -
>  static DBusHandlerResult error_not_supported(DBusConnection *conn,
>                                                        DBusMessage *msg)
>  {
> @@ -2026,35 +2020,35 @@ static DBusMessage *hs_set_property(DBusConnection *conn,
>        uint16_t gain;
>
>        if (!dbus_message_iter_init(msg, &iter))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        dbus_message_iter_get_basic(&iter, &property);
>        dbus_message_iter_next(&iter);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>        dbus_message_iter_recurse(&iter, &sub);
>
>        if (g_str_equal("SpeakerGain", property)) {
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_UINT16)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &gain);
>                return hs_set_gain(conn, msg, data, gain,
>                                        HEADSET_GAIN_SPEAKER);
>        } else if (g_str_equal("MicrophoneGain", property)) {
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_UINT16)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &gain);
>                return hs_set_gain(conn, msg, data, gain,
>                                        HEADSET_GAIN_MICROPHONE);
>        }
>
> -       return invalid_args(msg);
> +       return __btd_error_invalid_args(msg);
>  }
>  static GDBusMethodTable headset_methods[] = {
>        { "Connect",            "",     "",     hs_connect,
> diff --git a/audio/media.c b/audio/media.c
> index b6c90f9..862cee6 100644
> --- a/audio/media.c
> +++ b/audio/media.c
> @@ -323,18 +323,15 @@ static DBusMessage *register_endpoint(DBusConnection *conn, DBusMessage *msg,
>
>        dbus_message_iter_recurse(&args, &props);
>        if (dbus_message_iter_get_arg_type(&props) != DBUS_TYPE_DICT_ENTRY)
> -               return g_dbus_create_error(msg, ERROR_INTERFACE
> -                                       ".Failed", "Invalid argument");
> +               return __btd_error_invalid_args(msg);
>
>        if (parse_properties(&props, &uuid, &delay_reporting, &codec,
>                                &capabilities, &size) || uuid == NULL)
> -               return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
> -                                               "Invalid argument");
> +               return __btd_error_invalid_args(msg);
>
>        if (media_endpoint_create(adapter, sender, path, uuid, delay_reporting,
>                                codec, capabilities, size) == FALSE)
> -               return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
> -                                               "Invalid argument");
> +               return __btd_error_invalid_args(msg);
>
>        return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
>  }
> diff --git a/audio/telephony-dummy.c b/audio/telephony-dummy.c
> index 06cb798..b56b6e7 100644
> --- a/audio/telephony-dummy.c
> +++ b/audio/telephony-dummy.c
> @@ -35,6 +35,7 @@
>
>  #include "log.h"
>  #include "telephony.h"
> +#include "error.h"
>
>  #define TELEPHONY_DUMMY_IFACE "org.bluez.TelephonyTest"
>  #define TELEPHONY_DUMMY_PATH "/org/bluez/test"
> @@ -69,12 +70,6 @@ static struct indicator dummy_indicators[] =
>        { 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)
>  {
>        DBG("telephony-dummy: device %p connected", telephony_device);
> @@ -236,7 +231,7 @@ static DBusMessage *outgoing_call(DBusConnection *conn, DBusMessage *msg,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        DBG("telephony-dummy: outgoing call to %s", number);
>
> @@ -261,7 +256,7 @@ static DBusMessage *incoming_call(DBusConnection *conn, DBusMessage *msg,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        DBG("telephony-dummy: incoming call to %s", number);
>
> @@ -307,10 +302,10 @@ static DBusMessage *signal_strength(DBusConnection *conn, DBusMessage *msg,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_UINT32, &strength,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (strength > 5)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        telephony_update_indicator(dummy_indicators, "signal", strength);
>
> @@ -326,10 +321,10 @@ static DBusMessage *battery_level(DBusConnection *conn, DBusMessage *msg,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_UINT32, &level,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (level > 5)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        telephony_update_indicator(dummy_indicators, "battchg", level);
>
> @@ -346,7 +341,7 @@ static DBusMessage *roaming_status(DBusConnection *conn, DBusMessage *msg,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_BOOLEAN, &roaming,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        val = roaming ? EV_ROAM_ACTIVE : EV_ROAM_INACTIVE;
>
> @@ -365,7 +360,7 @@ static DBusMessage *registration_status(DBusConnection *conn, DBusMessage *msg,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_BOOLEAN, &registration,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        val = registration ? EV_SERVICE_PRESENT : EV_SERVICE_NONE;
>
> @@ -384,7 +379,7 @@ static DBusMessage *set_subscriber_number(DBusConnection *conn,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &number,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        g_free(subscriber_number);
>        subscriber_number = g_strdup(number);
> diff --git a/audio/telephony-maemo5.c b/audio/telephony-maemo5.c
> index 4d0134c..0f9819c 100644
> --- a/audio/telephony-maemo5.c
> +++ b/audio/telephony-maemo5.c
> @@ -38,6 +38,7 @@
>
>  #include "log.h"
>  #include "telephony.h"
> +#include "error.h"
>
>  /* SSC D-Bus definitions */
>  #define SSC_DBUS_NAME  "com.nokia.phone.SSC"
> @@ -1880,12 +1881,6 @@ static void csd_init(void)
>        }
>  }
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg,"org.bluez.Error.InvalidArguments",
> -                                       "Invalid arguments in method call");
> -}
> -
>  static uint32_t get_callflag(const char *callerid_setting)
>  {
>        if (callerid_setting != NULL) {
> @@ -1950,7 +1945,7 @@ static DBusMessage *set_callerid(DBusConnection *conn, DBusMessage *msg,
>        if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING,
>                                                &callerid_setting,
>                                                DBUS_TYPE_INVALID) == FALSE)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (g_str_equal(callerid_setting, "allowed") ||
>                        g_str_equal(callerid_setting, "restricted") ||
> @@ -1964,7 +1959,7 @@ static DBusMessage *set_callerid(DBusConnection *conn, DBusMessage *msg,
>
>        error("telephony-maemo: invalid argument %s for method call"
>                                        " SetCallerId", callerid_setting);
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>  }
>
>  static GDBusMethodTable telephony_maemo_methods[] = {
> diff --git a/audio/telephony-maemo6.c b/audio/telephony-maemo6.c
> index 72c8e36..4663b4d 100644
> --- a/audio/telephony-maemo6.c
> +++ b/audio/telephony-maemo6.c
> @@ -38,6 +38,7 @@
>
>  #include "log.h"
>  #include "telephony.h"
> +#include "error.h"
>
>  /* SSC D-Bus definitions */
>  #define SSC_DBUS_NAME  "com.nokia.phone.SSC"
> @@ -1760,12 +1761,6 @@ static void csd_init(void)
>        }
>  }
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg,"org.bluez.Error.InvalidArguments",
> -                                       "Invalid arguments in method call");
> -}
> -
>  static uint32_t get_callflag(const char *callerid_setting)
>  {
>        if (callerid_setting != NULL) {
> @@ -1830,7 +1825,7 @@ static DBusMessage *set_callerid(DBusConnection *conn, DBusMessage *msg,
>        if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING,
>                                                &callerid_setting,
>                                                DBUS_TYPE_INVALID) == FALSE)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (g_str_equal(callerid_setting, "allowed") ||
>                        g_str_equal(callerid_setting, "restricted") ||
> @@ -1844,7 +1839,7 @@ static DBusMessage *set_callerid(DBusConnection *conn, DBusMessage *msg,
>
>        error("telephony-maemo6: invalid argument %s for method call"
>                                        " SetCallerId", callerid_setting);
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>  }
>
>  static DBusMessage *clear_lastnumber(DBusConnection *conn, DBusMessage *msg,
> diff --git a/audio/transport.c b/audio/transport.c
> index eda46e1..0c865f7 100644
> --- a/audio/transport.c
> +++ b/audio/transport.c
> @@ -93,12 +93,6 @@ struct media_transport {
>                                        DBusMessageIter *value);
>  };
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call");
> -}
> -
>  static inline DBusMessage *error_failed(DBusMessage *msg, const char *desc)
>  {
>        return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed", "%s", desc);
> @@ -549,16 +543,16 @@ static DBusMessage *set_property(DBusConnection *conn, DBusMessage *msg,
>        int err;
>
>        if (!dbus_message_iter_init(msg, &iter))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        dbus_message_iter_get_basic(&iter, &property);
>        dbus_message_iter_next(&iter);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>        dbus_message_iter_recurse(&iter, &value);
>
>        sender = dbus_message_get_sender(msg);
> @@ -577,7 +571,7 @@ static DBusMessage *set_property(DBusConnection *conn, DBusMessage *msg,
>
>        if (err < 0) {
>                if (err == -EINVAL)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>                return error_failed(msg, strerror(-err));
>        }
>
> diff --git a/health/hdp.c b/health/hdp.c
> index 1eba8e1..6c1fd98 100644
> --- a/health/hdp.c
> +++ b/health/hdp.c
> @@ -321,15 +321,8 @@ static DBusMessage *manager_create_application(DBusConnection *conn,
>
>        dbus_message_iter_init(msg, &iter);
>        app = hdp_get_app_config(&iter, &err);
> -       if (err) {
> -               DBusMessage *reply;
> -
> -               reply = g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments: %s", err->message);
> -               g_error_free(err);
> -               return reply;
> -       }
> +       if (err)
> +               return __btd_error_invalid_args(msg);


You are leaking memory here, err should be freed before return. Also
the message that we add to the error is for clarify the user the kind
of error, it will be great to keep it.

>
>        name = dbus_message_get_sender(msg);
>        if (!name) {
> @@ -368,11 +361,8 @@ static DBusMessage *manager_destroy_application(DBusConnection *conn,
>        GSList *l;
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
> -                                               DBUS_TYPE_INVALID)){
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call");
> -       }
> +                                               DBUS_TYPE_INVALID))
> +               return __btd_error_invalid_args(msg);
>
>        l = g_slist_find_custom(applications, path, cmp_app);
>
> @@ -1801,18 +1791,13 @@ static DBusMessage *device_create_channel(DBusConnection *conn,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &app_path,
>                                                        DBUS_TYPE_STRING, &conf,
> -                                                       DBUS_TYPE_INVALID)) {
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call");
> -       }
> +                                                       DBUS_TYPE_INVALID))
> +               return __btd_error_invalid_args(msg);
>
>        l = g_slist_find_custom(applications, app_path, cmp_app);
>        if (!l)
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call, "
> -                                       "no such application");
> +               return __btd_error_invalid_args(msg);
> +
>        app = l->data;
>
>        if (g_ascii_strcasecmp("Reliable", conf) == 0)
> @@ -1822,25 +1807,16 @@ static DBusMessage *device_create_channel(DBusConnection *conn,
>        else if (g_ascii_strcasecmp("Any", conf) == 0)
>                config = HDP_NO_PREFERENCE_DC;
>        else
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call");
> +               return __btd_error_invalid_args(msg);
>
>        if (app->role == HDP_SINK && config != HDP_NO_PREFERENCE_DC)
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Configuration not valid for sinks");
> +               return __btd_error_invalid_args(msg);

Also here the message we tried to clarify the kind of "Invalid
Arguments" error with a different message.

>
>        if (app->role == HDP_SOURCE && config == HDP_NO_PREFERENCE_DC)
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Configuration not valid for sources");
> +               return __btd_error_invalid_args(msg);

And here.

>
>        if (!device->fr && config == HDP_STREAMING_DC)
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Configuration not valid, first "
> -                                       "channel should be reliable");
> +               return __btd_error_invalid_args(msg);


And here.

>
>        data = g_new0(struct hdp_create_dc, 1);
>        data->dev = device;
> @@ -1924,17 +1900,13 @@ static DBusMessage *device_destroy_channel(DBusConnection *conn,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
>                                                        DBUS_TYPE_INVALID)){
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call");
> +               return __btd_error_invalid_args(msg);
>        }
>
>        l = g_slist_find_custom(device->channels, path, cmp_chan_path);
>        if (!l)
> -               return g_dbus_create_error(msg,
> -                                       ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call, "
> -                                       "no such channel");
> +               return __btd_error_invalid_args(msg);
> +


And here.

>        hdp_chan = l->data;
>        del_data = g_new0(struct hdp_tmp_dc_data, 1);
>        del_data->msg = dbus_message_ref(msg);
> diff --git a/network/server.c b/network/server.c
> index e6706ec..ce1fe5e 100644
> --- a/network/server.c
> +++ b/network/server.c
> @@ -575,13 +575,6 @@ static inline DBusMessage *failed(DBusMessage *msg, const char *description)
>                                                        "%s", description);
>  }
>
> -static inline DBusMessage *invalid_arguments(DBusMessage *msg,
> -                                       const char *description)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                                                       "%s", description);
> -}
> -
>  static void server_disconnect(DBusConnection *conn, void *user_data)
>  {
>        struct network_server *ns = user_data;
> diff --git a/plugins/service.c b/plugins/service.c
> index f6b9da7..6f6a275 100644
> --- a/plugins/service.c
> +++ b/plugins/service.c
> @@ -339,12 +339,6 @@ static void exit_callback(DBusConnection *conn, void *user_data)
>        g_free(user_record);
>  }
>
> -static inline DBusMessage *invalid_arguments(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call");
> -}
> -
>  static inline DBusMessage *not_available(DBusMessage *msg)
>  {
>        return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAvailable",
> @@ -466,7 +460,7 @@ static DBusMessage *update_xml_record(DBusConnection *conn,
>
>        len = (record ? strlen(record) : 0);
>        if (len == 0)
> -               return invalid_arguments(msg);
> +               return __btd_error_invalid_args(msg);
>
>        user_record = find_record(serv_adapter, handle,
>                                dbus_message_get_sender(msg));
> diff --git a/serial/port.c b/serial/port.c
> index 0398f2e..b593311 100644
> --- a/serial/port.c
> +++ b/serial/port.c
> @@ -57,7 +57,6 @@
>  #include "port.h"
>
>  #define SERIAL_PORT_INTERFACE  "org.bluez.Serial"
> -#define ERROR_INVALID_ARGS     "org.bluez.Error.InvalidArguments"
>  #define ERROR_DOES_NOT_EXIST   "org.bluez.Error.DoesNotExist"
>
>  #define MAX_OPEN_TRIES         5
> @@ -243,13 +242,6 @@ static inline DBusMessage *does_not_exist(DBusMessage *msg,
>                                                        "%s", description);
>  }
>
> -static inline DBusMessage *invalid_arguments(DBusMessage *msg,
> -                                       const char *description)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                                                       "%s", description);
> -}
> -
>  static inline DBusMessage *failed(DBusMessage *msg, const char *description)
>  {
>        return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
> diff --git a/serial/proxy.c b/serial/proxy.c
> index 3aaabf3..8e182b6 100644
> --- a/serial/proxy.c
> +++ b/serial/proxy.c
> @@ -140,13 +140,6 @@ static inline DBusMessage *does_not_exist(DBusMessage *msg,
>                                                        "%s", description);
>  }
>
> -static inline DBusMessage *invalid_arguments(DBusMessage *msg,
> -                                       const char *description)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                                                       "%s", description);
> -}
> -
>  static inline DBusMessage *failed(DBusMessage *msg, const char *description)
>  {
>        return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
> @@ -755,17 +748,17 @@ static DBusMessage *proxy_set_serial_params(DBusConnection *conn,
>                return NULL;
>
>        if (str2speed(ratestr, &speed)  == B0)
> -               return invalid_arguments(msg, "Invalid baud rate");
> +               return __btd_error_invalid_args(msg);

Also here there is a clarification about the invalid arguments with a
better error description, and all others in this file.

>
>        ctrl = prx->proxy_ti.c_cflag;
>        if (set_databits(databits, &ctrl) < 0)
> -               return invalid_arguments(msg, "Invalid data bits");
> +               return __btd_error_invalid_args(msg);
>
>        if (set_stopbits(stopbits, &ctrl) < 0)
> -               return invalid_arguments(msg, "Invalid stop bits");
> +               return __btd_error_invalid_args(msg);
>
>        if (set_parity(paritystr, &ctrl) < 0)
> -               return invalid_arguments(msg, "Invalid parity");
> +               return __btd_error_invalid_args(msg);
>
>        prx->proxy_ti.c_cflag = ctrl;
>        prx->proxy_ti.c_cflag |= (CLOCAL | CREAD);
> @@ -1057,13 +1050,13 @@ static DBusMessage *create_proxy(DBusConnection *conn,
>
>        uuid_str = bt_name2string(pattern);
>        if (!uuid_str)
> -               return invalid_arguments(msg, "Invalid UUID");
> +               return __btd_error_invalid_args(msg);
>
>        err = register_proxy(adapter, uuid_str, address, &proxy);
>        g_free(uuid_str);
>
>        if (err == -EINVAL)
> -               return invalid_arguments(msg, "Invalid address");
> +               return __btd_error_invalid_args(msg);
>        else if (err == -EALREADY)
>                return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyExist",
>                                                "Proxy already exists");
> diff --git a/src/adapter.c b/src/adapter.c
> index 31014e5..cc51816 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -148,12 +148,6 @@ struct btd_adapter {
>  static void adapter_set_pairable_timeout(struct btd_adapter *adapter,
>                                        guint interval);
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                       "Invalid arguments in method call");
> -}
> -
>  static inline DBusMessage *adapter_not_ready(DBusMessage *msg)
>  {
>        return g_dbus_create_error(msg, ERROR_INTERFACE ".NotReady",
> @@ -1088,7 +1082,7 @@ static DBusMessage *set_name(DBusConnection *conn, DBusMessage *msg,
>
>        if (!g_utf8_validate(name, -1, NULL)) {
>                error("Name change failed: supplied name isn't valid UTF-8");
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>        }
>
>        if (strncmp(name, (char *) dev->name, MAX_NAME_LENGTH) == 0)
> @@ -1535,23 +1529,23 @@ static DBusMessage *set_property(DBusConnection *conn,
>        ba2str(&adapter->bdaddr, srcaddr);
>
>        if (!dbus_message_iter_init(msg, &iter))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        dbus_message_iter_get_basic(&iter, &property);
>        dbus_message_iter_next(&iter);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>        dbus_message_iter_recurse(&iter, &sub);
>
>        if (g_str_equal("Name", property)) {
>                const char *name;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>                dbus_message_iter_get_basic(&sub, &name);
>
>                return set_name(conn, msg, name, data);
> @@ -1559,7 +1553,7 @@ static DBusMessage *set_property(DBusConnection *conn,
>                gboolean powered;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_BOOLEAN)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &powered);
>
> @@ -1568,7 +1562,7 @@ static DBusMessage *set_property(DBusConnection *conn,
>                gboolean discoverable;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_BOOLEAN)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &discoverable);
>
> @@ -1577,7 +1571,7 @@ static DBusMessage *set_property(DBusConnection *conn,
>                uint32_t timeout;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_UINT32)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &timeout);
>
> @@ -1586,7 +1580,7 @@ static DBusMessage *set_property(DBusConnection *conn,
>                gboolean pairable;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_BOOLEAN)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &pairable);
>
> @@ -1595,14 +1589,14 @@ static DBusMessage *set_property(DBusConnection *conn,
>                uint32_t timeout;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_UINT32)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &timeout);
>
>                return set_pairable_timeout(conn, msg, timeout, data);
>        }
>
> -       return invalid_args(msg);
> +       return __btd_error_invalid_args(msg);
>  }
>
>  static DBusMessage *request_session(DBusConnection *conn,
> @@ -1676,7 +1670,7 @@ static DBusMessage *list_devices(DBusConnection *conn,
>        const gchar *dev_path;
>
>        if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        reply = dbus_message_new_method_return(msg);
>        if (!reply)
> @@ -1709,10 +1703,10 @@ static DBusMessage *cancel_device_creation(DBusConnection *conn,
>
>        if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
>                                                DBUS_TYPE_INVALID) == FALSE)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (check_address(address) < 0)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        device = adapter_find_device(adapter, address);
>        if (!device || !device_is_creating(device, NULL))
> @@ -1742,10 +1736,10 @@ static DBusMessage *create_device(DBusConnection *conn,
>
>        if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
>                                                DBUS_TYPE_INVALID) == FALSE)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (check_address(address) < 0)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (adapter_find_device(adapter, address))
>                return g_dbus_create_error(msg,
> @@ -1790,21 +1784,21 @@ static DBusMessage *create_paired_device(DBusConnection *conn,
>                                        DBUS_TYPE_OBJECT_PATH, &agent_path,
>                                        DBUS_TYPE_STRING, &capability,
>                                        DBUS_TYPE_INVALID) == FALSE)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (check_address(address) < 0)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        sender = dbus_message_get_sender(msg);
>        if (adapter->agent &&
>                        agent_matches(adapter->agent, sender, agent_path)) {
>                error("Refusing adapter agent usage as device specific one");
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>        }
>
>        cap = parse_io_capability(capability);
>        if (cap == IO_CAPABILITY_INVALID)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        device = adapter_get_device(conn, adapter, address);
>        if (!device)
> @@ -1832,7 +1826,7 @@ static DBusMessage *remove_device(DBusConnection *conn, DBusMessage *msg,
>
>        if (dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
>                                                DBUS_TYPE_INVALID) == FALSE)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        l = g_slist_find_custom(adapter->devices,
>                        path, (GCompareFunc) device_path_cmp);
> @@ -1870,7 +1864,7 @@ static DBusMessage *find_device(DBusConnection *conn, DBusMessage *msg,
>
>        if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &address,
>                                                DBUS_TYPE_INVALID))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        l = g_slist_find_custom(adapter->devices,
>                        address, (GCompareFunc) device_address_cmp);
> @@ -1918,7 +1912,7 @@ static DBusMessage *register_agent(DBusConnection *conn, DBusMessage *msg,
>
>        cap = parse_io_capability(capability);
>        if (cap == IO_CAPABILITY_INVALID)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        name = dbus_message_get_sender(msg);
>
> diff --git a/src/device.c b/src/device.c
> index c2b6682..ef1a910 100644
> --- a/src/device.c
> +++ b/src/device.c
> @@ -549,12 +549,6 @@ static DBusMessage *set_blocked(DBusConnection *conn, DBusMessage *msg,
>        }
>  }
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg, ERROR_INTERFACE ".InvalidArguments",
> -                                       "Invalid arguments in method call");
> -}
> -
>  static DBusMessage *set_property(DBusConnection *conn,
>                                DBusMessage *msg, void *data)
>  {
> @@ -563,22 +557,22 @@ static DBusMessage *set_property(DBusConnection *conn,
>        const char *property;
>
>        if (!dbus_message_iter_init(msg, &iter))
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>
>        dbus_message_iter_get_basic(&iter, &property);
>        dbus_message_iter_next(&iter);
>
>        if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
> -               return invalid_args(msg);
> +               return __btd_error_invalid_args(msg);
>        dbus_message_iter_recurse(&iter, &sub);
>
>        if (g_str_equal("Trusted", property)) {
>                dbus_bool_t value;
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_BOOLEAN)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>                dbus_message_iter_get_basic(&sub, &value);
>
>                return set_trust(conn, msg, value, data);
> @@ -586,7 +580,7 @@ static DBusMessage *set_property(DBusConnection *conn,
>                const char *alias;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>                dbus_message_iter_get_basic(&sub, &alias);
>
>                return set_alias(conn, msg, alias, data);
> @@ -594,14 +588,14 @@ static DBusMessage *set_property(DBusConnection *conn,
>                dbus_bool_t value;
>
>                if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_BOOLEAN)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                dbus_message_iter_get_basic(&sub, &value);
>
>                return set_blocked(conn, msg, value, data);
>        }
>
> -       return invalid_args(msg);
> +       return __btd_error_invalid_args(msg);
>  }
>
>  static void discover_services_req_exit(DBusConnection *conn, void *user_data)
> @@ -636,7 +630,7 @@ static DBusMessage *discover_services(DBusConnection *conn,
>                uuid_t uuid;
>
>                if (bt_string2uuid(&uuid, pattern) < 0)
> -                       return invalid_args(msg);
> +                       return __btd_error_invalid_args(msg);
>
>                sdp_uuid128_to_uuid(&uuid);
>
> diff --git a/src/error.c b/src/error.c
> index c1a2fbf..a30c050 100644
> --- a/src/error.c
> +++ b/src/error.c
> @@ -48,3 +48,10 @@ DBusHandlerResult error_common_reply(DBusConnection *conn, DBusMessage *msg,
>
>        return DBUS_HANDLER_RESULT_HANDLED;
>  }
> +
> +DBusMessage *__btd_error_invalid_args(DBusMessage *msg)

I think that it will be great to add an optional parameter for a
better description of the error in the case it is required.

> +{
> +       return g_dbus_create_error(msg, ERROR_INTERFACE
> +                                       ".InvalidArguments",
> +                                       "Invalid arguments in method call");
> +}
> diff --git a/src/error.h b/src/error.h
> index 49ec05e..51c094c 100644
> --- a/src/error.h
> +++ b/src/error.h
> @@ -29,3 +29,5 @@
>
>  DBusHandlerResult error_common_reply(DBusConnection *conn, DBusMessage *msg,
>                                        const char *name, const char *descr);
> +
> +DBusMessage *__btd_error_invalid_args(DBusMessage *msg);
> diff --git a/src/manager.c b/src/manager.c
> index 3fad9e6..315f5c3 100644
> --- a/src/manager.c
> +++ b/src/manager.c
> @@ -66,13 +66,6 @@ void manager_update_svc(struct btd_adapter* adapter, uint8_t svc)
>        adapter_set_service_classes(adapter, svc);
>  }
>
> -static inline DBusMessage *invalid_args(DBusMessage *msg)
> -{
> -       return g_dbus_create_error(msg,
> -                       ERROR_INTERFACE ".InvalidArguments",
> -                       "Invalid arguments in method call");
> -}
> -
>  static inline DBusMessage *no_such_adapter(DBusMessage *msg)
>  {
>        return g_dbus_create_error(msg,
> --
> 1.7.3.1
>

^ permalink raw reply

* I think we should add GoepL2capPsm attribute in sdp.h
From: hui li @ 2010-11-09  7:18 UTC (permalink / raw)
  To: linux-bluetooth

Currently there is no GoepL2capPsm attribute value in sdp.h, I think
we should add this to supprot GOEP v2.0.
Maybe we can add
#define SDP_ATTR_GOEP_L2CAP_PSM			0x0200
in sdp.h.

^ permalink raw reply

* pull request: bluetooth-2.6 2010-11-09
From: Gustavo F. Padovan @ 2010-11-09  3:26 UTC (permalink / raw)
  To: linville; +Cc: linux-bluetooth, linux-wireless

Hi John,

The following batch contains some bugfixes for 2.6.37. A fix for unaligned
access in L2CAP, a Kconfig error, two fixes related to security of
the Bluetooth links, and support for the a MacBook Air Bluetooth device.
There is also a one line patch from Matthew Garret, that enables USB
autosuspend for btusb module, which shall be completely safe. Please
pull, thanks.

The following changes since commit 48a7c3df14d0cda850337a9b3f9e667a0b12a996:

  ath9k_hw: Fix memory leak on ath9k_hw_rf_alloc_ext_banks failure (2010-11-08 16:53:48 -0500)

are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git master

Edgar (gimli) Hucek (1):
      Bluetooth: Add MacBookAir3,1(2) support

Gustavo F. Padovan (1):
      Bluetooth: fix endianness conversion in L2CAP

Johan Hedberg (1):
      Bluetooth: Fix non-SSP auth request for HIGH security level sockets

Luiz Augusto von Dentz (1):
      Bluetooth: fix not setting security level when creating a rfcomm session

Matthew Garrett (1):
      Bluetooth: Enable USB autosuspend by default on btusb

Randy Dunlap (1):
      Bluetooth: fix hidp kconfig dependency warning

steven miao (1):
      Bluetooth: fix unaligned access to l2cap conf data

 drivers/bluetooth/btusb.c   |    5 +++++
 net/bluetooth/hci_event.c   |    6 ++++++
 net/bluetooth/hidp/Kconfig  |    2 +-
 net/bluetooth/l2cap.c       |    8 ++++----
 net/bluetooth/rfcomm/core.c |   13 ++++++++++---
 5 files changed, 26 insertions(+), 8 deletions(-)

-- 
Gustavo F. Padovan
ProFUSION embedded systems - http://profusion.mobi

^ permalink raw reply

* Re: [PATCH 1/1] Add MacBookAir3,1(2) support
From: Gustavo F. Padovan @ 2010-11-09  3:15 UTC (permalink / raw)
  To: gimli; +Cc: linux-bluetooth
In-Reply-To: <ffd9073aaab3142681f1b1340aea1cf0@mognix.dark-green.com>

* gimli <gimli@dark-green.com> [2010-11-04 08:04:33 +0100]:

> bluetooth: Add MacBookAir3,1(2) support
> 
> Adding the new MacBookAir3,1(2) to btusb.
> 
> Output without the patch and btusb loaded :
> 
> T:  Bus=03 Lev=02 Prnt=03 Port=02 Cnt=01 Dev#=  6 Spd=12  MxCh= 0
> D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
> P:  Vendor=05ac ProdID=821b Rev= 0.34
> S:  Manufacturer=Apple Inc.
> S:  Product=Bluetooth USB Host Controller
> C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=  0mA
> I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
> E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
> E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
> I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
> E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
> I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
> E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
> I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
> I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  32 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  32 Ivl=1ms
> I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
> E:  Ad=84(I) Atr=02(Bulk) MxPS=  32 Ivl=0ms
> E:  Ad=04(O) Atr=02(Bulk) MxPS=  32 Ivl=0ms
> I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
> 
> Output with the patch and btusb loaded :
> 
> T:  Bus=03 Lev=02 Prnt=03 Port=02 Cnt=01 Dev#=  6 Spd=12  MxCh= 0
> D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
> P:  Vendor=05ac ProdID=821b Rev= 0.34
> S:  Manufacturer=Apple Inc.
> S:  Product=Bluetooth USB Host Controller
> C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=  0mA
> I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
> E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
> E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
> E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
> I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
> I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
> I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
> I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  32 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  32 Ivl=1ms
> I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
> E:  Ad=83(I) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> E:  Ad=03(O) Atr=01(Isoc) MxPS=  64 Ivl=1ms
> I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
> E:  Ad=84(I) Atr=02(Bulk) MxPS=  32 Ivl=0ms
> E:  Ad=04(O) Atr=02(Bulk) MxPS=  32 Ivl=0ms
> I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
> 
> Signed-off-by: Edgar (gimli) Hucek <gimli@dark-green.com>

Applied, thanks. (And next time please fix your From: to like the
Signed-off-by message)

-- 
Gustavo F. Padovan
ProFUSION embedded systems - http://profusion.mobi

^ permalink raw reply

* Re: pull request: bluetooth-2.6 2010-10-30
From: Gustavo F. Padovan @ 2010-11-08 21:15 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-bluetooth, linux-wireless
In-Reply-To: <20101108205704.GB2310@tuxdriver.com>

Hi John,

* John W. Linville <linville@tuxdriver.com> [2010-11-08 15:57:05 -0500]:

> On Sat, Oct 30, 2010 at 04:15:03AM +0100, Gustavo F. Padovan wrote:
> > Hi John,
> > 
> > The following batch contains some bugfixes for 2.6.37. A fix for unaligned
> > access in L2CAP, a Kconfig error, and two fixes related to security of
> > the Bluetooth links. There is also a one line patch from Matthew Garret,
> > that enables USB autosuspend for btusb module, which shall be completely
> > safe. Please pull, thanks.
> > 
> > 
> > The following changes since commit c1758012971e0410790b2bc96a77e26d7b286593:
> > 
> >   igb: Fix unused variable warning. (2010-10-27 19:43:55 -0700)
> > 
> > are available in the git repository at:
> >   git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git master
> 
> Gustavo,
> 
> I'm happy to take your patches.  But if you want me to pull from you
> then I need your bluetooth-2.6 tree to be based upon wireless-2.6
> (and bluetooth-next-2.6 to be based upon wireless-next-2.6), with only
> the bluetooth patches on top.
> 
> If that is a problem, then you can send me a stack of patches for
> me to apply manually instead.  Otherwise I will get patches I don't
> necessarily want pulled into wireless-2.6 and could even accidentally
> push patches to davem that he might not want either.

No problem to me, sure I can rebase on top of your trees. I'll re-base my
trees and resend the pull request to you.

-- 
Gustavo F. Padovan
ProFUSION embedded systems - http://profusion.mobi

^ permalink raw reply

* Re: pull request: bluetooth-2.6 2010-10-30
From: John W. Linville @ 2010-11-08 20:57 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth, linux-wireless
In-Reply-To: <20101030031503.GB24188@vigoh>

On Sat, Oct 30, 2010 at 04:15:03AM +0100, Gustavo F. Padovan wrote:
> Hi John,
> 
> The following batch contains some bugfixes for 2.6.37. A fix for unaligned
> access in L2CAP, a Kconfig error, and two fixes related to security of
> the Bluetooth links. There is also a one line patch from Matthew Garret,
> that enables USB autosuspend for btusb module, which shall be completely
> safe. Please pull, thanks.
> 
> 
> The following changes since commit c1758012971e0410790b2bc96a77e26d7b286593:
> 
>   igb: Fix unused variable warning. (2010-10-27 19:43:55 -0700)
> 
> are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git master

Gustavo,

I'm happy to take your patches.  But if you want me to pull from you
then I need your bluetooth-2.6 tree to be based upon wireless-2.6
(and bluetooth-next-2.6 to be based upon wireless-next-2.6), with only
the bluetooth patches on top.

If that is a problem, then you can send me a stack of patches for
me to apply manually instead.  Otherwise I will get patches I don't
necessarily want pulled into wireless-2.6 and could even accidentally
push patches to davem that he might not want either.

Thanks,

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply

* Re: [PATCH 0/9] Fixing DBus error system in BlueZ
From: Gustavo F. Padovan @ 2010-11-08 17:31 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <20101108123330.GA1751@jh-x301>

Hi Johan,

* Johan Hedberg <johan.hedberg@gmail.com> [2010-11-08 14:33:30 +0200]:

> Hi Gustavo,
> 
> On Mon, Nov 08, 2010, Gustavo F. Padovan wrote:
> > Here are some patches that try to fix the mess of reporting error to
> > DBus inside BlueZ. It follows the oFono and ConnMan error system.
> > 
> > The goal is to get ride of any directly call to g_dbus_create_error()
> > inside bluez code, changing that to __btd_error_*. This patch set
> > doesn't fix all of them yet, but is a very good start. Please review.
> > 
> > 
> > Gustavo F. Padovan (9):
> >   Create __btd_error_invalid_args()
> >   Add __btd_error_already_exists()
> >   Add __btd_error_not_supported()
> >   Add __btd_error_not_connected()
> >   Add __btd_error_in_progress()
> >   Add __btd_error_not_available()
> >   Add __btd_error_busy()
> >   Add __btd_error_does_not_exist()
> >   Add __btd_error_not_authorized()
> 
> The patches seem fine to me, but before pushing upstream I'd like to
> understand the reason for prefixing these with  with __btd instead of
> btd. What's the criteria used to decide what to use and when and why is
> __btd the correct choice for these new functions? My first guess would
> have been that __btd is for things only accessible by the core-daemon
> whereas btd is for functions exported to plugins, but that doesn't seem
> to be the case with your patches since many of these __btd functions get
> called from plugins.

I just followed oFono and ConnMan on this. That is the reason and I
didn't asked myself why have a __ in this case.. But I see your point.
Do you think that change that to btd_error_* will fit better inside
BlueZ? I can change that then.

-- 
Gustavo F. Padovan
ProFUSION embedded systems - http://profusion.mobi

^ permalink raw reply

* Re: [PATCH] Fix possible crash when removing disconnect watches
From: Johan Hedberg @ 2010-11-08 16:15 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
In-Reply-To: <1289227432-13354-1-git-send-email-luiz.dentz@gmail.com>

Hi Luiz,

On Mon, Nov 08, 2010, Luiz Augusto von Dentz wrote:
> From: Luiz Augusto von Dentz <luiz.dentz-von@nokia.com>
> 
> The callback may have remove itself before returning.
> ---
>  src/device.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)

Pushed upstream. Thanks.

Johan

^ permalink raw reply

* [PATCH] Fix possible crash when removing disconnect watches
From: Luiz Augusto von Dentz @ 2010-11-08 14:43 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.dentz-von@nokia.com>

The callback may have remove itself before returning.
---
 src/device.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/device.c b/src/device.c
index c2b6682..7c421e3 100644
--- a/src/device.c
+++ b/src/device.c
@@ -798,6 +798,10 @@ void device_request_disconnect(struct btd_device *device, DBusMessage *msg)
 			data->watch(device, device->temporary,
 							data->user_data);
 
+		/* Check if the watch has been removed by callback function */
+		if (!g_slist_find(device->watches, data))
+			continue;
+
 		device->watches = g_slist_remove(device->watches, data);
 		g_free(data);
 	}
-- 
1.7.1


^ permalink raw reply related

* Re: [PATCH 0/9] Fixing DBus error system in BlueZ
From: Johan Hedberg @ 2010-11-08 12:33 UTC (permalink / raw)
  To: Gustavo F. Padovan; +Cc: linux-bluetooth
In-Reply-To: <1289197787-16715-1-git-send-email-padovan@profusion.mobi>

Hi Gustavo,

On Mon, Nov 08, 2010, Gustavo F. Padovan wrote:
> Here are some patches that try to fix the mess of reporting error to
> DBus inside BlueZ. It follows the oFono and ConnMan error system.
> 
> The goal is to get ride of any directly call to g_dbus_create_error()
> inside bluez code, changing that to __btd_error_*. This patch set
> doesn't fix all of them yet, but is a very good start. Please review.
> 
> 
> Gustavo F. Padovan (9):
>   Create __btd_error_invalid_args()
>   Add __btd_error_already_exists()
>   Add __btd_error_not_supported()
>   Add __btd_error_not_connected()
>   Add __btd_error_in_progress()
>   Add __btd_error_not_available()
>   Add __btd_error_busy()
>   Add __btd_error_does_not_exist()
>   Add __btd_error_not_authorized()

The patches seem fine to me, but before pushing upstream I'd like to
understand the reason for prefixing these with  with __btd instead of
btd. What's the criteria used to decide what to use and when and why is
__btd the correct choice for these new functions? My first guess would
have been that __btd is for things only accessible by the core-daemon
whereas btd is for functions exported to plugins, but that doesn't seem
to be the case with your patches since many of these __btd functions get
called from plugins.

Johan

^ permalink raw reply

* Re: [PATCH v4 0/2] Get and Set Feature Reports on HIDRAW (USB and Bluetooth)
From: Antonio Ospite @ 2010-11-08 11:17 UTC (permalink / raw)
  To: Jiri Kosina
  Cc: Alan Ott, Marcel Holtmann, David S. Miller, Stefan Achatz,
	Alexey Dobriyan, Tejun Heo, Alan Stern, Greg Kroah-Hartman,
	Stephane Chatty, Michael Poole, Bastien Nocera, Eric Dumazet,
	linux-input, linux-kernel, linux-usb, linux-bluetooth, netdev
In-Reply-To: <alpine.LNX.2.00.1011011523150.15851@pobox.suse.cz>

[-- Attachment #1: Type: text/plain, Size: 1230 bytes --]

On Mon, 1 Nov 2010 15:23:34 -0400 (EDT)
Jiri Kosina <jkosina@suse.cz> wrote:

> On Wed, 22 Sep 2010, Jiri Kosina wrote:
> 
> > > > > This is version 4. Built against 2.6.35+ revision 320b2b8de12698 .
> > > > > 
> > > > > Alan Ott (2):
> > > > >   HID: Add Support for Setting and Getting Feature Reports from hidraw
> > > > >   Bluetooth: hidp: Add support for hidraw  HIDIOCGFEATURE  and
> > > > >     HIDIOCSFEATURE
[...]
> > > ... Marcel?
> > > 
> > > I'd really like not to miss 2.6.37 merge window with this.
> > 
> > Seemingly I have not enought powers to get statement from Marcel here 
> > these days/weeks.
> > 
> > Davem, would you perhaps be able to step in here?
> 
> Marcel, any word on this patchset by chance?
> 

Hopefully Alan will manage to send a v5 sometime soon, Alan I don't want
to pressure you, just remember to CC Gustavo F. Padovan (see
MAINTAINERS) as he looks to be the most active bluetooth maintainer
these days.

Thanks,
   Antonio

-- 
Antonio Ospite
http://ao2.it

PGP public key ID: 0x4553B001

A: Because it messes up the order in which people normally read text.
   See http://en.wikipedia.org/wiki/Posting_style
Q: Why is top-posting such a bad thing?

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* Re: bluez-4.78 broken for me
From: Stefan Seyfried @ 2010-11-08 10:09 UTC (permalink / raw)
  To: Johan Hedberg; +Cc: linux-bluetooth, marcel
In-Reply-To: <20101108032226.GA25187@jh-x301>

On Mon, 8 Nov 2010 05:22:26 +0200
Johan Hedberg <johan.hedberg@gmail.com> wrote:

> Hi,
> 
> On Mon, Nov 08, 2010, Johan Hedberg wrote:
> > You really should enable debug logs (-d switch) to get more info about
> > which code paths are being traveresed here

forgot about that, sorry. I guess it was too late at night over here ;-)

> So please
> test with latest git and let me know if things still work fine.

current git (cc758c498) works fine for me now, thanks.

-- 
Stefan Seyfried

"Any ideas, John?"
"Well, surrounding them's out."

^ permalink raw reply

* Re: Ubuntu 10.04 - BlueZ 4.60 - Console-only BlueZ setup
From: José Antonio Santos Cadenas @ 2010-11-08  7:43 UTC (permalink / raw)
  To: elroy; +Cc: linux-bluetooth
In-Reply-To: <4CD7A05F.1080805@ihug.co.nz>


Hi Elroy,

On Mon, 08 Nov 2010 20:01:51 +1300, elroy <elroy@ihug.co.nz> wrote:
> Hi.
> 
> I'm trying to setup a Ubuntu 10.04 Server with a BT USB adapter to be
> able to connect and send/receive files from a cellphone.
> 
> 
> I am trying to do this setup via standard bash shell console only.
> 
> The problem I seem to be running into, is unlike the version of BlueZ
> in Ubuntu 7.04, I cannot access MAN pages for BlueZ config files
> (main.conf/etc), and am struggling to find anything that resembles
> orderly documentation on the 'Net.
> 
> So far, I can get this:
> 
> 
> 
> bluetoothd8643?: pin_code_request (sba=00:10:60:32:3A:93,
> dba=00:18:0F:DE:98:8D)
> bluetoothd8643?: No agent available for 0 request
> 
> 
> It appears as though I need some form of D-Bus software to
> communicate to BlueZ through - this seems to require a GUI - is there
> any other simpler way to do the Pairing/Config via xxx.conf files
> without having to revert back to bluez-compat?

Did you try simple-agent? It is a python scrypt in the bluez
test/folder that doesn't require any gui. I don't if Ubuntu installs it,
but if you download the source code from the web page or the git repo
you will find it. Probably with this agent you will be able to pair your
cell phone. 

> 
> 
> I have been documenting my progress so far, to try to aid others
> following my path - this may be useful to elaborate on what I am doing
> and have achieved so far.
> 
> 
> Regards,
> 
> Elroy Liddington.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


^ permalink raw reply

* Ubuntu 10.04 - BlueZ 4.60 - Console-only BlueZ setup
From: elroy @ 2010-11-08  7:09 UTC (permalink / raw)
  To: linux-bluetooth

The link helps:

http://wlug.org.nz/ServerInstallBluetoothSetupHOWTO

^ permalink raw reply

* Ubuntu 10.04 - BlueZ 4.60 - Console-only BlueZ setup
From: elroy @ 2010-11-08  7:01 UTC (permalink / raw)
  To: linux-bluetooth

Hi.

I'm trying to setup a Ubuntu 10.04 Server with a BT USB adapter to be 
able to connect and send/receive files from a cellphone.


I am trying to do this setup via standard bash shell console only.

The problem I seem to be running into, is unlike the version of BlueZ in 
Ubuntu 7.04, I cannot access MAN pages for BlueZ config files 
(main.conf/etc), and am struggling to find anything that resembles 
orderly documentation on the 'Net.

So far, I can get this:



bluetoothd8643?: pin_code_request (sba=00:10:60:32:3A:93, 
dba=00:18:0F:DE:98:8D)
bluetoothd8643?: No agent available for 0 request


It appears as though I need some form of D-Bus software to communicate 
to BlueZ through - this seems to require a GUI - is there any other 
simpler way to do the Pairing/Config via xxx.conf files without having 
to revert back to bluez-compat?


I have been documenting my progress so far, to try to aid others 
following my path - this may be useful to elaborate on what I am doing 
and have achieved so far.


Regards,

Elroy Liddington.

^ permalink raw reply

* [PATCH 9/9] Add __btd_error_not_authorized()
From: Gustavo F. Padovan @ 2010-11-08  6:29 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1289197787-16715-9-git-send-email-padovan@profusion.mobi>

---
 attrib/client.c   |    8 +-------
 plugins/service.c |   22 ++++++++--------------
 src/adapter.c     |    8 +-------
 src/device.c      |    8 ++------
 src/error.c       |    7 +++++++
 src/error.h       |    1 +
 6 files changed, 20 insertions(+), 34 deletions(-)

diff --git a/attrib/client.c b/attrib/client.c
index cd6e401..aadb28c 100644
--- a/attrib/client.c
+++ b/attrib/client.c
@@ -190,12 +190,6 @@ static int watcher_cmp(gconstpointer a, gconstpointer b)
 	return g_strcmp0(watcher->path, match->path);
 }
 
-static inline DBusMessage *not_authorized(DBusMessage *msg)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAuthorized",
-			"Not authorized");
-}
-
 static void append_char_dict(DBusMessageIter *iter, struct characteristic *chr)
 {
 	DBusMessageIter dict;
@@ -501,7 +495,7 @@ static DBusMessage *unregister_watcher(DBusConnection *conn,
 	l = g_slist_find_custom(prim->watchers, match, watcher_cmp);
 	watcher_free(match);
 	if (!l)
-		return not_authorized(msg);
+		return __btd_error_not_authorized(msg);
 
 	watcher = l->data;
 	g_dbus_remove_watch(conn, watcher->id);
diff --git a/plugins/service.c b/plugins/service.c
index b9f4b97..4e815fb 100644
--- a/plugins/service.c
+++ b/plugins/service.c
@@ -350,12 +350,6 @@ static inline DBusMessage *failed_strerror(DBusMessage *msg, int err)
 							"%s", strerror(err));
 }
 
-static inline DBusMessage *not_authorized(DBusMessage *msg)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAuthorized",
-					"Not Authorized");
-}
-
 static int add_xml_record(DBusConnection *conn, const char *sender,
 			struct service_adapter *serv_adapter,
 			const char *record, dbus_uint32_t *handle)
@@ -557,7 +551,7 @@ static void auth_cb(DBusError *derr, void *user_data)
 	if (derr) {
 		error("Access denied: %s", derr->message);
 
-		reply = not_authorized(auth->msg);
+		reply = __btd_error_not_authorized(auth->msg);
 		dbus_message_unref(auth->msg);
 		g_dbus_send_message(auth->conn, reply);
 		goto done;
@@ -614,20 +608,20 @@ static DBusMessage *request_authorization(DBusConnection *conn,
 	if (!user_record) {
 		user_record = find_record(serv_adapter_any, handle, sender);
 		if (!user_record)
-			return not_authorized(msg);
+			return __btd_error_not_authorized(msg);
 	}
 
 	record = sdp_record_find(user_record->handle);
 	if (record == NULL)
-		return not_authorized(msg);
+		return __btd_error_not_authorized(msg);
 
 	if (sdp_get_service_classes(record, &services) < 0) {
 		sdp_record_free(record);
-		return not_authorized(msg);
+		return __btd_error_not_authorized(msg);
 	}
 
 	if (services == NULL)
-		return not_authorized(msg);
+		return __btd_error_not_authorized(msg);
 
 	uuid = services->data;
 	uuid128 = sdp_uuid_to_uuid128(uuid);
@@ -636,7 +630,7 @@ static DBusMessage *request_authorization(DBusConnection *conn,
 
 	if (sdp_uuid2strn(uuid128, uuid_str, MAX_LEN_UUID_STR) < 0) {
 		bt_free(uuid128);
-		return not_authorized(msg);
+		return __btd_error_not_authorized(msg);
 	}
 	bt_free(uuid128);
 
@@ -664,7 +658,7 @@ static DBusMessage *request_authorization(DBusConnection *conn,
 		serv_adapter->pending_list = g_slist_remove(serv_adapter->pending_list,
 									auth);
 		g_free(auth);
-		return not_authorized(msg);
+		return __btd_error_not_authorized(msg);
 	}
 
 	return NULL;
@@ -692,7 +686,7 @@ static DBusMessage *cancel_authorization(DBusConnection *conn,
 
 	btd_cancel_authorization(&src, &auth->dst);
 
-	reply = not_authorized(auth->msg);
+	reply = __btd_error_not_authorized(auth->msg);
 	dbus_message_unref(auth->msg);
 	g_dbus_send_message(auth->conn, reply);
 
diff --git a/src/adapter.c b/src/adapter.c
index 68ae6e4..9ca41cb 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -166,12 +166,6 @@ static inline DBusMessage *not_in_progress(DBusMessage *msg, const char *str)
 								"%s", str);
 }
 
-static inline DBusMessage *not_authorized(DBusMessage *msg)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAuthorized",
-			"Not authorized");
-}
-
 static int found_device_cmp(const struct remote_dev_info *d1,
 			const struct remote_dev_info *d2)
 {
@@ -1713,7 +1707,7 @@ static DBusMessage *cancel_device_creation(DBusConnection *conn,
 		return not_in_progress(msg, "Device creation not in progress");
 
 	if (!device_is_creating(device, sender))
-		return not_authorized(msg);
+		return __btd_error_not_authorized(msg);
 
 	device_set_temporary(device, TRUE);
 
diff --git a/src/device.c b/src/device.c
index f72a9b5..5d5f23d 100644
--- a/src/device.c
+++ b/src/device.c
@@ -729,17 +729,13 @@ static DBusMessage *cancel_discover(DBusConnection *conn,
 
 	if (!dbus_message_is_method_call(device->browse->msg, DEVICE_INTERFACE,
 					"DiscoverServices"))
-		return g_dbus_create_error(msg,
-				ERROR_INTERFACE ".NotAuthorized",
-				"Not Authorized");
+		return __btd_error_not_authorized(msg);
 
 	requestor = browse_request_get_requestor(device->browse);
 
 	/* only the discover requestor can cancel the inquiry process */
 	if (!requestor || !g_str_equal(requestor, sender))
-		return g_dbus_create_error(msg,
-				ERROR_INTERFACE ".NotAuthorized",
-				"Not Authorized");
+		return __btd_error_not_authorized(msg);
 
 	discover_services_reply(device->browse, -ECANCELED, NULL);
 
diff --git a/src/error.c b/src/error.c
index c8e5ed7..c382f58 100644
--- a/src/error.c
+++ b/src/error.c
@@ -103,3 +103,10 @@ DBusMessage *__btd_error_does_not_exist(DBusMessage *msg)
 					".DoesNotExist",
 					"Does Not Exist");
 }
+
+DBusMessage *__btd_error_not_authorized(DBusMessage *msg)
+{
+	return g_dbus_create_error(msg, ERROR_INTERFACE
+					".NotAuthorized",
+					"Operation Not Authorized");
+}
diff --git a/src/error.h b/src/error.h
index bd8d724..a970c92 100644
--- a/src/error.h
+++ b/src/error.h
@@ -38,3 +38,4 @@ DBusMessage *__btd_error_not_connected(DBusMessage *msg);
 DBusMessage *__btd_error_not_available(DBusMessage *msg);
 DBusMessage *__btd_error_in_progress(DBusMessage *msg);
 DBusMessage *__btd_error_does_not_exist(DBusMessage *msg);
+DBusMessage *__btd_error_not_authorized(DBusMessage *msg);
-- 
1.7.3.1


^ permalink raw reply related

* [PATCH 8/9] Add __btd_error_does_not_exist()
From: Gustavo F. Padovan @ 2010-11-08  6:29 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1289197787-16715-8-git-send-email-padovan@profusion.mobi>

---
 plugins/service.c |   10 ++--------
 serial/port.c     |   12 ++----------
 serial/proxy.c    |    9 +--------
 src/adapter.c     |   13 ++++---------
 src/error.c       |    7 +++++++
 src/error.h       |    1 +
 6 files changed, 17 insertions(+), 35 deletions(-)

diff --git a/plugins/service.c b/plugins/service.c
index f4b71ae..b9f4b97 100644
--- a/plugins/service.c
+++ b/plugins/service.c
@@ -356,12 +356,6 @@ static inline DBusMessage *not_authorized(DBusMessage *msg)
 					"Not Authorized");
 }
 
-static inline DBusMessage *does_not_exist(DBusMessage *msg)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExist",
-					"Does Not Exist");
-}
-
 static int add_xml_record(DBusConnection *conn, const char *sender,
 			struct service_adapter *serv_adapter,
 			const char *record, dbus_uint32_t *handle)
@@ -658,7 +652,7 @@ static DBusMessage *request_authorization(DBusConnection *conn,
 
 	auth = next_pending(serv_adapter);
 	if (auth == NULL)
-		return does_not_exist(msg);
+		return __btd_error_does_not_exist(msg);
 
 	if (serv_adapter->adapter)
 		adapter_get_address(serv_adapter->adapter, &src);
@@ -689,7 +683,7 @@ static DBusMessage *cancel_authorization(DBusConnection *conn,
 
 	auth = find_pending_by_sender(serv_adapter, sender);
 	if (auth == NULL)
-		return does_not_exist(msg);
+		return __btd_error_does_not_exist(msg);
 
 	if (serv_adapter->adapter)
 		adapter_get_address(serv_adapter->adapter, &src);
diff --git a/serial/port.c b/serial/port.c
index b593311..c79243e 100644
--- a/serial/port.c
+++ b/serial/port.c
@@ -57,7 +57,6 @@
 #include "port.h"
 
 #define SERIAL_PORT_INTERFACE	"org.bluez.Serial"
-#define ERROR_DOES_NOT_EXIST	"org.bluez.Error.DoesNotExist"
 
 #define MAX_OPEN_TRIES		5
 #define OPEN_WAIT		300	/* ms. udev node creation retry wait */
@@ -235,13 +234,6 @@ void port_release_all(void)
 	g_slist_free(devices);
 }
 
-static inline DBusMessage *does_not_exist(DBusMessage *msg,
-					const char *description)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExist",
-							"%s", description);
-}
-
 static inline DBusMessage *failed(DBusMessage *msg, const char *description)
 {
 	return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
@@ -497,7 +489,7 @@ static DBusMessage *port_connect(DBusConnection *conn,
 
 		channel = strtol(pattern, &endptr, 10);
 		if ((endptr && *endptr != '\0') || channel < 1 || channel > 30)
-			return does_not_exist(msg, "Does not match");
+			return __btd_error_does_not_exist(msg);
 
 		port = create_port(device, NULL, channel);
 	}
@@ -538,7 +530,7 @@ static DBusMessage *port_disconnect(DBusConnection *conn,
 
 	port = find_port(device->ports, dev);
 	if (!port)
-		return does_not_exist(msg, "Port does not exist");
+		return __btd_error_does_not_exist(msg);
 
 	if (!port->listener_id)
 		return failed(msg, "Not connected");
diff --git a/serial/proxy.c b/serial/proxy.c
index de82f9a..9321bd4 100644
--- a/serial/proxy.c
+++ b/serial/proxy.c
@@ -133,13 +133,6 @@ static void proxy_free(struct serial_proxy *prx)
 	g_free(prx);
 }
 
-static inline DBusMessage *does_not_exist(DBusMessage *msg,
-					const char *description)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".DoesNotExist",
-							"%s", description);
-}
-
 static inline DBusMessage *failed(DBusMessage *msg, const char *description)
 {
 	return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
@@ -1115,7 +1108,7 @@ static DBusMessage *remove_proxy(DBusConnection *conn,
 
 	l = g_slist_find_custom(adapter->proxies, path, proxy_pathcmp);
 	if (!l)
-		return does_not_exist(msg, "Invalid proxy path");
+		return __btd_error_does_not_exist(msg);
 
 	prx = l->data;
 
diff --git a/src/adapter.c b/src/adapter.c
index ffbc943..68ae6e4 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1829,9 +1829,8 @@ static DBusMessage *remove_device(DBusConnection *conn, DBusMessage *msg,
 	l = g_slist_find_custom(adapter->devices,
 			path, (GCompareFunc) device_path_cmp);
 	if (!l)
-		return g_dbus_create_error(msg,
-				ERROR_INTERFACE ".DoesNotExist",
-				"Device does not exist");
+		return __btd_error_does_not_exist(msg);
+
 	device = l->data;
 
 	if (device_is_temporary(device) || device_is_busy(device))
@@ -1867,9 +1866,7 @@ static DBusMessage *find_device(DBusConnection *conn, DBusMessage *msg,
 	l = g_slist_find_custom(adapter->devices,
 			address, (GCompareFunc) device_address_cmp);
 	if (!l)
-		return g_dbus_create_error(msg,
-				ERROR_INTERFACE ".DoesNotExist",
-				"Device does not exist");
+		return __btd_error_does_not_exist(msg);
 
 	device = l->data;
 
@@ -1940,9 +1937,7 @@ static DBusMessage *unregister_agent(DBusConnection *conn, DBusMessage *msg,
 	name = dbus_message_get_sender(msg);
 
 	if (!adapter->agent || !agent_matches(adapter->agent, name, path))
-		return g_dbus_create_error(msg,
-					ERROR_INTERFACE ".DoesNotExist",
-					"No such agent");
+		return __btd_error_does_not_exist(msg);
 
 	agent_free(adapter->agent);
 	adapter->agent = NULL;
diff --git a/src/error.c b/src/error.c
index 8000467..c8e5ed7 100644
--- a/src/error.c
+++ b/src/error.c
@@ -96,3 +96,10 @@ DBusMessage *__btd_error_not_available(DBusMessage *msg)
 					".NotAvailable",
 					"Operation currently not available");
 }
+
+DBusMessage *__btd_error_does_not_exist(DBusMessage *msg)
+{
+	return g_dbus_create_error(msg, ERROR_INTERFACE
+					".DoesNotExist",
+					"Does Not Exist");
+}
diff --git a/src/error.h b/src/error.h
index c023809..bd8d724 100644
--- a/src/error.h
+++ b/src/error.h
@@ -37,3 +37,4 @@ DBusMessage *__btd_error_not_supported(DBusMessage *msg);
 DBusMessage *__btd_error_not_connected(DBusMessage *msg);
 DBusMessage *__btd_error_not_available(DBusMessage *msg);
 DBusMessage *__btd_error_in_progress(DBusMessage *msg);
+DBusMessage *__btd_error_does_not_exist(DBusMessage *msg);
-- 
1.7.3.1


^ permalink raw reply related

* [PATCH 7/9] Add __btd_error_busy()
From: Gustavo F. Padovan @ 2010-11-08  6:29 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1289197787-16715-7-git-send-email-padovan@profusion.mobi>

---
 audio/headset.c |    4 +---
 audio/sink.c    |    6 ++----
 audio/source.c  |    3 +--
 input/device.c  |    6 ------
 src/error.c     |    6 ++++++
 src/error.h     |    1 +
 6 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/audio/headset.c b/audio/headset.c
index 017f02e..15853a8 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -1808,9 +1808,7 @@ static DBusMessage *hs_play(DBusConnection *conn, DBusMessage *msg,
 			hs->pending->msg = dbus_message_ref(msg);
 			return NULL;
 		}
-		return g_dbus_create_error(msg, ERROR_INTERFACE
-						".InProgress",
-						"Play in Progress");
+		return __btd_error_busy(msg);
 	case HEADSET_STATE_PLAYING:
 		return g_dbus_create_error(msg, ERROR_INTERFACE
 						".AlreadyConnected",
diff --git a/audio/sink.c b/audio/sink.c
index 3c55c74..49c8bfc 100644
--- a/audio/sink.c
+++ b/audio/sink.c
@@ -423,8 +423,7 @@ static DBusMessage *sink_connect(DBusConnection *conn,
 						"Unable to get a session");
 
 	if (sink->connect || sink->disconnect)
-		return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
-						"%s", strerror(EBUSY));
+		return __btd_error_busy(msg);
 
 	if (sink->stream_state >= AVDTP_STATE_OPEN)
 		return g_dbus_create_error(msg, ERROR_INTERFACE
@@ -459,8 +458,7 @@ static DBusMessage *sink_disconnect(DBusConnection *conn,
 		return __btd_error_not_connected(msg);
 
 	if (sink->connect || sink->disconnect)
-		return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
-						"%s", strerror(EBUSY));
+		return __btd_error_busy(msg);
 
 	if (sink->stream_state < AVDTP_STATE_OPEN) {
 		DBusMessage *reply = dbus_message_new_method_return(msg);
diff --git a/audio/source.c b/audio/source.c
index 4d47853..6767591 100644
--- a/audio/source.c
+++ b/audio/source.c
@@ -390,8 +390,7 @@ static DBusMessage *source_connect(DBusConnection *conn,
 						"Unable to get a session");
 
 	if (source->connect || source->disconnect)
-		return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed",
-						"%s", strerror(EBUSY));
+		return __btd_error_busy(msg);
 
 	if (source->stream_state >= AVDTP_STATE_OPEN)
 		return g_dbus_create_error(msg, ERROR_INTERFACE
diff --git a/input/device.c b/input/device.c
index 1ccb2b0..6968b6c 100644
--- a/input/device.c
+++ b/input/device.c
@@ -325,12 +325,6 @@ static inline DBusMessage *not_supported(DBusMessage *msg)
 							"Not supported");
 }
 
-static inline DBusMessage *in_progress(DBusMessage *msg)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".InProgress",
-				"Device connection already in progress");
-}
-
 static inline DBusMessage *already_connected(DBusMessage *msg)
 {
 	return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyConnected",
diff --git a/src/error.c b/src/error.c
index 8b91a03..8000467 100644
--- a/src/error.c
+++ b/src/error.c
@@ -56,6 +56,12 @@ DBusMessage *__btd_error_invalid_args(DBusMessage *msg)
 					"Invalid arguments in method call");
 }
 
+DBusMessage *__btd_error_busy(DBusMessage *msg)
+{
+	return g_dbus_create_error(msg, ERROR_INTERFACE ".InProgress",
+					"Operation already in progress");
+}
+
 DBusMessage *__btd_error_already_exists(DBusMessage *msg)
 {
 	return g_dbus_create_error(msg,
diff --git a/src/error.h b/src/error.h
index dfdc933..c023809 100644
--- a/src/error.h
+++ b/src/error.h
@@ -31,6 +31,7 @@ DBusHandlerResult error_common_reply(DBusConnection *conn, DBusMessage *msg,
 					const char *name, const char *descr);
 
 DBusMessage *__btd_error_invalid_args(DBusMessage *msg);
+DBusMessage *__btd_error_busy(DBusMessage *msg);
 DBusMessage *__btd_error_already_exists(DBusMessage *msg);
 DBusMessage *__btd_error_not_supported(DBusMessage *msg);
 DBusMessage *__btd_error_not_connected(DBusMessage *msg);
-- 
1.7.3.1


^ permalink raw reply related

* [PATCH 6/9] Add __btd_error_not_available()
From: Gustavo F. Padovan @ 2010-11-08  6:29 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1289197787-16715-6-git-send-email-padovan@profusion.mobi>

---
 audio/headset.c   |    9 +++------
 plugins/service.c |   16 +++-------------
 src/error.c       |    7 +++++++
 src/error.h       |    1 +
 4 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/audio/headset.c b/audio/headset.c
index fd358a0..017f02e 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -1796,8 +1796,7 @@ static DBusMessage *hs_play(DBusConnection *conn, DBusMessage *msg,
 	if (sco_hci) {
 		error("Refusing Headset.Play() because SCO HCI routing "
 				"is enabled");
-		return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAvailable",
-						"Operation not Available");
+		return __btd_error_not_available(msg);
 	}
 
 	switch (hs->state) {
@@ -1842,8 +1841,7 @@ static DBusMessage *hs_get_speaker_gain(DBusConnection *conn,
 	dbus_uint16_t gain;
 
 	if (hs->state < HEADSET_STATE_CONNECTED)
-		return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAvailable",
-						"Operation not Available");
+		return __btd_error_not_available(msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
@@ -1868,8 +1866,7 @@ static DBusMessage *hs_get_mic_gain(DBusConnection *conn,
 	dbus_uint16_t gain;
 
 	if (hs->state < HEADSET_STATE_CONNECTED || slc == NULL)
-		return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAvailable",
-						"Operation not Available");
+		return __btd_error_not_available(msg);
 
 	reply = dbus_message_new_method_return(msg);
 	if (!reply)
diff --git a/plugins/service.c b/plugins/service.c
index 6f6a275..f4b71ae 100644
--- a/plugins/service.c
+++ b/plugins/service.c
@@ -339,12 +339,6 @@ static void exit_callback(DBusConnection *conn, void *user_data)
 	g_free(user_record);
 }
 
-static inline DBusMessage *not_available(DBusMessage *msg)
-{
-	return g_dbus_create_error(msg, ERROR_INTERFACE ".NotAvailable",
-							"Not Available");
-}
-
 static inline DBusMessage *failed(DBusMessage *msg)
 {
 	return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed", "Failed");
@@ -419,9 +413,7 @@ static DBusMessage *update_record(DBusConnection *conn, DBusMessage *msg,
 
 	if (remove_record_from_server(handle) < 0) {
 		sdp_record_free(sdp_record);
-		return g_dbus_create_error(msg,
-				ERROR_INTERFACE ".NotAvailable",
-				"Not Available");
+		return __btd_error_not_available(msg);
 	}
 
 	if (serv_adapter->adapter)
@@ -465,9 +457,7 @@ static DBusMessage *update_xml_record(DBusConnection *conn,
 	user_record = find_record(serv_adapter, handle,
 				dbus_message_get_sender(msg));
 	if (!user_record)
-		return g_dbus_create_error(msg,
-				ERROR_INTERFACE ".NotAvailable",
-				"Not Available");
+		return __btd_error_not_available(msg);
 
 	sdp_record = sdp_xml_parse_record(record, len);
 	if (!sdp_record) {
@@ -552,7 +542,7 @@ static DBusMessage *remove_service_record(DBusConnection *conn,
 	sender = dbus_message_get_sender(msg);
 
 	if (remove_record(conn, sender, serv_adapter, handle) < 0)
-		return not_available(msg);
+		return __btd_error_not_available(msg);
 
 	return dbus_message_new_method_return(msg);
 }
diff --git a/src/error.c b/src/error.c
index 11bc520..8b91a03 100644
--- a/src/error.c
+++ b/src/error.c
@@ -83,3 +83,10 @@ DBusMessage *__btd_error_in_progress(DBusMessage *msg)
 					".InProgress",
 					"In Progress");
 }
+
+DBusMessage *__btd_error_not_available(DBusMessage *msg)
+{
+	return g_dbus_create_error(msg, ERROR_INTERFACE
+					".NotAvailable",
+					"Operation currently not available");
+}
diff --git a/src/error.h b/src/error.h
index e241b92..dfdc933 100644
--- a/src/error.h
+++ b/src/error.h
@@ -34,4 +34,5 @@ DBusMessage *__btd_error_invalid_args(DBusMessage *msg);
 DBusMessage *__btd_error_already_exists(DBusMessage *msg);
 DBusMessage *__btd_error_not_supported(DBusMessage *msg);
 DBusMessage *__btd_error_not_connected(DBusMessage *msg);
+DBusMessage *__btd_error_not_available(DBusMessage *msg);
 DBusMessage *__btd_error_in_progress(DBusMessage *msg);
-- 
1.7.3.1


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox