Hi,
>Parse the essential arguments in the message, in this case only the
>file descriptor, and register the modem if it is not already
>registered. This is necessary because in some cases, we may receive a
>NewConnection call, and the SDP process is still taking place.
>---
> plugins/hfp_hf_bluez5.c | 47 ++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 44 insertions(+), 3 deletions(-)
>
>diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c
>index 74ca570..39853e3 100644
>--- a/plugins/hfp_hf_bluez5.c
>+++ b/plugins/hfp_hf_bluez5.c
>@@ -24,6 +24,8 @@
> #endif
>
> #include <errno.h>
>+#include <unistd.h>
>+
> #include <glib.h>
>
> #include <gdbus.h>
>@@ -124,11 +126,50 @@ static struct ofono_modem_driver hfp_driver = {
> static DBusMessage *profile_new_connection(DBusConnection *conn,
> DBusMessage *msg, void *user_data)
> {
>+ struct ofono_modem *modem;
>+ DBusMessageIter iter;
>+ GDBusProxy *proxy;
>+ DBusMessageIter entry;
>+ const char *device, *alias;
>+ int fd;
>+
> DBG("Profile handler NewConnection");
>
>- return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
>- ".NotImplemented",
>- "Implementation not provided");
>+ if (dbus_message_iter_init(msg, &entry) == FALSE)
>+ goto error;
>+
>+ if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_OBJECT_PATH)
>+ goto error;
>+
>+ dbus_message_iter_get_basic(&entry, &device);
>+
>+ proxy = g_hash_table_lookup(devices_proxies, device);
>+ if (proxy == NULL)
>+ goto error;
>+
>+ if (g_dbus_proxy_get_property(proxy, "Alias", &iter) == FALSE)
>+ alias = "unknown";
>+ else
>+ dbus_message_iter_get_basic(&iter, &alias);
>+
>+ dbus_message_iter_next(&entry);
>+ if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_UNIX_FD)
>+ goto error;
>+
>+ dbus_message_iter_get_basic(&entry, &fd);
>+ if (fd < 0)
>+ goto error;
>+
>+ modem = modem_register(device, alias);
>+ if (modem == NULL)
>+ goto error;
>+
>+ return NULL;
>+
>+error:
>+ close(fd);
>+ return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE ".Rejected",
>+ "Invalid arguments in method call");
> }
>
> static DBusMessage *profile_release(DBusConnection *conn,
>--
>1.8.1.1
fd is closed always on error, even if uninitialized
I assume returning NULL is ok here if nothing went wrong?
I'm not familiar with plain dbus API, just using glib gdbus, there I would
expect to create an answer to the call.
kind regards
andy
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono