From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: "Elvis Pfützenreuter" <epx@signove.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH] Update service class on adapter-by-adapter basis
Date: Wed, 28 Apr 2010 16:45:45 +0300 [thread overview]
Message-ID: <o2x2d5a2c101004280645g2ef2bacdw818c864f81cec89d@mail.gmail.com> (raw)
In-Reply-To: <1270676053-15699-1-git-send-email-epx@signove.com>
Hi Elvis,
On Thu, Apr 8, 2010 at 12:34 AM, Elvis Pfützenreuter <epx@signove.com> wrote:
> From: Elvis Pfutzenreuter <epx@signove.com>
>
> When a service is added (or removed) for a specific adapter,
> only the service class of that specific adapter shall be updated.
> ---
> src/adapter.c | 15 +++++++++++++++
> src/adapter.h | 2 ++
> src/sdpd-service.c | 24 +++++++++++++++---------
> src/sdpd.h | 1 -
> 4 files changed, 32 insertions(+), 10 deletions(-)
>
> diff --git a/src/adapter.c b/src/adapter.c
> index 8fc47b9..1530f83 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -1103,6 +1103,21 @@ void adapter_service_remove(const bdaddr_t *bdaddr, void *rec)
> adapter_service_ins_rem(bdaddr, rec, FALSE);
> }
>
> +sdp_list_t *adapter_service_list(const bdaddr_t *bdaddr)
> +{
> + struct btd_adapter *adapter;
> + sdp_list_t *list = NULL;
> +
> + if (bacmp(bdaddr, BDADDR_ANY) != 0) {
> + /* Only one adapter */
> + adapter = manager_find_adapter(bdaddr);
> + if (adapter)
> + list = adapter->services;
> + }
> +
> + return list;
> +}
The use of BDADDR_ANY doesn't seems really necessary, it seems that
adapter_service_list will never get called passing BDADDR_ANY and if
you think about it, it doesn't really make much sense to maintain a
list for adapter any since it is just a combination of the real
adapters. Also if you have to call manager_find_adapter to resolve the
adapter pointer than it is better to place it manager.c resolve it
there and have adapter_service_list to take adapter pointer as
parameter.
> struct btd_device *adapter_create_device(DBusConnection *conn,
> struct btd_adapter *adapter,
> const char *address)
> diff --git a/src/adapter.h b/src/adapter.h
> index e4307d8..5975299 100644
> --- a/src/adapter.h
> +++ b/src/adapter.h
> @@ -23,6 +23,7 @@
> */
>
> #include <bluetooth/bluetooth.h>
> +#include <bluetooth/sdp.h>
> #include <dbus/dbus.h>
> #include <glib.h>
>
> @@ -123,6 +124,7 @@ void adapter_update_tx_power(bdaddr_t *bdaddr, uint8_t status, void *ptr);
> void adapter_update_local_name(bdaddr_t *bdaddr, uint8_t status, void *ptr);
> void adapter_service_insert(const bdaddr_t *bdaddr, void *rec);
> void adapter_service_remove(const bdaddr_t *bdaddr, void *rec);
> +sdp_list_t *adapter_service_list(const bdaddr_t *bdaddr);
> void adapter_set_class_complete(bdaddr_t *bdaddr, uint8_t status);
>
> struct agent *adapter_get_agent(struct btd_adapter *adapter);
> diff --git a/src/sdpd-service.c b/src/sdpd-service.c
> index 4551577..cddd87e 100644
> --- a/src/sdpd-service.c
> +++ b/src/sdpd-service.c
> @@ -47,11 +47,10 @@
> #include "sdpd.h"
> #include "logging.h"
> #include "manager.h"
> +#include "adapter.h"
>
> static sdp_record_t *server = NULL;
>
> -static uint8_t service_classes = 0x00;
> -
> static uint16_t did_vendor = 0x0000;
> static uint16_t did_product = 0x0000;
> static uint16_t did_version = 0x0000;
> @@ -98,9 +97,9 @@ static void update_db_timestamp(void)
> sdp_attr_replace(server, SDP_ATTR_SVCDB_STATE, d);
> }
>
> -static void update_svclass_list(const bdaddr_t *src)
> +static void update_adapter_svclass_list(const bdaddr_t *src)
> {
> - sdp_list_t *list = sdp_get_record_list();
> + sdp_list_t *list = adapter_service_list(src);
> uint8_t val = 0;
>
> for (; list; list = list->next) {
> @@ -156,14 +155,21 @@ static void update_svclass_list(const bdaddr_t *src)
>
> SDPDBG("Service classes 0x%02x", val);
>
> - service_classes = val;
> -
> manager_update_svc(src, val);
> }
>
> -uint8_t get_service_classes(const bdaddr_t *bdaddr)
> +static void update_svclass_list(const bdaddr_t *src)
> {
> - return service_classes;
> + bdaddr_t bdaddr;
> + GSList *adapters = manager_get_adapters();
> +
> + for (; adapters; adapters = adapters->next) {
> + adapter_get_address(adapters->data, &bdaddr);
> +
> + if (bacmp(src, BDADDR_ANY) == 0 || bacmp(src, &bdaddr) == 0)
> + update_adapter_svclass_list(&bdaddr);
> + }
> +
> }
>
> void create_ext_inquiry_response(const char *name,
> @@ -613,7 +619,7 @@ success:
> }
>
> update_db_timestamp();
> - update_svclass_list(BDADDR_ANY);
> + update_svclass_list(&req->device);
>
> /* Build a rsp buffer */
> bt_put_unaligned(htonl(rec->handle), (uint32_t *) rsp->data);
> diff --git a/src/sdpd.h b/src/sdpd.h
> index 1f0a229..d496a4a 100644
> --- a/src/sdpd.h
> +++ b/src/sdpd.h
> @@ -93,7 +93,6 @@ void stop_sdp_server(void);
> int add_record_to_server(const bdaddr_t *src, sdp_record_t *rec);
> int remove_record_from_server(uint32_t handle);
>
> -uint8_t get_service_classes(const bdaddr_t *bdaddr);
> void create_ext_inquiry_response(const char *name,
> int8_t tx_power, sdp_list_t *services,
> uint8_t *data);
> --
> 1.6.3.3
>
> --
> 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
>
--
Luiz Augusto von Dentz
Computer Engineer
next prev parent reply other threads:[~2010-04-28 13:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-07 21:34 [PATCH] Update service class on adapter-by-adapter basis Elvis Pfützenreuter
2010-04-28 13:45 ` Luiz Augusto von Dentz [this message]
-- strict thread matches above, loose matches on Subject: below --
2010-04-28 17:46 Elvis Pfutzenreuter
2010-04-28 19:17 ` Johan Hedberg
2010-04-28 19:47 Elvis Pfutzenreuter
2010-04-28 20:00 ` Johan Hedberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=o2x2d5a2c101004280645g2ef2bacdw818c864f81cec89d@mail.gmail.com \
--to=luiz.dentz@gmail.com \
--cc=epx@signove.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).