linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Bluez-devel] [DBUS] remote name patch
@ 2006-01-20 18:37 Claudio Takahasi
  2006-01-21  1:48 ` Marcel Holtmann
  0 siblings, 1 reply; 10+ messages in thread
From: Claudio Takahasi @ 2006-01-20 18:37 UTC (permalink / raw)
  To: bluez-devel

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

Hi Marcel,

The attached patch improves the remote name request. It's the same
approach of "hcitool name", I am using the textfile library. Maybe we
should move the function "get_device_name" to a common place, like
"libtextfile.a" or create a new utility library(ie: "libbluezutil.a").

Another point is an option to "force" send HCI remote name instead of
use the stored value. If you want I can add an extra argument(boolean)
to indicate the type(use cache/no cache), but keeping the backward
compatibility, where the default request signature is use the cache.

1. RemoteName("AA:BB:CC:DD:EE:FF")  == RemoteName("AA:BB:CC:DD:EE:FF", TRUE)
2. RemoteName("AA:BB:CC:DD:EE:FF", FALSE)

Regards,
Claudio.
--
---------------------------------------------------------
Claudio Takahasi
Instituto Nokia de Tecnologia - INdT

[-- Attachment #2: remote_name_cache01.patch --]
[-- Type: text/x-patch, Size: 4063 bytes --]

--- bluez-utils-cvs.orig/hcid/dbus.c	2006-01-03 11:28:58.000000000 -0200
+++ bluez-utils-cvs/hcid/dbus.c	2006-01-20 12:54:29.000000000 -0200
@@ -45,6 +45,7 @@
 
 #include "hcid.h"
 #include "dbus.h"
+#include "textfile.h"
 
 #ifndef DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT
 #define DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT	0x00
@@ -98,6 +99,19 @@
 	unregister_function_t	*unreg_func;
 	get_svc_table_func_t	*get_svc_table;	/* return the service table */
 };
+/*
+ * Utility functions
+ */
+static char *get_device_name(const bdaddr_t *local, const bdaddr_t *peer)
+{
+	char filename[PATH_MAX + 1], addr[18];
+
+	ba2str(local, addr);
+	snprintf(filename, PATH_MAX, "%s/%s/names", STORAGEDIR, addr);
+
+	ba2str(peer, addr);
+	return textfile_get(filename, addr);
+}
 
 /*
  * D-Bus error messages functions and declarations.
@@ -1709,13 +1723,17 @@
 static DBusMessage* handle_remote_name_req(DBusMessage *msg, void *data)
 {
 	DBusMessage *reply = NULL;
+	DBusMessage *signal = NULL;
 	struct hci_dbus_data *dbus_data = data;
-	int dd = -1;
 	const char *str_bdaddr;
+	char *name;
+	char path[MAX_PATH_LENGTH];
 	bdaddr_t bdaddr;
+	struct hci_dev_info di;
 	struct hci_request rq;
 	remote_name_req_cp cp;
 	evt_cmd_status rp;
+	int dd = -1;
 
 	dbus_message_get_args(msg, NULL,
 					DBUS_TYPE_STRING, &str_bdaddr,
@@ -1723,36 +1741,72 @@
 
 	str2ba(str_bdaddr, &bdaddr);
 
-	dd = hci_open_dev(dbus_data->dev_id);
-	if (dd < 0) {
-		syslog(LOG_ERR, "Unable to open device %d: %s (%d)",
-					dbus_data->dev_id, strerror(errno), errno);
-		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
+	if (hci_devinfo(dbus_data->dev_id, &di) < 0) {
+		syslog(LOG_ERR, "Can't get device info");
+		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV);
 		goto failed;
 	}
 
-	memset(&cp, 0, sizeof(cp));
-	cp.bdaddr = bdaddr;
-	cp.pscan_rep_mode = 0x01;
+	/* Try retrieve from local cache */
+	name = get_device_name(&di.bdaddr, &bdaddr);
+	if (name) {
+		reply = dbus_message_new_method_return(msg);
 
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_LINK_CTL;
-	rq.ocf    = OCF_REMOTE_NAME_REQ;
-	rq.cparam = &cp;
-	rq.clen   = REMOTE_NAME_REQ_CP_SIZE;
-	rq.rparam = &rp;
-	rq.rlen   = EVT_CMD_STATUS_SIZE;
-	rq.event  = EVT_CMD_STATUS;
+		snprintf(path, sizeof(path), "%s/hci%d/%s", DEVICE_PATH, dbus_data->dev_id, BLUEZ_HCI);
 
-	if (hci_send_req(dd, &rq, 100) < 0) {
-		syslog(LOG_ERR, "Unable to send remote name request: %s (%d)",
-							strerror(errno), errno);
-		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
-		goto failed;
+		signal = dbus_message_new_signal(path, DEV_HCI_INTERFACE,
+						 BLUEZ_HCI_REMOTE_NAME);
+
+		dbus_message_append_args(signal,
+					 DBUS_TYPE_STRING, &str_bdaddr,
+					 DBUS_TYPE_STRING, &name,
+					 DBUS_TYPE_INVALID);
+
+		if (dbus_connection_send(connection, signal, NULL) == FALSE) {
+			syslog(LOG_ERR, "Can't send D-BUS remote name signal message");
+			goto failed;
+		}
+
+		dbus_message_unref(signal);
+
+		reply = dbus_message_new_method_return(msg);
+		free(name);
+
+	} else {
+
+		/* Send HCI command */
+		dd = hci_open_dev(dbus_data->dev_id);
+		if (dd < 0) {
+			syslog(LOG_ERR, "Unable to open device %d: %s (%d)",
+						dbus_data->dev_id, strerror(errno), errno);
+			reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
+			goto failed;
+		}
+
+		memset(&cp, 0, sizeof(cp));
+		cp.bdaddr = bdaddr;
+		cp.pscan_rep_mode = 0x01;
+
+		memset(&rq, 0, sizeof(rq));
+		rq.ogf    = OGF_LINK_CTL;
+		rq.ocf    = OCF_REMOTE_NAME_REQ;
+		rq.cparam = &cp;
+		rq.clen   = REMOTE_NAME_REQ_CP_SIZE;
+		rq.rparam = &rp;
+		rq.rlen   = EVT_CMD_STATUS_SIZE;
+		rq.event  = EVT_CMD_STATUS;
+
+		if (hci_send_req(dd, &rq, 100) < 0) {
+			syslog(LOG_ERR, "Unable to send remote name request: %s (%d)",
+						strerror(errno), errno);
+			reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
+			goto failed;
+		}
+
+		reply = dbus_message_new_method_return(msg);
 	}
 
 	reply = dbus_message_new_method_return(msg);
-
 failed:
 	if (dd >= 0)
 		hci_close_dev(dd);












^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-20 18:37 [Bluez-devel] [DBUS] remote name patch Claudio Takahasi
@ 2006-01-21  1:48 ` Marcel Holtmann
  2006-01-23 16:33   ` Claudio Takahasi
  0 siblings, 1 reply; 10+ messages in thread
From: Marcel Holtmann @ 2006-01-21  1:48 UTC (permalink / raw)
  To: bluez-devel

Hi Claudio,

> The attached patch improves the remote name request. It's the same
> approach of "hcitool name", I am using the textfile library. Maybe we
> should move the function "get_device_name" to a common place, like
> "libtextfile.a" or create a new utility library(ie: "libbluezutil.a").

before I pick up this patch, we might wanna discuss the three different
kinds of device names we will have in the future. The full remote name
of a device, the local cached name and then the name (shorted or full)
from the extended inquiry. How do we deal with them? Do we wanna give
the user of the D-Bus API any chance to distinguish between them?

Regards

Marcel




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-21  1:48 ` Marcel Holtmann
@ 2006-01-23 16:33   ` Claudio Takahasi
  2006-01-23 17:08     ` Marcel Holtmann
  0 siblings, 1 reply; 10+ messages in thread
