* [PATCH 1/2] serial: fix DBus message reply @ 2011-09-13 18:16 Gustavo F. Padovan 2011-09-13 18:16 ` [PATCH 2/2] serial: add Serial.ConnectFD() Gustavo F. Padovan 2011-09-27 8:32 ` [PATCH 1/2] serial: fix DBus message reply Johan Hedberg 0 siblings, 2 replies; 5+ messages in thread From: Gustavo F. Padovan @ 2011-09-13 18:16 UTC (permalink / raw) To: linux-bluetooth; +Cc: Gustavo F. Padovan From: "Gustavo F. Padovan" <padovan@profusion.mobi> If reply is NULL we have a crash. --- serial/port.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) diff --git a/serial/port.c b/serial/port.c index d011084..a931ebd 100644 --- a/serial/port.c +++ b/serial/port.c @@ -368,10 +368,8 @@ static void get_record_cb(sdp_list_t *recs, int err, gpointer user_data) DBusMessage *reply; GError *gerr = NULL; - if (!port->listener_id) { - reply = NULL; - goto failed; - } + if (!port->listener_id) + return; if (err < 0) { error("Unable to get service record: %s (%d)", strerror(-err), -- 1.7.6.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] serial: add Serial.ConnectFD() 2011-09-13 18:16 [PATCH 1/2] serial: fix DBus message reply Gustavo F. Padovan @ 2011-09-13 18:16 ` Gustavo F. Padovan 2011-09-27 8:32 ` [PATCH 1/2] serial: fix DBus message reply Johan Hedberg 1 sibling, 0 replies; 5+ messages in thread From: Gustavo F. Padovan @ 2011-09-13 18:16 UTC (permalink / raw) To: linux-bluetooth; +Cc: Gustavo F. Padovan From: "Gustavo F. Padovan" <padovan@profusion.mobi> It's similar to Serial.Connect() but returns the actual RFCOMM file descriptor instead of creating a device in /dev --- doc/serial-api.txt | 16 ++++++++++++++++ serial/port.c | 25 ++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletions(-) diff --git a/doc/serial-api.txt b/doc/serial-api.txt index 5f9bd5f..98b0ad4 100644 --- a/doc/serial-api.txt +++ b/doc/serial-api.txt @@ -26,6 +26,22 @@ Methods string Connect(string pattern) org.bluez.Error.ConnectionAttemptFailed org.bluez.Error.NotSupported +Methods fd ConnectFD(string pattern) [experimental] + + Connects to a specific RFCOMM based service on a + remote device and returns a file descriptor to talk + with this device. + + Possible patterns: UUID 128 bit as string + Profile short names, e.g: spp, dun + RFCOMM channel as string, 1-30 + + Possible errors: org.bluez.Error.InvalidArguments + org.bluez.Error.InProgress + org.bluez.Error.ConnectionAttemptFailed + org.bluez.Error.NotSupported + + void Disconnect(string device) Disconnect a RFCOMM TTY device that has been diff --git a/serial/port.c b/serial/port.c index a931ebd..7f5fce1 100644 --- a/serial/port.c +++ b/serial/port.c @@ -63,6 +63,10 @@ #define MAX_OPEN_TRIES 5 #define OPEN_WAIT 300 /* ms. udev node creation retry wait */ +#ifndef DBUS_TYPE_UNIX_FD +#define DBUS_TYPE_UNIX_FD -1 +#endif + struct serial_device { DBusConnection *conn; /* for name listener handling */ bdaddr_t src; /* Source (local) address */ @@ -318,6 +322,21 @@ static void rfcomm_connect_cb(GIOChannel *chan, GError *conn_err, goto fail; } + sk = g_io_channel_unix_get_fd(chan); + + if (dbus_message_has_member(port->msg, "ConnectFD")) { + reply = g_dbus_create_reply(port->msg, DBUS_TYPE_UNIX_FD, &sk, + DBUS_TYPE_INVALID); + g_dbus_send_message(device->conn, reply); + + close(sk); + + g_dbus_remove_watch(device->conn, port->listener_id); + port->listener_id = 0; + + return; + } + memset(&req, 0, sizeof(req)); req.dev_id = -1; req.flags = (1 << RFCOMM_REUSE_DLC); @@ -328,7 +347,6 @@ static void rfcomm_connect_cb(GIOChannel *chan, GError *conn_err, g_io_channel_unref(port->io); port->io = NULL; - sk = g_io_channel_unix_get_fd(chan); port->id = ioctl(sk, RFCOMMCREATEDEV, &req); if (port->id < 0) { int err = -errno; @@ -474,6 +492,9 @@ static DBusMessage *port_connect(DBusConnection *conn, const char *pattern; int err; + if (dbus_message_has_member(msg, "ConnectFD") && DBUS_TYPE_UNIX_FD < 0) + return btd_error_not_supported(msg); + if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &pattern, DBUS_TYPE_INVALID) == FALSE) return NULL; @@ -497,6 +518,7 @@ static DBusMessage *port_connect(DBusConnection *conn, dbus_message_get_sender(msg), port_owner_exited, port, NULL); + port->msg = dbus_message_ref(msg); err = connect_port(port); @@ -544,6 +566,7 @@ static DBusMessage *port_disconnect(DBusConnection *conn, static GDBusMethodTable port_methods[] = { { "Connect", "s", "s", port_connect, G_DBUS_METHOD_FLAG_ASYNC }, + { "ConnectFD", "s", "h", port_connect, G_DBUS_METHOD_FLAG_ASYNC }, { "Disconnect", "s", "", port_disconnect }, { } }; -- 1.7.6.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] serial: fix DBus message reply 2011-09-13 18:16 [PATCH 1/2] serial: fix DBus message reply Gustavo F. Padovan 2011-09-13 18:16 ` [PATCH 2/2] serial: add Serial.ConnectFD() Gustavo F. Padovan @ 2011-09-27 8:32 ` Johan Hedberg 1 sibling, 0 replies; 5+ messages in thread From: Johan Hedberg @ 2011-09-27 8:32 UTC (permalink / raw) To: Gustavo F. Padovan; +Cc: linux-bluetooth Hi Gustavo, On Tue, Sep 13, 2011, Gustavo F. Padovan wrote: > From: "Gustavo F. Padovan" <padovan@profusion.mobi> > > If reply is NULL we have a crash. > --- > serial/port.c | 6 ++---- > 1 files changed, 2 insertions(+), 4 deletions(-) Both patches applied. Thanks. Johan ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] serial: fix DBus message reply @ 2011-09-13 3:46 Gustavo F. Padovan 2011-09-13 7:19 ` Luiz Augusto von Dentz 0 siblings, 1 reply; 5+ messages in thread From: Gustavo F. Padovan @ 2011-09-13 3:46 UTC (permalink / raw) To: linux-bluetooth; +Cc: Gustavo F. Padovan From: "Gustavo F. Padovan" <padovan@profusion.mobi> If reply is NULL we have a crash. --- serial/port.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/serial/port.c b/serial/port.c index d011084..2cdead4 100644 --- a/serial/port.c +++ b/serial/port.c @@ -369,7 +369,7 @@ static void get_record_cb(sdp_list_t *recs, int err, gpointer user_data) GError *gerr = NULL; if (!port->listener_id) { - reply = NULL; + reply = btd_error_failed(port->msg, "No listening application"); goto failed; } -- 1.7.6.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] serial: fix DBus message reply 2011-09-13 3:46 Gustavo F. Padovan @ 2011-09-13 7:19 ` Luiz Augusto von Dentz 0 siblings, 0 replies; 5+ messages in thread From: Luiz Augusto von Dentz @ 2011-09-13 7:19 UTC (permalink / raw) To: Gustavo F. Padovan; +Cc: linux-bluetooth Hi Gustavo, On Tue, Sep 13, 2011 at 6:46 AM, Gustavo F. Padovan <padovan@profusion.mobi> wrote: > From: "Gustavo F. Padovan" <padovan@profusion.mobi> > > If reply is NULL we have a crash. > --- > serial/port.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/serial/port.c b/serial/port.c > index d011084..2cdead4 100644 > --- a/serial/port.c > +++ b/serial/port.c > @@ -369,7 +369,7 @@ static void get_record_cb(sdp_list_t *recs, int err, gpointer user_data) > GError *gerr = NULL; > > if (!port->listener_id) { > - reply = NULL; > + reply = btd_error_failed(port->msg, "No listening application"); > goto failed; > } If we have no listener at this point we should probably not reply because either the application has called Disconnect or it has exited the bus, anyway the port->msg need to be unref. -- Luiz Augusto von Dentz ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-09-27 8:32 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-09-13 18:16 [PATCH 1/2] serial: fix DBus message reply Gustavo F. Padovan 2011-09-13 18:16 ` [PATCH 2/2] serial: add Serial.ConnectFD() Gustavo F. Padovan 2011-09-27 8:32 ` [PATCH 1/2] serial: fix DBus message reply Johan Hedberg -- strict thread matches above, loose matches on Subject: below -- 2011-09-13 3:46 Gustavo F. Padovan 2011-09-13 7:19 ` Luiz Augusto von Dentz
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.