]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
D-Bus: Emit signal when a station is authorized or deauthorized
authorChengyi Zhao <chengyix.zhao@gmail.com>
Sat, 22 Jun 2013 09:09:09 +0000 (12:09 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 22 Jun 2013 09:09:09 +0000 (12:09 +0300)
Add "StaAuthorized" and "StaDeauthorized" D-Bus interface in AP mode.
After enabling the AP mode of wpa_supplicant, the other process need to
get the MAC address and authorization status of every station, so
wpa_supplicant emits signal when the station is authorized or
deauthorized.

Signed-hostap: Chengyi Zhao <chengyix.zhao@gmail.com>

doc/dbus.doxygen
wpa_supplicant/dbus/dbus_new.c
wpa_supplicant/dbus/dbus_new.h
wpa_supplicant/notify.c

index 988f769ff50b662327342d469d7599fb92812eaf..1fa7a3ace48fb446e33570f5a759cc5644267f92 100644 (file)
@@ -532,6 +532,26 @@ fi.w1.wpa_supplicant1.CreateInterface.
        </dl>
       </li>
 
+      <li>
+       <h3>StaAuthorized ( s : mac )</h3>
+       <p>A new station has been authorized to the interface.</p>
+       <h4>Arguments</h4>
+       <dl>
+         <dt>s : mac</dt>
+         <dd>A mac address which has been authorized.</dd>
+       </dl>
+      </li>
+
+      <li>
+       <h3>StaDeauthorized ( s : mac )</h3>
+       <p>A station has been deauthorized to the interface.</p>
+       <h4>Arguments</h4>
+       <dl>
+         <dt>s : mac</dt>
+         <dd>A mac address which has been deauthorized.</dd>
+       </dl>
+      </li>
+
       <li>
        <h3>PropertiesChanged ( a{sv} : properties )</h3>
        <p>Some properties have changed.</p>
index e9bd51f591985cb3d559a5c3dcb46cdef7d1ae3e..9293d72d49570e5b1b1e5f42ffcb647391c3068f 100644 (file)
@@ -869,6 +869,76 @@ nomem:
 }
 
 
+/**
+ * wpas_dbus_signal_sta - Send a station related event signal
+ * @wpa_s: %wpa_supplicant network interface data
+ * @sta: station mac address
+ * @sig_name: signal name - StaAuthorized or StaDeauthorized
+ *
+ * Notify listeners about event related with station
+ */
+static void wpas_dbus_signal_sta(struct wpa_supplicant *wpa_s,
+                                const u8 *sta, const char *sig_name)
+{
+       struct wpas_dbus_priv *iface;
+       DBusMessage *msg;
+       char sta_mac[WPAS_DBUS_OBJECT_PATH_MAX];
+       char *dev_mac;
+
+       os_snprintf(sta_mac, WPAS_DBUS_OBJECT_PATH_MAX, MACSTR, MAC2STR(sta));
+       dev_mac = sta_mac;
+
+       iface = wpa_s->global->dbus;
+
+       /* Do nothing if the control interface is not turned on */
+       if (iface == NULL)
+               return;
+
+       msg = dbus_message_new_signal(wpa_s->dbus_new_path,
+                                     WPAS_DBUS_NEW_IFACE_INTERFACE, sig_name);
+       if (msg == NULL)
+               return;
+
+       if (dbus_message_append_args(msg, DBUS_TYPE_STRING, &dev_mac,
+                                    DBUS_TYPE_INVALID))
+               dbus_connection_send(iface->con, msg, NULL);
+       else
+               wpa_printf(MSG_ERROR, "dbus: Failed to construct signal");
+       dbus_message_unref(msg);
+
+       wpa_printf(MSG_DEBUG, "dbus: Station MAC address '%s' '%s'",
+                  sta_mac, sig_name);
+}
+
+
+/**
+ * wpas_dbus_signal_sta_authorized - Send a STA authorized signal
+ * @wpa_s: %wpa_supplicant network interface data
+ * @sta: station mac address
+ *
+ * Notify listeners a new station has been authorized
+ */
+void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
+                                    const u8 *sta)
+{
+       wpas_dbus_signal_sta(wpa_s, sta, "StaAuthorized");
+}
+
+
+/**
+ * wpas_dbus_signal_sta_deauthorized - Send a STA deauthorized signal
+ * @wpa_s: %wpa_supplicant network interface data
+ * @sta: station mac address
+ *
+ * Notify listeners a station has been deauthorized
+ */
+void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s,
+                                      const u8 *sta)
+{
+       wpas_dbus_signal_sta(wpa_s, sta, "StaDeauthorized");
+}
+
+
 #ifdef CONFIG_P2P
 
 /**
@@ -3017,6 +3087,18 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
                  END_ARGS
          }
        },
+       { "StaAuthorized", WPAS_DBUS_NEW_IFACE_INTERFACE,
+         {
+                 { "name", "s", ARG_OUT },
+                 END_ARGS
+         }
+       },
+       { "StaDeauthorized", WPAS_DBUS_NEW_IFACE_INTERFACE,
+         {
+                 { "name", "s", ARG_OUT },
+                 END_ARGS
+         }
+       },
        { NULL, NULL, { END_ARGS } }
 };
 
index 363a7e5d33c15a2cae8a5428b2a71617521f77d2..61c480a6ae82db7544886aa745edea8e6d86c094 100644 (file)
@@ -222,6 +222,10 @@ void wpas_dbus_signal_preq(struct wpa_supplicant *wpa_s,
                           const u8 *ie, size_t ie_len, u32 ssi_signal);
 void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s,
                                 const char *status, const char *parameter);
+void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
+                                    const u8 *sta);
+void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s,
+                                      const u8 *sta);
 
 #else /* CONFIG_CTRL_IFACE_DBUS_NEW */
 
@@ -493,6 +497,18 @@ static inline void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s,
 {
 }
 
+static inline
+void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
+                                    const u8 *sta)
+{
+}
+
+static inline
+void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s,
+                                      const u8 *sta)
+{
+}
+
 #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
 
 #endif /* CTRL_IFACE_DBUS_H_NEW */
index ca6f7e741154ca3b34b21aaeb293fbaaf388c8c7..35a029f24f36c8e5f3a3e58054d36383349ba915 100644 (file)
@@ -547,6 +547,9 @@ static void wpas_notify_ap_sta_authorized(struct wpa_supplicant *wpa_s,
         */
        wpas_dbus_signal_p2p_peer_joined(wpa_s, sta);
 #endif /* CONFIG_P2P */
+
+       /* Notify listeners a new station has been authorized */
+       wpas_dbus_signal_sta_authorized(wpa_s, sta);
 }
 
 
@@ -566,6 +569,9 @@ static void wpas_notify_ap_sta_deauthorized(struct wpa_supplicant *wpa_s,
         */
        wpas_dbus_signal_p2p_peer_disconnected(wpa_s, sta);
 #endif /* CONFIG_P2P */
+
+       /* Notify listeners a station has been deauthorized */
+       wpas_dbus_signal_sta_deauthorized(wpa_s, sta);
 }