From: Johan Hedberg <johan.hedberg@nokia.com>
To: bluez-devel@lists.sourceforge.net
Subject: Re: [Bluez-devel] [PATCH] Make RemoteName D-BUS method non-blocking
Date: Thu, 20 Oct 2005 10:05:32 +0300 [thread overview]
Message-ID: <20051020070532.GA20546@localhost.localdomain> (raw)
In-Reply-To: <1129762736.2241.18.camel@blade>
[-- Attachment #1: Type: text/plain, Size: 563 bytes --]
Hi Marcel,
On Thu, Oct 20, 2005, Marcel Holtmann wrote:
> Even if I repeat myself, but I take this whitespace thing serious and
> you should tell your editor to visualize tabs and spaces for you.
I do too. Were there some whitespace problems with my patch? (I couldn't
find any)
> Why don't you set rq.event to EVT_CMD_STATUS?
Because hci_send_req has a switch statement which handles the
EVT_CMD_STATUS case separately and would never reach the case where it
tests for hdr->evt == r->event.
Attached is a new patch which should apply cleanly to CVS.
Johan
[-- Attachment #2: remote-name2.patch --]
[-- Type: text/plain, Size: 4495 bytes --]
Index: hcid/dbus.c
===================================================================
RCS file: /cvsroot/bluez/utils/hcid/dbus.c,v
retrieving revision 1.28
diff -u -r1.28 dbus.c
--- hcid/dbus.c 19 Oct 2005 10:52:45 -0000 1.28
+++ hcid/dbus.c 20 Oct 2005 06:54:41 -0000
@@ -466,7 +466,7 @@
return;
}
-void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name)
+void hcid_dbus_remote_name(bdaddr_t *local, uint8_t status, bdaddr_t *peer, char *name)
{
DBusMessage *message = NULL;
char path[MAX_PATH_LENGTH];
@@ -493,6 +493,7 @@
}
dbus_message_append_args(message,
+ DBUS_TYPE_BYTE, &status,
DBUS_TYPE_STRING, &peer_addr,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_INVALID);
@@ -1251,7 +1252,7 @@
rq.cparam = &cp;
rq.clen = INQUIRY_CP_SIZE;
- if (hci_send_req(dd, &rq, 100) < 0) {
+ if (hci_send_req(dd, &rq, 100) < 0 && errno != ETIMEDOUT) {
syslog(LOG_ERR, "Unable to start inquiry: %s", strerror(errno));
reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
goto failed;
@@ -1322,8 +1323,6 @@
static DBusMessage* handle_remote_name_req(DBusMessage *msg, void *data)
{
- char name[64];
- const char *pname = name;
DBusMessageIter iter;
DBusMessage *reply = NULL;
struct hci_dbus_data *dbus_data = data;
@@ -1331,6 +1330,8 @@
int dd = -1;
const char *str_bdaddr;
bdaddr_t bdaddr;
+ struct hci_request rq;
+ remote_name_req_cp cp;
dbus_message_iter_init(msg, &iter);
dbus_message_iter_get_basic(&iter, &str_bdaddr);
@@ -1343,27 +1344,38 @@
reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV);
goto failed;
}
- } else {
+ } else
dev_id = dbus_data->id;
- }
dd = hci_open_dev(dev_id);
- if (dd >= 0) {
- if (hci_read_remote_name(dd, &bdaddr, sizeof(name), name, READ_REMOTE_NAME_TIMEOUT) ==0) {
- reply = dbus_message_new_method_return(msg);
- dbus_message_iter_init_append(reply, &iter);
- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &pname);
- } else {
- reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
- }
- } else {
+ if (dd < 0) {
+ syslog(LOG_ERR, "Unable to open device %d: %s", dev_id, strerror(errno));
reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
+ goto failed;
}
- if (dd > 0)
- close(dd);
+ 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;
+
+ if (hci_send_req(dd, &rq, 100) < 0 && errno != ETIMEDOUT) {
+ syslog(LOG_ERR, "Unable to send remote name request: %s", strerror(errno));
+ reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);
+ goto failed;
+ }
+
+ reply = dbus_message_new_method_return(msg);
failed:
+ if (dd >= 0)
+ hci_close_dev(dd);
+
return reply;
}
Index: hcid/hcid.h
===================================================================
RCS file: /cvsroot/bluez/utils/hcid/hcid.h,v
retrieving revision 1.25
diff -u -r1.25 hcid.h
--- hcid/hcid.h 9 Oct 2005 22:15:22 -0000 1.25
+++ hcid/hcid.h 20 Oct 2005 06:54:41 -0000
@@ -131,7 +131,7 @@
void hcid_dbus_inquiry_start(bdaddr_t *local);
void hcid_dbus_inquiry_complete(bdaddr_t *local);
void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, int8_t rssi);
-void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name);
+void hcid_dbus_remote_name(bdaddr_t *local, uint8_t status, bdaddr_t *peer, char *name);
void hcid_dbus_conn_complete(bdaddr_t *local, bdaddr_t *peer);
void hcid_dbus_disconn_complete(bdaddr_t *local, bdaddr_t *peer, uint8_t reason);
#else
Index: hcid/security.c
===================================================================
RCS file: /cvsroot/bluez/utils/hcid/security.c,v
retrieving revision 1.40
diff -u -r1.40 security.c
--- hcid/security.c 6 Sep 2005 22:01:30 -0000 1.40
+++ hcid/security.c 20 Oct 2005 06:54:41 -0000
@@ -499,17 +499,16 @@
char name[249];
bdaddr_t dba;
- if (evt->status)
- return;
+ bacpy(&dba, &evt->bdaddr);
memset(name, 0, sizeof(name));
- memcpy(name, evt->name, 248);
- bacpy(&dba, &evt->bdaddr);
-
- hcid_dbus_remote_name(sba, &dba, name);
+ if (evt->status == 0) {
+ memcpy(name, evt->name, 248);
+ write_device_name(sba, &dba, name);
+ }
- write_device_name(sba, &dba, name);
+ hcid_dbus_remote_name(sba, evt->status, &dba, name);
}
static inline void remote_version_information(int dev, bdaddr_t *sba, void *ptr)
next prev parent reply other threads:[~2005-10-20 7:05 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-19 14:07 [Bluez-devel] [PATCH] Make RemoteName D-BUS method non-blocking Johan Hedberg
2005-10-19 15:03 ` P. Durante
2005-10-19 17:45 ` Johan Hedberg
2005-10-19 22:58 ` Marcel Holtmann
2005-10-20 7:05 ` Johan Hedberg [this message]
2005-10-20 7:52 ` Marcel Holtmann
2005-10-20 8:37 ` Johan Hedberg
2005-10-20 9:02 ` Marcel Holtmann
2005-10-20 9:50 ` Johan Hedberg
2005-10-20 10:16 ` Marcel Holtmann
2005-10-20 11:21 ` Johan Hedberg
2005-10-20 13:37 ` Johan Hedberg
2005-10-22 12:58 ` Marcel Holtmann
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=20051020070532.GA20546@localhost.localdomain \
--to=johan.hedberg@nokia.com \
--cc=bluez-devel@lists.sourceforge.net \
/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