From: Claudio Takahasi @ 2006-01-23 16:33 UTC (permalink / raw)
  To: bluez-devel

Hi Marcel,


I has just read some parts of "Specification Change Request". What is
the current status of the BlueZ Kernel? I figure out that there is a
function to parse the extended inquiry result event, however in the
code I have the 240 bytes are being ignored.

I prefer use just one signal instead of add a new signal to represent
the extended inquiry response. My suggestion is unify the standard and
the extended inquiry. If the user wants to know some response
properties, we can add an extra signal field to indicate the
type(Standard, with RSSI or EIR) and the remote name property(shorted,
full, cached).

Regarding the shorted/full name, in my opinion applications generally
will not want to distinguish the name type. The others UUIDs(service,
manufacturer, ...) included in the EIR packet can be ignore for now.
If required, we add extra fields in the inquiry cache to store these
UUIDs and add an D-Bus services to retrieve these data later.

Inquiry Result signal format proposal:

/* type flags */
#define STD_INQUIRY_RESPONSE   0x00010000
#define RSSI_INQUIRY_RESPONSE  0x00010000  /* RSSI included*/
#define EIR_INQUIRY_RESPONSE   0x01000000  /* */

/* name flags */
#define SHORTED_NAME           0x00000001
#define FULL_NAME              0x00000010
#define CACHED_NAME            0x00000100

