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 >+#include >+ > #include > > #include >@@ -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