Automatically connecting to a new network is now optional

This commit is contained in:
Pierre Pronchery 2014-03-18 00:38:22 +09:00
parent 3028b62c9f
commit eb0d9ef6fc

View File

@ -84,6 +84,7 @@ typedef struct _WPAEntry
/* for WC_ADD_NETWORK */ /* for WC_ADD_NETWORK */
char * ssid; char * ssid;
uint32_t flags; uint32_t flags;
gboolean connect;
} WPAEntry; } WPAEntry;
typedef struct _WPAChannel typedef struct _WPAChannel
@ -546,7 +547,7 @@ static void _wpa_connect(WPA * wpa, char const * ssid, uint32_t flags)
_wpa_connect_network(wpa, &wpa->networks[i]); _wpa_connect_network(wpa, &wpa->networks[i]);
else else
/* add (and then select) this network */ /* add (and then select) this network */
_wpa_queue(wpa, channel, WC_ADD_NETWORK, ssid, flags); _wpa_queue(wpa, channel, WC_ADD_NETWORK, ssid, flags, TRUE);
} }
@ -611,6 +612,7 @@ static int _wpa_queue(WPA * wpa, WPAChannel * channel, WPACommand command, ...)
WPAEntry * p; WPAEntry * p;
char const * ssid = NULL; char const * ssid = NULL;
uint32_t flags = 0; uint32_t flags = 0;
gboolean connect = FALSE;
char const * s; char const * s;
char const * t; char const * t;
char const * format; char const * format;
@ -627,6 +629,7 @@ static int _wpa_queue(WPA * wpa, WPAChannel * channel, WPACommand command, ...)
cmd = g_strdup_printf("ADD_NETWORK"); cmd = g_strdup_printf("ADD_NETWORK");
ssid = va_arg(ap, char const *); ssid = va_arg(ap, char const *);
flags = va_arg(ap, uint32_t); flags = va_arg(ap, uint32_t);
connect = va_arg(ap, gboolean);
break; break;
case WC_ATTACH: case WC_ATTACH:
cmd = strdup("ATTACH"); cmd = strdup("ATTACH");
@ -702,6 +705,7 @@ static int _wpa_queue(WPA * wpa, WPAChannel * channel, WPACommand command, ...)
/* XXX may fail */ /* XXX may fail */
p->ssid = (ssid != NULL) ? strdup(ssid) : NULL; p->ssid = (ssid != NULL) ? strdup(ssid) : NULL;
p->flags = flags; p->flags = flags;
p->connect = connect;
if(channel->queue_cnt++ == 0) if(channel->queue_cnt++ == 0)
channel->wr_source = g_io_add_watch(channel->channel, G_IO_OUT, channel->wr_source = g_io_add_watch(channel->channel, G_IO_OUT,
_on_watch_can_write, wpa); _on_watch_can_write, wpa);
@ -1247,7 +1251,8 @@ static gboolean _on_timeout(gpointer data)
/* on_watch_can_read */ /* on_watch_can_read */
static void _read_add_network(WPA * wpa, WPAChannel * channel, char const * buf, static void _read_add_network(WPA * wpa, WPAChannel * channel, char const * buf,
size_t cnt, char const * ssid, uint32_t flags); size_t cnt, char const * ssid, uint32_t flags,
gboolean connect);
static void _read_list_networks(WPA * wpa, char const * buf, size_t cnt); static void _read_list_networks(WPA * wpa, char const * buf, size_t cnt);
static void _read_scan_results(WPA * wpa, char const * buf, size_t cnt); static void _read_scan_results(WPA * wpa, char const * buf, size_t cnt);
static void _read_scan_results_cleanup(WPA * wpa, GtkTreeModel * model); static void _read_scan_results_cleanup(WPA * wpa, GtkTreeModel * model);
@ -1314,7 +1319,8 @@ static gboolean _on_watch_can_read(GIOChannel * source, GIOCondition condition,
} }
if(entry->command == WC_ADD_NETWORK) if(entry->command == WC_ADD_NETWORK)
_read_add_network(wpa, channel, buf, cnt, _read_add_network(wpa, channel, buf, cnt,
entry->ssid, entry->flags); entry->ssid, entry->flags,
entry->connect);
else if(entry->command == WC_LIST_NETWORKS) else if(entry->command == WC_LIST_NETWORKS)
_read_list_networks(wpa, buf, cnt); _read_list_networks(wpa, buf, cnt);
else if(entry->command == WC_SCAN_RESULTS) else if(entry->command == WC_SCAN_RESULTS)
@ -1344,7 +1350,7 @@ static gboolean _on_watch_can_read(GIOChannel * source, GIOCondition condition,
} }
static void _read_add_network(WPA * wpa, WPAChannel * channel, char const * buf, static void _read_add_network(WPA * wpa, WPAChannel * channel, char const * buf,
size_t cnt, char const * ssid, uint32_t flags) size_t cnt, char const * ssid, uint32_t flags, gboolean connect)
{ {
unsigned int id; unsigned int id;
@ -1366,9 +1372,11 @@ static void _read_add_network(WPA * wpa, WPAChannel * channel, char const * buf,
_wpa_queue(wpa, channel, WC_SET_NETWORK, id, "key_mgmt", NULL); _wpa_queue(wpa, channel, WC_SET_NETWORK, id, "key_mgmt", NULL);
if(wpa->autosave) if(wpa->autosave)
_wpa_queue(wpa, channel, WC_SAVE_CONFIGURATION); _wpa_queue(wpa, channel, WC_SAVE_CONFIGURATION);
/* XXX make this optional */ if(connect)
{
_wpa_queue(wpa, channel, WC_SELECT_NETWORK, id); _wpa_queue(wpa, channel, WC_SELECT_NETWORK, id);
_wpa_queue(wpa, channel, WC_LIST_NETWORKS); _wpa_queue(wpa, channel, WC_LIST_NETWORKS);
}
} }
static void _read_list_networks(WPA * wpa, char const * buf, size_t cnt) static void _read_list_networks(WPA * wpa, char const * buf, size_t cnt)