Signal arguments:
UINT32: type (STD_INQUIRY_RESPONSE/RSSI_INQUIRY_RESPONSE/EIR_INQUIRY_RESPON=
SE
| FLAGS
String: BDADDR
String: name /* "n/a", cached value, shorted or full name */
UINT32: Device class
INT32: RSSI

"n/a" in the name field will be applied to standard inquiry, where the
remote name should be retrieved later or for EIR, when the local name
length is zero.

What do you think?  Do you have another suggestion or comments?

Regards,
Claudio.

On 1/20/06, Marcel Holtmann <marcel@holtmann.org> wrote:
> Hi Claudio,
>
> > The attached patch improves the remote name request. It's the same
> > approach of "hcitool name", I am using the textfile library. Maybe we
> > should move the function "get_device_name" to a common place, like
> > "libtextfile.a" or create a new utility library(ie: "libbluezutil.a").
>
> before I pick up this patch, we might wanna discuss the three different
> kinds of device names we will have in the future. The full remote name
> of a device, the local cached name and then the name (shorted or full)
> from the extended inquiry. How do we deal with them? Do we wanna give
> the user of the D-Bus API any chance to distinguish between them?
>
> Regards
>
> Marcel
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep through log fi=
les
> for problems?  Stop!  Download the new AJAX search engine that makes
> searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
> http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D103432&bid=3D230486&dat=
=3D121642
> _______________________________________________
> Bluez-devel mailing list
> Bluez-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bluez-devel
>


--
---------------------------------------------------------
Claudio Takahasi
Instituto Nokia de Tecnologia - INdT


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-23 16:33   ` Claudio Takahasi
@ 2006-01-23 17:08     ` Marcel Holtmann
  2006-01-23 18:54       ` Claudio Takahasi
  0 siblings, 1 reply; 10+ messages in thread
From: Marcel Holtmann @ 2006-01-23 17:08 UTC (permalink / raw)
  To: bluez-devel

Hi Claudio,

> I has just read some parts of "Specification Change Request". What is
> the current status of the BlueZ Kernel? I figure out that there is a
> function to parse the extended inquiry result event, however in the
> code I have the 240 bytes are being ignored.

the code inside the kernel only keeps the inquiry cache up-to-date,
because you need this for the connection establishment.

> I prefer use just one signal instead of add a new signal to represent
> the extended inquiry response. My suggestion is unify the standard and
> the extended inquiry. If the user wants to know some response
> properties, we can add an extra signal field to indicate the
> type(Standard, with RSSI or EIR) and the remote name property(shorted,
> full, cached).
> 
> Regarding the shorted/full name, in my opinion applications generally
> will not want to distinguish the name type. The others UUIDs(service,
> manufacturer, ...) included in the EIR packet can be ignore for now.
> If required, we add extra fields in the inquiry cache to store these
> UUIDs and add an D-Bus services to retrieve these data later.
> 
> Inquiry Result signal format proposal:
> 
> /* type flags */
> #define STD_INQUIRY_RESPONSE   0x00010000
> #define RSSI_INQUIRY_RESPONSE  0x00010000  /* RSSI included*/
> #define EIR_INQUIRY_RESPONSE   0x01000000  /* */
> 
> /* name flags */
> #define SHORTED_NAME           0x00000001
> #define FULL_NAME              0x00000010
> #define CACHED_NAME            0x00000100
> 
> Signal arguments:
> UINT32: type (STD_INQUIRY_RESPONSE/RSSI_INQUIRY_RESPONSE/EIR_INQUIRY_RESPONSE
> | FLAGS
> String: BDADDR
> String: name /* "n/a", cached value, shorted or full name */
> UINT32: Device class
> INT32: RSSI
> 
> "n/a" in the name field will be applied to standard inquiry, where the
> remote name should be retrieved later or for EIR, when the local name
> length is zero.
> 
> What do you think?  Do you have another suggestion or comments?

Don't try to distinguish the different inquiry modes on the D-Bus
interface. All of them are only an implementation detail.

Regarding the name, we might simply say the hcid/bluetoothd always sends
a remote name signal if something changes. So it might get the short
name from the extended inquiry first and after that it receives the full
remote name. We can also always send the cached name and we update that
name on every service discovery, because then it is at zero cost.

So we have one device name. This maybe a cached, a remote or a shortened
name. The application doesn't really have to care and it gets updates as
soon as hcid/bluetoothd knows them.

Besides the device name, we should implement an alias name. This name is
associated with the BD_ADDR and can be changed by the user if he/she
doesn't like the device name. Implementing this alias through the D-Bus
interface makes it available for all applications and we can store the
aliases in /var/lib/bluetooth/<bdaddr>/aliases.

Regards

Marcel




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-23 17:08     ` Marcel Holtmann
@ 2006-01-23 18:54       ` Claudio Takahasi
  2006-01-23 20:14         ` Marcel Holtmann
  0 siblings, 1 reply; 10+ messages in thread
From: Claudio Takahasi @ 2006-01-23 18:54 UTC (permalink / raw)
  To: bluez-devel

Hi Marcel,

On 1/23/06, Marcel Holtmann <marcel@holtmann.org> wrote:
> Hi Claudio,
>
> > I has just read some parts of "Specification Change Request". What is
> > the current status of the BlueZ Kernel? I figure out that there is a
> > function to parse the extended inquiry result event, however in the
> > code I have the 240 bytes are being ignored.
>
> the code inside the kernel only keeps the inquiry cache up-to-date,
> because you need this for the connection establishment.
>
> > I prefer use just one signal instead of add a new signal to represent
> > the extended inquiry response. My suggestion is unify the standard and
> > the extended inquiry. If the user wants to know some response
> > properties, we can add an extra signal field to indicate the
> > type(Standard, with RSSI or EIR) and the remote name property(shorted,
> > full, cached).
> >
> > Regarding the shorted/full name, in my opinion applications generally
> > will not want to distinguish the name type. The others UUIDs(service,
> > manufacturer, ...) included in the EIR packet can be ignore for now.
> > If required, we add extra fields in the inquiry cache to store these
> > UUIDs and add an D-Bus services to retrieve these data later.
> >
> > Inquiry Result signal format proposal:
> >
> > /* type flags */
> > #define STD_INQUIRY_RESPONSE   0x00010000
> > #define RSSI_INQUIRY_RESPONSE  0x00010000  /* RSSI included*/
> > #define EIR_INQUIRY_RESPONSE   0x01000000  /* */
> >
> > /* name flags */
> > #define SHORTED_NAME           0x00000001
> > #define FULL_NAME              0x00000010
> > #define CACHED_NAME            0x00000100
> >
> > Signal arguments:
> > UINT32: type (STD_INQUIRY_RESPONSE/RSSI_INQUIRY_RESPONSE/EIR_INQUIRY_RE=
SPONSE
> > | FLAGS
> > String: BDADDR
> > String: name /* "n/a", cached value, shorted or full name */
> > UINT32: Device class
> > INT32: RSSI
> >
> > "n/a" in the name field will be applied to standard inquiry, where the
> > remote name should be retrieved later or for EIR, when the local name
> > length is zero.
> >
> > What do you think?  Do you have another suggestion or comments?
>
> Don't try to distinguish the different inquiry modes on the D-Bus
> interface. All of them are only an implementation detail.
[Claudio Takahasi]
ok. let's keep the same "InquiryResult" signature.

>
> Regarding the name, we might simply say the hcid/bluetoothd always sends
> a remote name signal if something changes. So it might get the short
> name from the extended inquiry first and after that it receives the full
> remote name. We can also always send the cached name and we update that
> name on every service discovery, because then it is at zero cost.
[Claudio Takahasi]
The remote name is triggered by D-Bus clients. hcid/bluetoothd doesn't
request the remote when the inquiry finishes. For EIR, are you
suggesting send the "InquiryResult" signal followed by a "RemoteName"?

If we send the "RemoteName" with the short name, probably D-Bus
clients will not request the RemoteName to retrieve the complete name.
D-Bus clients should not distinguish short/complete name.

Regarding the RemoteName request service signature. Do you agree with
my initial proprosal? (see the first e-mail sent: have an alternative
to force send the HCI remote name and another using the cache)

>
> So we have one device name. This maybe a cached, a remote or a shortened
> name. The application doesn't really have to care and it gets updates as
> soon as hcid/bluetoothd knows them.
>
> Besides the device name, we should implement an alias name. This name is
> associated with the BD_ADDR and can be changed by the user if he/she
> doesn't like the device name. Implementing this alias through the D-Bus
> interface makes it available for all applications and we can store the
> aliases in /var/lib/bluetooth/<bdaddr>/aliases.
[Claudio Takahasi]
When a client requests a RemoteName, which value should be returned?
The value stored in the aliases file or the value stored in the names
file? Or are you suggesting create a property=20
"GetProperty("alias")/SetProperty("alias", "value")?

Regards,
Claudio.

>
> Regards
>
> Marcel
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep through log fi=
les
> for problems?  Stop!  Download the new AJAX search engine that makes
> searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
> http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D103432&bid=3D230486&dat=
=3D121642
> _______________________________________________
> Bluez-devel mailing list
> Bluez-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bluez-devel
>


--
---------------------------------------------------------
Claudio Takahasi
Instituto Nokia de Tecnologia - INdT


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-23 18:54       ` Claudio Takahasi
@ 2006-01-23 20:14         ` Marcel Holtmann
  2006-01-26 14:09           ` Claudio Takahasi
  0 siblings, 1 reply; 10+ messages in thread
From: Marcel Holtmann @ 2006-01-23 20:14 UTC (permalink / raw)
  To: bluez-devel

Hi Claudio,

> > Regarding the name, we might simply say the hcid/bluetoothd always sends
> > a remote name signal if something changes. So it might get the short
> > name from the extended inquiry first and after that it receives the full
> > remote name. We can also always send the cached name and we update that
> > name on every service discovery, because then it is at zero cost.
> 
> The remote name is triggered by D-Bus clients. hcid/bluetoothd doesn't
> request the remote when the inquiry finishes. For EIR, are you
> suggesting send the "InquiryResult" signal followed by a "RemoteName"?

this sounds like a sane and backward compatible way of doing this.

> If we send the "RemoteName" with the short name, probably D-Bus
> clients will not request the RemoteName to retrieve the complete name.
> D-Bus clients should not distinguish short/complete name.

It is up to hcid/bluetoothd to update the remote when the client
requests a service discovery.

> Regarding the RemoteName request service signature. Do you agree with
> my initial proprosal? (see the first e-mail sent: have an alternative
> to force send the HCI remote name and another using the cache)

No. We don't need any extra stuff. The client asks for a name and we
give them a name. That's it and all the rest is implementation specific
to hcid/bluetoothd.

> > So we have one device name. This maybe a cached, a remote or a shortened
> > name. The application doesn't really have to care and it gets updates as
> > soon as hcid/bluetoothd knows them.
> >
> > Besides the device name, we should implement an alias name. This name is
> > associated with the BD_ADDR and can be changed by the user if he/she
> > doesn't like the device name. Implementing this alias through the D-Bus
> > interface makes it available for all applications and we can store the
> > aliases in /var/lib/bluetooth/<bdaddr>/aliases.
> 
> When a client requests a RemoteName, which value should be returned?
> The value stored in the aliases file or the value stored in the names
> file? Or are you suggesting create a property 
> "GetProperty("alias")/SetProperty("alias", "value")?

When they request the remote name or device name, then they get the
device name that is valid at the moment. This will maybe a cached name,
but that doesn't matter. If hcid/bluetoothd knows better they will send
out a remote name signal to tell them.

The alias name is totally different and independent. It is application
choice to use the alias name or not. If the alias name is empty they can
use the remote/device name.

Regards

Marcel




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-23 20:14         ` Marcel Holtmann
@ 2006-01-26 14:09           ` Claudio Takahasi
  2006-01-26 18:03             ` Marcel Holtmann
  0 siblings, 1 reply; 10+ messages in thread
From: Claudio Takahasi @ 2006-01-26 14:09 UTC (permalink / raw)
  To: bluez-devel

Hi Marcel,

On 1/23/06, Marcel Holtmann <marcel@holtmann.org> wrote:
> Hi Claudio,
>
> > > Regarding the name, we might simply say the hcid/bluetoothd always se=
nds
> > > a remote name signal if something changes. So it might get the short
> > > name from the extended inquiry first and after that it receives the f=
ull
> > > remote name. We can also always send the cached name and we update th=
at
> > > name on every service discovery, because then it is at zero cost.
> >
> > The remote name is triggered by D-Bus clients. hcid/bluetoothd doesn't
> > request the remote when the inquiry finishes. For EIR, are you
> > suggesting send the "InquiryResult" signal followed by a "RemoteName"?
>
> this sounds like a sane and backward compatible way of doing this.
[Claudio Takahasi]
I did some tests and discovered that if we add extra fields at the
ending we can keep the
backward compatibility if applications check the signature partially.
The functions dbus_message_get_args and dbus_message_get_basic can be
used to extract the first three signal fields(bdaddr, class, rssi)
without broke. For python applications add an extra signal handler
function with the new signature is enough.

Therefore, we have another option: Add the name at the ending of the
"InquiryResult" signal arguments.

>
> > If we send the "RemoteName" with the short name, probably D-Bus
> > clients will not request the RemoteName to retrieve the complete name.
> > D-Bus clients should not distinguish short/complete name.
>
> It is up to hcid/bluetoothd to update the remote when the client
> requests a service discovery.
>
> > Regarding the RemoteName request service signature. Do you agree with
> > my initial proprosal? (see the first e-mail sent: have an alternative
> > to force send the HCI remote name and another using the cache)
>
> No. We don't need any extra stuff. The client asks for a name and we
> give them a name. That's it and all the rest is implementation specific
> to hcid/bluetoothd.
[Claudio Takahasi]
Sorry I didn't understand your proposal. Which logic do you want?
When the hcid/bluetoothd receives the RemoteName(bdaddr) request,
which steps should be done?

This is the patch approach:
name =3D get_device_name(local, bdaddr); /* retrieving from names file */
if (name =3D=3D NULL) {
   /* send HCI remote name request */
}
...
Which modifications must be done on this patch?

>
> > > So we have one device name. This maybe a cached, a remote or a shorte=
ned
> > > name. The application doesn't really have to care and it gets updates=
 as
> > > soon as hcid/bluetoothd knows them.
> > >
> > > Besides the device name, we should implement an alias name. This name=
 is
> > > associated with the BD_ADDR and can be changed by the user if he/she
> > > doesn't like the device name. Implementing this alias through the D-B=
us
> > > interface makes it available for all applications and we can store th=
e
> > > aliases in /var/lib/bluetooth/<bdaddr>/aliases.
> >
> > When a client requests a RemoteName, which value should be returned?
> > The value stored in the aliases file or the value stored in the names
> > file? Or are you suggesting create a property
> > "GetProperty("alias")/SetProperty("alias", "value")?
>
> When they request the remote name or device name, then they get the
> device name that is valid at the moment. This will maybe a cached name,
> but that doesn't matter. If hcid/bluetoothd knows better they will send
> out a remote name signal to tell them.
>
> The alias name is totally different and independent. It is application
> choice to use the alias name or not. If the alias name is empty they can
> use the remote/device name.
[Claudio Takahasi]
Is there someone working on this stuff?

Regards,
Claudio.

>
> Regards
>
> Marcel
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep through log fi=
les
> for problems?  Stop!  Download the new AJAX search engine that makes
> searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
> http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D103432&bid=3D230486&dat=
=3D121642
> _______________________________________________
> Bluez-devel mailing list
> Bluez-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bluez-devel
>


--
---------------------------------------------------------
Claudio Takahasi
Instituto Nokia de Tecnologia - INdT


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-26 14:09           ` Claudio Takahasi
@ 2006-01-26 18:03             ` Marcel Holtmann
  2006-02-09 13:55               ` Claudio Takahasi
  0 siblings, 1 reply; 10+ messages in thread
From: Marcel Holtmann @ 2006-01-26 18:03 UTC (permalink / raw)
  To: bluez-devel

Hi Claudio,

> > > > Regarding the name, we might simply say the hcid/bluetoothd always sends
> > > > a remote name signal if something changes. So it might get the short
> > > > name from the extended inquiry first and after that it receives the full
> > > > remote name. We can also always send the cached name and we update that
> > > > name on every service discovery, because then it is at zero cost.
> > >
> > > The remote name is triggered by D-Bus clients. hcid/bluetoothd doesn't
> > > request the remote when the inquiry finishes. For EIR, are you
> > > suggesting send the "InquiryResult" signal followed by a "RemoteName"?
> >
> > this sounds like a sane and backward compatible way of doing this.
> 
> I did some tests and discovered that if we add extra fields at the
> ending we can keep the
> backward compatibility if applications check the signature partially.
> The functions dbus_message_get_args and dbus_message_get_basic can be
> used to extract the first three signal fields(bdaddr, class, rssi)
> without broke. For python applications add an extra signal handler
> function with the new signature is enough.
> 
> Therefore, we have another option: Add the name at the ending of the
> "InquiryResult" signal arguments.

even if I wrote a backward compatibility, I actually don't care, because
I mentioned sometimes that I don't consider the D-Bus stable unless we
at least have D-Bus 1.0 finally released.

> > > If we send the "RemoteName" with the short name, probably D-Bus
> > > clients will not request the RemoteName to retrieve the complete name.
> > > D-Bus clients should not distinguish short/complete name.
> >
> > It is up to hcid/bluetoothd to update the remote when the client
> > requests a service discovery.
> >
> > > Regarding the RemoteName request service signature. Do you agree with
> > > my initial proprosal? (see the first e-mail sent: have an alternative
> > > to force send the HCI remote name and another using the cache)
> >
> > No. We don't need any extra stuff. The client asks for a name and we
> > give them a name. That's it and all the rest is implementation specific
> > to hcid/bluetoothd.
> 
> Sorry I didn't understand your proposal. Which logic do you want?
> When the hcid/bluetoothd receives the RemoteName(bdaddr) request,
> which steps should be done?
> 
> This is the patch approach:
> name = get_device_name(local, bdaddr); /* retrieving from names file */
> if (name == NULL) {
>    /* send HCI remote name request */
> }
> ...
> Which modifications must be done on this patch?

If the client ask for a name and we have a cached one, it gets the
cached name. If we don't have a cached name hcid/bluetoothd will take
care of filling the cache.

The same applies to the device discovery. If we don't get any EIR
information it is the job of hcid/bluetoothd to fill the name cache.

> > > > So we have one device name. This maybe a cached, a remote or a shortened
> > > > name. The application doesn't really have to care and it gets updates as
> > > > soon as hcid/bluetoothd knows them.
> > > >
> > > > Besides the device name, we should implement an alias name. This name is
> > > > associated with the BD_ADDR and can be changed by the user if he/she
> > > > doesn't like the device name. Implementing this alias through the D-Bus
> > > > interface makes it available for all applications and we can store the
> > > > aliases in /var/lib/bluetooth/<bdaddr>/aliases.
> > >
> > > When a client requests a RemoteName, which value should be returned?
> > > The value stored in the aliases file or the value stored in the names
> > > file? Or are you suggesting create a property
> > > "GetProperty("alias")/SetProperty("alias", "value")?
> >
> > When they request the remote name or device name, then they get the
> > device name that is valid at the moment. This will maybe a cached name,
> > but that doesn't matter. If hcid/bluetoothd knows better they will send
> > out a remote name signal to tell them.
> >
> > The alias name is totally different and independent. It is application
> > choice to use the alias name or not. If the alias name is empty they can
> > use the remote/device name.
> 
> Is there someone working on this stuff?

Not that I know of.

Regards

Marcel




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-01-26 18:03             ` Marcel Holtmann
@ 2006-02-09 13:55               ` Claudio Takahasi
  2006-02-09 15:56                 ` Marcel Holtmann
  0 siblings, 1 reply; 10+ messages in thread
From: Claudio Takahasi @ 2006-02-09 13:55 UTC (permalink / raw)
  To: bluez-devel

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

Hi Marcel,

According with your request, I am sending the patch again.
The function get_device_name should be moved to a common library.

Basically, this patch try retrieve the remote name from the
cache(names file) instead of send the HCI command everytime.

Regards,
Claudio.

On 1/26/06, Marcel Holtmann <marcel@holtmann.org> wrote:
> Hi Claudio,
>
> > > > > Regarding the name, we might simply say the hcid/bluetoothd always sends
> > > > > a remote name signal if something changes. So it might get the short
> > > > > name from the extended inquiry first and after that it receives the full
> > > > > remote name. We can also always send the cached name and we update that
> > > > > name on every service discovery, because then it is at zero cost.
> > > >
> > > > The remote name is triggered by D-Bus clients. hcid/bluetoothd doesn't
> > > > request the remote when the inquiry finishes. For EIR, are you
> > > > suggesting send the "InquiryResult" signal followed by a "RemoteName"?
> > >
> > > this sounds like a sane and backward compatible way of doing this.
> >
> > I did some tests and discovered that if we add extra fields at the
> > ending we can keep the
> > backward compatibility if applications check the signature partially.
> > The functions dbus_message_get_args and dbus_message_get_basic can be
> > used to extract the first three signal fields(bdaddr, class, rssi)
> > without broke. For python applications add an extra signal handler
> > function with the new signature is enough.
> >
> > Therefore, we have another option: Add the name at the ending of the
> > "InquiryResult" signal arguments.
>
> even if I wrote a backward compatibility, I actually don't care, because
> I mentioned sometimes that I don't consider the D-Bus stable unless we
> at least have D-Bus 1.0 finally released.
>
> > > > If we send the "RemoteName" with the short name, probably D-Bus
> > > > clients will not request the RemoteName to retrieve the complete name.
> > > > D-Bus clients should not distinguish short/complete name.
> > >
> > > It is up to hcid/bluetoothd to update the remote when the client
> > > requests a service discovery.
> > >
> > > > Regarding the RemoteName request service signature. Do you agree with
> > > > my initial proprosal? (see the first e-mail sent: have an alternative
> > > > to force send the HCI remote name and another using the cache)
> > >
> > > No. We don't need any extra stuff. The client asks for a name and we
> > > give them a name. That's it and all the rest is implementation specific
> > > to hcid/bluetoothd.
> >
> > Sorry I didn't understand your proposal. Which logic do you want?
> > When the hcid/bluetoothd receives the RemoteName(bdaddr) request,
> > which steps should be done?
> >
> > This is the patch approach:
> > name = get_device_name(local, bdaddr); /* retrieving from names file */
> > if (name == NULL) {
> >    /* send HCI remote name request */
> > }
> > ...
> > Which modifications must be done on this patch?
>
> If the client ask for a name and we have a cached one, it gets the
> cached name. If we don't have a cached name hcid/bluetoothd will take
> care of filling the cache.
>
> The same applies to the device discovery. If we don't get any EIR
> information it is the job of hcid/bluetoothd to fill the name cache.
>
> > > > > So we have one device name. This maybe a cached, a remote or a shortened
> > > > > name. The application doesn't really have to care and it gets updates as
> > > > > soon as hcid/bluetoothd knows them.
> > > > >
> > > > > Besides the device name, we should implement an alias name. This name is
> > > > > associated with the BD_ADDR and can be changed by the user if he/she
> > > > > doesn't like the device name. Implementing this alias through the D-Bus
> > > > > interface makes it available for all applications and we can store the
> > > > > aliases in /var/lib/bluetooth/<bdaddr>/aliases.
> > > >
> > > > When a client requests a RemoteName, which value should be returned?
> > > > The value stored in the aliases file or the value stored in the names
> > > > file? Or are you suggesting create a property
> > > > "GetProperty("alias")/SetProperty("alias", "value")?
> > >
> > > When they request the remote name or device name, then they get the
> > > device name that is valid at the moment. This will maybe a cached name,
> > > but that doesn't matter. If hcid/bluetoothd knows better they will send
> > > out a remote name signal to tell them.
> > >
> > > The alias name is totally different and independent. It is application
> > > choice to use the alias name or not. If the alias name is empty they can
> > > use the remote/device name.
> >
> > Is there someone working on this stuff?
>
> Not that I know of.
>
> Regards
>
> Marcel
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
> for problems?  Stop!  Download the new AJAX search engine that makes
> searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
> _______________________________________________
> Bluez-devel mailing list
> Bluez-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bluez-devel
>


--
---------------------------------------------------------
Claudio Takahasi
Instituto Nokia de Tecnologia - INdT

[-- Attachment #2: remote_name_cache02.patch --]
[-- Type: text/x-patch, Size: 4132 bytes --]

--- bluez-utils-cvs.orig/hcid/dbus.c	2006-02-07 23:22:31.000000000 -0200
+++ bluez-utils-cvs-remotename/hcid/dbus.c	2006-02-09 08:43:46.000000000 -0200
@@ -45,6 +45,7 @@
 
 #include "hcid.h"
 #include "dbus.h"
+#include "textfile.h"
 
 #ifndef DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT
 #define DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT	0x00
@@ -98,6 +99,19 @@
 	unregister_function_t	*unreg_func;
 	get_svc_table_func_t	*get_svc_table;	/* return the service table */
 };
+/*
+ * Utility functions
+ */
+static char *get_device_name(const bdaddr_t *local, const bdaddr_t *peer)
+{
+	char filename[PATH_MAX + 1], addr[18];
+
+	ba2str(local, addr);
+	snprintf(filename, PATH_MAX, "%s/%s/names", STORAGEDIR, addr);
+
+	ba2str(peer, addr);
+	return textfile_get(filename, addr);
+}
 
 /*
  * D-Bus error messages functions and declarations.
@@ -1707,50 +1721,92 @@
 static DBusMessage* handle_remote_name_req(DBusMessage *msg, void *data)
 {
 	DBusMessage *reply = NULL;
+	DBusMessage *signal = NULL;
 	struct hci_dbus_data *dbus_data = data;
-	int dd = -1;
 	const char *str_bdaddr;
+	char *name;
+	char path[MAX_PATH_LENGTH];
 	bdaddr_t bdaddr;
+	struct hci_dev_info di;
 	struct hci_request rq;
 	remote_name_req_cp cp;
 	evt_cmd_status rp;
+	int dd = -1;
 
 	dbus_message_get_args(msg, NULL,
 					DBUS_TYPE_STRING, &str_bdaddr,
 					DBUS_TYPE_INVALID);
 
 	str2ba(str_bdaddr, &bdaddr);
-
-	dd = hci_open_dev(dbus_data->dev_id);
-	if (dd < 0) {
-		syslog(LOG_ERR, "Unable to open device %d: %s (%d)",
-					dbus_data->dev_id, strerror(errno), errno);
-		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
+	if (hci_devinfo(dbus_data->dev_id, &di) < 0) {
+		syslog(LOG_ERR, "Can't get device info");
+		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV);
 		goto failed;
 	}
 
-	memset(&cp, 0, sizeof(cp));
-	cp.bdaddr = bdaddr;
-	cp.pscan_rep_mode = 0x01;
+	/* Try retrieve from local cache */
+	name = get_device_name(&di.bdaddr, &bdaddr);
+	if (name) {
 
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_LINK_CTL;
-	rq.ocf    = OCF_REMOTE_NAME_REQ;
-	rq.cparam = &cp;
-	rq.clen   = REMOTE_NAME_REQ_CP_SIZE;
-	rq.rparam = &rp;
-	rq.rlen   = EVT_CMD_STATUS_SIZE;
-	rq.event  = EVT_CMD_STATUS;
+		reply = dbus_message_new_method_return(msg);
 
-	if (hci_send_req(dd, &rq, 100) < 0) {
-		syslog(LOG_ERR, "Unable to send remote name request: %s (%d)",
-							strerror(errno), errno);
-		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
-		goto failed;
+		snprintf(path, sizeof(path), "%s/hci%d/%s", DEVICE_PATH, dbus_data->dev_id, BLUEZ_HCI);
+
+		signal = dbus_message_new_signal(path, DEV_HCI_INTERFACE,
+						 BLUEZ_HCI_REMOTE_NAME);
+
+		dbus_message_append_args(signal,
+					 DBUS_TYPE_STRING, &str_bdaddr,
+					 DBUS_TYPE_STRING, &name,
+					 DBUS_TYPE_INVALID);
+
+		if (dbus_connection_send(connection, signal, NULL) == FALSE) {
+			syslog(LOG_ERR, "Can't send D-BUS remote name signal message");
+			goto failed;
+		}
+
+		dbus_message_unref(signal);
+		free(name);
+
+	} else {
+
+		/* Send HCI command */
+		dd = hci_open_dev(dbus_data->dev_id);
+		if (dd < 0) {
+			syslog(LOG_ERR, "Unable to open device %d: %s (%d)",
+						dbus_data->dev_id, strerror(errno), errno);
+			reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
+			goto failed;
+		}
+
+		memset(&cp, 0, sizeof(cp));
+		cp.bdaddr = bdaddr;
+		cp.pscan_rep_mode = 0x01;
+
+		memset(&rq, 0, sizeof(rq));
+		rq.ogf    = OGF_LINK_CTL;
+		rq.ocf    = OCF_REMOTE_NAME_REQ;
+		rq.cparam = &cp;
+		rq.clen   = REMOTE_NAME_REQ_CP_SIZE;
+		rq.rparam = &rp;
+		rq.rlen   = EVT_CMD_STATUS_SIZE;
+		rq.event  = EVT_CMD_STATUS;
+
+		if (hci_send_req(dd, &rq, 100) < 0) {
+			syslog(LOG_ERR, "Unable to send remote name request: %s (%d)",
+						strerror(errno), errno);
+			reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET | errno);
+			goto failed;
+		}
+
+		if (rp.status) {
+			syslog(LOG_ERR, "Remote name request failed");
+			reply = bluez_new_failure_msg(msg, BLUEZ_EBT_OFFSET | rp.status);
+			goto failed;
+		}
 	}
 
 	reply = dbus_message_new_method_return(msg);
-
 failed:
 	if (dd >= 0)
 		hci_close_dev(dd);

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Bluez-devel] [DBUS] remote name patch
  2006-02-09 13:55               ` Claudio Takahasi
@ 2006-02-09 15:56                 ` Marcel Holtmann
  0 siblings, 0 replies; 10+ messages in thread
From: Marcel Holtmann @ 2006-02-09 15:56 UTC (permalink / raw)
  To: bluez-devel

Hi Claudio,

> According with your request, I am sending the patch again.
> The function get_device_name should be moved to a common library.

we maybe need to create a storage plugin which can be replaced very
easily, but for now it is fine.

> Basically, this patch try retrieve the remote name from the
> cache(names file) instead of send the HCI command everytime.

The pscan_rep_mode must be 0x02 if you don't have any cached value from
an inquiry result. I fixed it and committed it to the CVS.

Regards

Marcel




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2006-02-09 15:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-20 18:37 [Bluez-devel] [DBUS] remote name patch Claudio Takahasi
2006-01-21  1:48 ` Marcel Holtmann
2006-01-23 16:33   ` Claudio Takahasi
2006-01-23 17:08     ` Marcel Holtmann
2006-01-23 18:54       ` Claudio Takahasi
2006-01-23 20:14         ` Marcel Holtmann
2006-01-26 14:09           ` Claudio Takahasi
2006-01-26 18:03             ` Marcel Holtmann
2006-02-09 13:55               ` Claudio Takahasi
2006-02-09 15:56                 ` Marcel Holtmann

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).