]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
dbus: Declare and implement GroupFinished as for GroupStarted
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Tue, 8 Jul 2014 12:56:11 +0000 (15:56 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 31 Jul 2014 14:20:56 +0000 (17:20 +0300)
First for better concistancy but also to tell about the group_object
that is getting removed, thus the client will know about it and will be
able to act accordingly.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
wpa_supplicant/dbus/dbus_new.c
wpa_supplicant/notify.c

index dab6c460ba91db3fbc04b1e377519a117be37b6f..e9f658909f5dcf1bc7896482f3dea9dea2da4a04 100644 (file)
@@ -946,37 +946,49 @@ void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s,
 void wpas_dbus_signal_p2p_group_removed(struct wpa_supplicant *wpa_s,
                                        const char *role)
 {
-
+       int error = 1;
        DBusMessage *msg;
-       DBusMessageIter iter;
+       DBusMessageIter iter, dict_iter;
        struct wpas_dbus_priv *iface = wpa_s->global->dbus;
-       char *ifname = wpa_s->ifname;
 
        /* Do nothing if the control interface is not turned on */
        if (iface == NULL)
                return;
 
-       msg = dbus_message_new_signal(wpa_s->dbus_new_path,
+       if (!wpa_s->dbus_groupobj_path)
+               return;
+
+       msg = dbus_message_new_signal(wpa_s->parent->dbus_new_path,
                                      WPAS_DBUS_NEW_IFACE_P2PDEVICE,
                                      "GroupFinished");
        if (msg == NULL)
                return;
 
        dbus_message_iter_init_append(msg, &iter);
+       if (!wpa_dbus_dict_open_write(&iter, &dict_iter))
+               goto nomem;
 
-       if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &ifname)) {
-               wpa_printf(MSG_ERROR, "dbus: Failed to construct GroupFinished"
-                                     "signal -not enough memory for ifname ");
-               goto err;
-       }
+       if (!wpa_dbus_dict_append_object_path(&dict_iter,
+                                             "interface_object",
+                                             wpa_s->dbus_new_path))
+               goto nomem;
 
-       if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &role))
-               wpa_printf(MSG_ERROR, "dbus: Failed to construct GroupFinished"
-                                     "signal -not enough memory for role ");
-       else
-               dbus_connection_send(iface->con, msg, NULL);
+       if (!wpa_dbus_dict_append_string(&dict_iter, "role", role))
+               goto nomem;
+
+       if (!wpa_dbus_dict_append_object_path(&dict_iter, "group_object",
+                                             wpa_s->dbus_groupobj_path) ||
+           !wpa_dbus_dict_close_write(&iter, &dict_iter))
+               goto nomem;
+
+       error = 0;
+       dbus_connection_send(iface->con, msg, NULL);
+
+nomem:
+       if (error > 0)
+               wpa_printf(MSG_ERROR,
+                          "dbus: Failed to construct GroupFinished");
 
-err:
        dbus_message_unref(msg);
 }
 
@@ -3140,8 +3152,7 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
        },
        { "GroupFinished", WPAS_DBUS_NEW_IFACE_P2PDEVICE,
          {
-                 { "ifname", "s", ARG_OUT },
-                 { "role", "s", ARG_OUT },
+                 { "properties", "a{sv}", ARG_OUT },
                  END_ARGS
          }
        },
index 7ba1dec357e6a411e49b3694711e66dea901873e..3b730cf17830aac4916ffa6b89ee6119d28662d0 100644 (file)
@@ -438,9 +438,9 @@ void wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s,
                                   const struct wpa_ssid *ssid,
                                   const char *role)
 {
-       wpas_dbus_unregister_p2p_group(wpa_s, ssid);
-
        wpas_dbus_signal_p2p_group_removed(wpa_s, role);
+
+       wpas_dbus_unregister_p2p_group(wpa_s, ssid);
 }