#endif
struct if_ap {
+ char *ifname;
char *bssid;
int frequency;
int quality;
};
struct if_msg {
- char *name;
+ char *ifname;
char *reason;
struct in_addr ip;
unsigned char cidr;
for (gl = interfaces; gl; gl = gl->next) {
ifm = (struct if_msg *)gl->data;
- if (g_strcmp0(ifm->name, iface) == 0)
+ if (g_strcmp0(ifm->ifname, iface) == 0)
return ifm;
}
return NULL;
static void
free_if_ap(struct if_ap *ifa)
{
+ g_free(ifa->ifname);
g_free(ifa->bssid);
g_free(ifa->flags);
g_free(ifa->ssid);
{
GSList *gl;
- g_free(ifm->name);
+ g_free(ifm->ifname);
g_free(ifm->reason);
g_free(ifm->ssid);
for (gl = ifm->scan_results; gl; gl = gl->next)
otype = dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE);
otype = dbus_g_type_get_collection("GPtrArray", otype);
- if (!dbus_g_proxy_call(dbus, "GetScanResults", &error,
- G_TYPE_STRING, ifm->name, G_TYPE_INVALID,
+ if (!dbus_g_proxy_call(dbus, "ScanResults", &error,
+ G_TYPE_STRING, ifm->ifname, G_TYPE_INVALID,
otype, &array, G_TYPE_INVALID))
- error_exit(_("GetScanResults"), error);
+ error_exit(_("ScanResults"), error);
for (i = 0; i < array->len; i++) {
config = g_ptr_array_index(array, i);
if (val == NULL)
continue;
ifa = g_malloc0(sizeof(*ifa));
+ ifa->ifname = g_strdup(ifm->ifname);
ifa->bssid = g_strdup(g_value_get_string(val));
val = g_hash_table_lookup(config, "Frequency");
if (val)
if (val == NULL)
return NULL;
ifm = g_malloc0(sizeof(*ifm));
- ifm->name = g_strdup(g_value_get_string(val));
+ ifm->ifname = g_strdup(g_value_get_string(val));
val = g_hash_table_lookup(config, "Reason");
if (val)
ifm->reason = g_strdup(g_value_get_string(val));
if (reason == NULL)
reason = ifm->reason;
- len = strlen(ifm->name) + 3;
+ len = strlen(ifm->ifname) + 3;
len += strlen(reason) + 1;
if (ifm->ip.s_addr != 0) {
len += 16; /* 000. * 4 */
if (showssid)
len += strlen(ifm->ssid) + 1;
msg = p = g_malloc(len);
- p += g_snprintf(msg, len, "%s: %s", ifm->name, reason);
+ p += g_snprintf(msg, len, "%s: %s", ifm->ifname, reason);
if (showssid)
p += g_snprintf(p, len - (p - msg), " %s", ifm->ssid);
if (ifm->ip.s_addr != 0 && showip) {
ifa = (const struct if_msg *)a;
ifb = (const struct if_msg *)b;
for (order = (const char *const *)interface_order; *order; order++) {
- if (g_strcmp0(*order, ifa->name) == 0)
+ if (g_strcmp0(*order, ifa->ifname) == 0)
return -1;
- if (g_strcmp0(*order, ifb->name) == 0)
+ if (g_strcmp0(*order, ifb->ifname) == 0)
return 1;
}
return 0;
ifp = NULL;
for (gl = interfaces; gl; gl = gl->next) {
ifp = (struct if_msg *)gl->data;
- if (g_strcmp0(ifp->name, ifm->name) == 0) {
+ if (g_strcmp0(ifp->ifname, ifm->ifname) == 0) {
ifm->scan_results = ifp->scan_results;
ifp->scan_results = NULL;
free_if_msg(ifp);
ifm = (struct if_msg *)gl->data;
if (!ifm->wireless)
continue;
- if (!dbus_g_proxy_call(dbus, "GetScanResults", &error,
- G_TYPE_STRING, ifm->name, G_TYPE_INVALID,
+ if (!dbus_g_proxy_call(dbus, "ScanResults", &error,
+ G_TYPE_STRING, ifm->ifname, G_TYPE_INVALID,
otype, &array, G_TYPE_INVALID))
{
- g_message("GetScanResults: %s", error->message);
+ g_message("ScanResults: %s", error->message);
g_clear_error(&error);
continue;
}
ifm = find_if_msg(iface);
if (ifm == NULL)
return;
- g_message(_("%s: Received scan results"), ifm->name);
+ g_message(_("%s: Received scan results"), ifm->ifname);
aps = get_scan_results(ifm);
txt = NULL;
for (gl = aps; gl; gl = gl->next) {
static void
ssid_hook(_unused GtkMenuItem *item, gpointer data)
{
- wpa_configure((const char *)data);
+ wpa_configure((const struct if_ap *)data);
}
static void
gtk_widget_show(image);
gtk_widget_show(box);
g_signal_connect(G_OBJECT(item), "activate",
- G_CALLBACK(ssid_hook), ifa->ssid);
+ G_CALLBACK(ssid_hook), gl->data);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
}
}
G_TYPE_INVALID);
otype = dbus_g_type_get_collection("GPtrArray", otype);
error = NULL;
- if (!dbus_g_proxy_call(dbus, "GetNetworks", &error,
+ if (!dbus_g_proxy_call(dbus, "ListNetworks", &error,
G_TYPE_STRING, ifname, G_TYPE_INVALID,
otype, &array, G_TYPE_INVALID))
{
- g_warning("GetNetworks: %s", error->message);
+ g_warning("ListNetworks: %s", error->message);
g_error_free(error);
return -1;
}
}
nssid = g_strconcat("\"", ssid, "\"", NULL);
- if (!dbus_g_proxy_call(dbus, "SetNetworkParameter", &error,
+ if (!dbus_g_proxy_call(dbus, "SetNetwork", &error,
G_TYPE_STRING, ifname,
G_TYPE_INT, id,
G_TYPE_STRING, "ssid",
G_TYPE_INVALID,
G_TYPE_INVALID))
{
- g_warning("SetNetworkParameter: %s", error->message);
+ g_warning("SetNetwork: %s", error->message);
g_free(nssid);
g_error_free(error);
return -1;
{
GError *error;
char *str;
+ static gboolean warned = FALSE;
+ GtkWidget *dialog;
error = NULL;
str = g_strconcat("\"", val, "\"", NULL);
- if (!dbus_g_proxy_call(dbus, "SetNetworkParameter", &error,
+ if (!dbus_g_proxy_call(dbus, "SetNetwork", &error,
G_TYPE_STRING, ifname,
G_TYPE_INT, id,
G_TYPE_STRING, var,
G_TYPE_INVALID,
G_TYPE_INVALID))
{
- g_warning("SetNetworkParameter: %s", error->message);
+ g_warning("SetNetwork: %s", error->message);
g_free(str);
g_error_free(error);
return -1;
return -1;
}
+ if (!dbus_g_proxy_call(dbus, "SaveConfig", &error,
+ G_TYPE_STRING, ifname,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID))
+ {
+ g_warning("SaveConfig: %s", error->message);
+ if (!warned) {
+ warned = TRUE;
+ dialog = gtk_message_dialog_new(NULL,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Failed to save wpa_supplicant configuration.\n\nYou should add update_config=1 to /etc/wpa_supplicant.conf.\nThis warning will not appear again until program restarted."));
+ gtk_window_set_title(GTK_WINDOW(dialog),
+ _("Error saving configuration"));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+ }
+ g_error_free(error);
+ }
return 0;
}
gboolean
-wpa_configure(const char *ssid)
+wpa_configure(const struct if_ap *ifa)
{
GtkWidget *dialog, *label, *psk, *vbox, *hbox;
char *title;
+ const char *var;
gint result, id;
- const char *ifname = "iwi0";
-
- title = g_strdup_printf(_("Configuration for %s"), ssid);
+ title = g_strdup_printf(_("Configuration for %s"), ifa->ssid);
dialog = gtk_dialog_new_with_buttons(title,
NULL,
GTK_DIALOG_MODAL,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
NULL);
g_free(title);
+ gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
+ gtk_window_set_icon_name(GTK_WINDOW(dialog), "config-users");
vbox = GTK_DIALOG(dialog)->vbox;
hbox = gtk_hbox_new(FALSE, 2);
- label = gtk_label_new("Pre Shared Key:");
+ label = gtk_label_new(_("Pre Shared Key:"));
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
psk = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(psk), 130);
id = -1;
if (result == GTK_RESPONSE_ACCEPT) {
- id = find_network(ifname, ssid);
+ id = find_network(ifa->ifname, ifa->ssid);
+ if (g_strcmp0(ifa->flags, "[WEP]") == 0)
+ var = "wep_key0";
+ else
+ var = "psk";
if (id != -1)
- id = configure_network(ifname, id, "psk",
- gtk_entry_get_text(GTK_ENTRY(psk)));
+ id = configure_network(ifa->ifname, id, var,
+ gtk_entry_get_text(GTK_ENTRY(psk)));
}
gtk_widget_destroy(dialog);
return id == -1 ? FALSE : TRUE;
#ifndef WPA_H
#define WPA_H
-gboolean wpa_configure(const char *ssid);
+#include "dhcpcd-gtk.h"
+
+gboolean wpa_configure(const struct if_ap *);
#endif