All pastes #2113361 Raw Edit

Anonymous

public text v1 · immutable
#2113361 ·published 2012-02-08 21:18 UTC
rendered paste body
/* wifi.c generated by valac 0.14.2, the Vala compiler
 * generated from wifi.vala, do not modify */

/*
    This file is part of iliwi.

    iliwi is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License Version 3
    as published by the Free Software Foundation.

    iliwi is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with iliwi.  If not, see <http://www.gnu.org/licenses/>.
*/

#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <Elementary.h>
#include <gio/gio.h>
#include <gee.h>
#include <stdio.h>
#include <glib/gstdio.h>
#include <gobject/gvaluecollector.h>


#define ILIWI_TYPE_WIFI (iliwi_wifi_get_type ())
#define ILIWI_WIFI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ILIWI_TYPE_WIFI, iliwiWifi))
#define ILIWI_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ILIWI_TYPE_WIFI, iliwiWifiClass))
#define ILIWI_IS_WIFI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ILIWI_TYPE_WIFI))
#define ILIWI_IS_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ILIWI_TYPE_WIFI))
#define ILIWI_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ILIWI_TYPE_WIFI, iliwiWifiClass))

typedef struct _iliwiWifi iliwiWifi;
typedef struct _iliwiWifiClass iliwiWifiClass;
typedef struct _iliwiWifiPrivate iliwiWifiPrivate;
#define _g_free0(var) (var = (g_free (var), NULL))
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))

#define ILIWI_TYPE_NETWORK (iliwi_network_get_type ())
#define ILIWI_NETWORK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ILIWI_TYPE_NETWORK, iliwiNetwork))
#define ILIWI_NETWORK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ILIWI_TYPE_NETWORK, iliwiNetworkClass))
#define ILIWI_IS_NETWORK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ILIWI_TYPE_NETWORK))
#define ILIWI_IS_NETWORK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ILIWI_TYPE_NETWORK))
#define ILIWI_NETWORK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ILIWI_TYPE_NETWORK, iliwiNetworkClass))

typedef struct _iliwiNetwork iliwiNetwork;
typedef struct _iliwiNetworkClass iliwiNetworkClass;
typedef struct _iliwiNetworkPrivate iliwiNetworkPrivate;

#define ILIWI_TYPE_NETWORK_STATUS (iliwi_network_status_get_type ())

#define ILIWI_TYPE_PREFERRED_NETWORK (iliwi_preferred_network_get_type ())
typedef struct _iliwiPreferredNetwork iliwiPreferredNetwork;
typedef struct _iliwiParamSpecNetwork iliwiParamSpecNetwork;

#define ILIWI_TYPE_WIFI_THREAD (iliwi_wifi_thread_get_type ())
#define ILIWI_WIFI_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ILIWI_TYPE_WIFI_THREAD, iliwiWifiThread))
#define ILIWI_WIFI_THREAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ILIWI_TYPE_WIFI_THREAD, iliwiWifiThreadClass))
#define ILIWI_IS_WIFI_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ILIWI_TYPE_WIFI_THREAD))
#define ILIWI_IS_WIFI_THREAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ILIWI_TYPE_WIFI_THREAD))
#define ILIWI_WIFI_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ILIWI_TYPE_WIFI_THREAD, iliwiWifiThreadClass))

typedef struct _iliwiWifiThread iliwiWifiThread;
typedef struct _iliwiWifiThreadClass iliwiWifiThreadClass;
typedef struct _iliwiWifiThreadPrivate iliwiWifiThreadPrivate;

#define TYPE_USAGE (usage_get_type ())
#define USAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_USAGE, Usage))
#define IS_USAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_USAGE))
#define USAGE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_USAGE, UsageIface))

typedef struct _Usage Usage;
typedef struct _UsageIface UsageIface;

#define TYPE_USAGE_PROXY (usage_proxy_get_type ())
#define _g_main_loop_unref0(var) ((var == NULL) ? NULL : (var = (g_main_loop_unref (var), NULL)))
#define _g_source_unref0(var) ((var == NULL) ? NULL : (var = (g_source_unref (var), NULL)))
#define _iliwi_network_unref0(var) ((var == NULL) ? NULL : (var = (iliwi_network_unref (var), NULL)))
#define _fclose0(var) ((var == NULL) ? NULL : (var = (fclose (var), NULL)))
#define _g_match_info_free0(var) ((var == NULL) ? NULL : (var = (g_match_info_free (var), NULL)))
#define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
#define _iliwi_preferred_network_free0(var) ((var == NULL) ? NULL : (var = (iliwi_preferred_network_free (var), NULL)))

struct _iliwiWifi {
	GObject parent_instance;
	iliwiWifiPrivate * priv;
};

struct _iliwiWifiClass {
	GObjectClass parent_class;
};

struct _iliwiWifiPrivate {
	gchar* _status;
	GThread* thread;
};

struct _iliwiNetwork {
	GTypeInstance parent_instance;
	volatile int ref_count;
	iliwiNetworkPrivate * priv;
	gchar* address;
	gchar* essid;
	gboolean encryption;
	gboolean authentication;
	gboolean adhoc;
	gchar* password;
	gchar* username;
	gchar* cert;
	gchar* cert_dir;
	gboolean password_in_ascii;
	gint strength;
	gboolean unsaved;
	gboolean visible;
	gboolean preferred_network;
	Elm_Genlist_Item* listitem;
};

struct _iliwiNetworkClass {
	GTypeClass parent_class;
	void (*finalize) (iliwiNetwork *self);
};

typedef enum  {
	ILIWI_NETWORK_STATUS_UNCONNECTED,
	ILIWI_NETWORK_STATUS_CONNECT,
	ILIWI_NETWORK_STATUS_CONNECTING,
	ILIWI_NETWORK_STATUS_CONNECTED
} iliwiNetworkStatus;

struct _iliwiPreferredNetwork {
	gchar* password;
	gboolean password_in_ascii;
	gchar* username;
	gchar* cert;
	gchar* cert_dir;
};

struct _iliwiNetworkPrivate {
	gboolean _wpa_encryption;
	iliwiNetworkStatus _status;
};

struct _iliwiParamSpecNetwork {
	GParamSpec parent_instance;
};

struct _iliwiWifiThread {
	GObject parent_instance;
	iliwiWifiThreadPrivate * priv;
};

struct _iliwiWifiThreadClass {
	GObjectClass parent_class;
};

struct _UsageIface {
	GTypeInterface parent_iface;
	void (*RequestResource) (Usage* self, const gchar* resource, GError** error);
	void (*ReleaseResource) (Usage* self, const gchar* resource, GError** error);
};


static gpointer iliwi_wifi_parent_class = NULL;
static gpointer iliwi_network_parent_class = NULL;
static gpointer iliwi_wifi_thread_parent_class = NULL;
static GMainLoop* iliwi_wifi_thread_loop;
static GMainLoop* iliwi_wifi_thread_loop = NULL;
static Usage* iliwi_wifi_thread_fso_usage;
static Usage* iliwi_wifi_thread_fso_usage = NULL;
static GeeHashMap* iliwi_wifi_thread_preferred_networks;
static GeeHashMap* iliwi_wifi_thread_preferred_networks = NULL;
static GeeHashMap* iliwi_wifi_thread_networks;
static GeeHashMap* iliwi_wifi_thread_networks = NULL;
static GeeArrayList* iliwi_wifi_thread_visible_networks;
static GStaticRecMutex __lock_iliwi_wifi_thread_visible_networks = {0};
static GeeArrayList* iliwi_wifi_thread_visible_networks = NULL;
static iliwiNetworkStatus iliwi_wifi_thread_status;
static iliwiNetworkStatus iliwi_wifi_thread_status = 0;
static gchar* iliwi_wifi_thread_wireless_interface;
static gchar* iliwi_wifi_thread_wireless_interface = NULL;
static iliwiNetwork* iliwi_wifi_thread_connection_suggestion;
static iliwiNetwork* iliwi_wifi_thread_connection_suggestion = NULL;
static iliwiNetwork* iliwi_wifi_thread_connect_network;
static iliwiNetwork* iliwi_wifi_thread_connect_network = NULL;
static GRegex* iliwi_wifi_thread_line_regex_start_address;
static GRegex* iliwi_wifi_thread_line_regex_start_address = NULL;
static GRegex* iliwi_wifi_thread_line_regex_essid;
static GRegex* iliwi_wifi_thread_line_regex_essid = NULL;
static GRegex* iliwi_wifi_thread_line_regex_encryption;
static GRegex* iliwi_wifi_thread_line_regex_encryption = NULL;
static GRegex* iliwi_wifi_thread_line_regex_strength;
static GRegex* iliwi_wifi_thread_line_regex_strength = NULL;
static GRegex* iliwi_wifi_thread_line_regex_interface;
static GRegex* iliwi_wifi_thread_line_regex_interface = NULL;
static GRegex* iliwi_wifi_thread_line_regex_adhoc;
static GRegex* iliwi_wifi_thread_line_regex_adhoc = NULL;
static GRegex* iliwi_wifi_thread_line_regex_wpa_enc;
static GRegex* iliwi_wifi_thread_line_regex_wpa_enc = NULL;
static GRegex* iliwi_wifi_thread_line_regex_wpa_enc_auth;
static GRegex* iliwi_wifi_thread_line_regex_wpa_enc_auth = NULL;
static gint iliwi_wifi_thread_seconds_since_last_scan;
static gint iliwi_wifi_thread_seconds_since_last_scan = 0;
extern iliwiWifi* iliwi_wifi;

GType iliwi_wifi_get_type (void) G_GNUC_CONST;
#define ILIWI_WIFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ILIWI_TYPE_WIFI, iliwiWifiPrivate))
enum  {
	ILIWI_WIFI_DUMMY_PROPERTY,
	ILIWI_WIFI_STATUS
};
void iliwi_wifi_thread_stop_thread (void);
iliwiWifi* iliwi_wifi_new (void);
iliwiWifi* iliwi_wifi_construct (GType object_type);
void* iliwi_wifi_thread_run_thread (void);
static gpointer _iliwi_wifi_thread_run_thread_gthread_func (gpointer self);
gpointer iliwi_network_ref (gpointer instance);
void iliwi_network_unref (gpointer instance);
GParamSpec* iliwi_param_spec_network (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void iliwi_value_set_network (GValue* value, gpointer v_object);
void iliwi_value_take_network (GValue* value, gpointer v_object);
gpointer iliwi_value_get_network (const GValue* value);
GType iliwi_network_get_type (void) G_GNUC_CONST;
iliwiNetwork** iliwi_wifi_get_visible_networks (iliwiWifi* self, int* result_length1);
iliwiNetwork** iliwi_wifi_thread_get_visible_networks (int* result_length1);
void iliwi_wifi_connect_to (iliwiWifi* self, iliwiNetwork* network);
void iliwi_wifi_thread_connect_to_network (iliwiNetwork* network);
void iliwi_wifi_set_preferred_state (iliwiWifi* self, iliwiNetwork* network, gboolean new_state);
void iliwi_wifi_thread_preferred_state_change (iliwiNetwork* network);
void iliwi_wifi_set_ascii_state (iliwiWifi* self, iliwiNetwork* network, gboolean new_state);
void iliwi_wifi_preferred_network_password_change (iliwiWifi* self, iliwiNetwork* network);
void iliwi_wifi_preferred_network_username_change (iliwiWifi* self, iliwiNetwork* network);
void iliwi_wifi_preferred_network_certificate_change (iliwiWifi* self, iliwiNetwork* network);
void iliwi_wifi_set_new_status (iliwiWifi* self, const gchar* new_status);
static void iliwi_wifi_set_status (iliwiWifi* self, const gchar* value);
void iliwi_wifi_visible_network_change (iliwiWifi* self);
const gchar* iliwi_wifi_get_status (iliwiWifi* self);
static void iliwi_wifi_finalize (GObject* obj);
static void _vala_iliwi_wifi_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
static void _vala_iliwi_wifi_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
GType iliwi_network_status_get_type (void) G_GNUC_CONST;
GType iliwi_preferred_network_get_type (void) G_GNUC_CONST;
iliwiPreferredNetwork* iliwi_preferred_network_dup (const iliwiPreferredNetwork* self);
void iliwi_preferred_network_free (iliwiPreferredNetwork* self);
void iliwi_preferred_network_copy (const iliwiPreferredNetwork* self, iliwiPreferredNetwork* dest);
void iliwi_preferred_network_destroy (iliwiPreferredNetwork* self);
#define ILIWI_NETWORK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ILIWI_TYPE_NETWORK, iliwiNetworkPrivate))
enum  {
	ILIWI_NETWORK_DUMMY_PROPERTY
};
gboolean iliwi_network_valid_network (iliwiNetwork* self);
gchar* iliwi_network_pretty_string (iliwiNetwork* self);
iliwiNetworkStatus iliwi_network_get_status (iliwiNetwork* self);
gchar* iliwi_network_get_title (iliwiNetwork* self);
void iliwi_network_set_new_status (iliwiNetwork* self, iliwiNetworkStatus _status);
static void iliwi_network_set_status (iliwiNetwork* self, iliwiNetworkStatus value);
static void iliwi_network_update_view (iliwiNetwork* self);
void iliwi_network_set_strength (iliwiNetwork* self, gint i, gboolean update_list);
void iliwi_network_set_encyption_to_wpa (iliwiNetwork* self);
static void iliwi_network_set_wpa_encryption (iliwiNetwork* self, gboolean value);
iliwiNetwork* iliwi_network_new (void);
iliwiNetwork* iliwi_network_construct (GType object_type);
gboolean iliwi_network_get_wpa_encryption (iliwiNetwork* self);
static void iliwi_network_finalize (iliwiNetwork* obj);
#define ILIWI_TIMEOUT_SECONDS 2
#define ILIWI_ZERO_NETWORKS_SCAN_SECONDS 4
#define ILIWI_NONZERO_NETWORKS_SCAN_SECONDS 20
#define ILIWI_CONNECTED_SCAN_SECONDS 300
GType iliwi_wifi_thread_get_type (void) G_GNUC_CONST;
enum  {
	ILIWI_WIFI_THREAD_DUMMY_PROPERTY
};
GType usage_proxy_get_type (void) G_GNUC_CONST;
guint usage_register_object (void* object, GDBusConnection* connection, const gchar* path, GError** error);
GType usage_get_type (void) G_GNUC_CONST;
static void iliwi_wifi_thread_initialize (void);
static gboolean __lambda0_ (void);
static void iliwi_wifi_thread_scan (void);
static iliwiNetwork* iliwi_wifi_thread_suggest_network (void);
static void iliwi_wifi_thread_run_dhcp (void);
static gboolean ___lambda0__gsource_func (gpointer self);
void usage_ReleaseResource (Usage* self, const gchar* resource, GError** error);
static void iliwi_wifi_thread_save_preferred_networks (void);
static void iliwi_wifi_thread_disconnectt (void);
void usage_RequestResource (Usage* self, const gchar* resource, GError** error);
static void iliwi_wifi_thread_load_preferred_networks (void);
static void iliwi_wifi_thread_parse_iwlist_networks (const gchar* iwlist_result);
static void iliwi_wifi_thread_found_network (iliwiNetwork* network);
static void iliwi_wifi_thread_connect_to_suggestion (iliwiNetwork* network);
iliwiWifiThread* iliwi_wifi_thread_new (void);
iliwiWifiThread* iliwi_wifi_thread_construct (GType object_type);
static void iliwi_wifi_thread_finalize (GObject* obj);
static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
static gint _vala_array_length (gpointer array);


static gpointer _iliwi_wifi_thread_run_thread_gthread_func (gpointer self) {
	gpointer result;
	result = iliwi_wifi_thread_run_thread ();
	return result;
}


iliwiWifi* iliwi_wifi_construct (GType object_type) {
	iliwiWifi * self = NULL;
	GError * _inner_error_ = NULL;
	self = (iliwiWifi*) g_object_new (object_type, NULL);
	{
		GThread* _tmp0_ = NULL;
		GThread* _tmp1_;
		_tmp0_ = g_thread_create (_iliwi_wifi_thread_run_thread_gthread_func, NULL, TRUE, &_inner_error_);
		_tmp1_ = _tmp0_;
		if (_inner_error_ != NULL) {
			goto __catch2_g_error;
		}
		self->priv->thread = _tmp1_;
	}
	goto __finally2;
	__catch2_g_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_critical ("wifi.vala:34: Couldn't start wifi-thread!");
		_g_error_free0 (e);
	}
	__finally2:
	if (_inner_error_ != NULL) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return NULL;
	}
	return self;
}


iliwiWifi* iliwi_wifi_new (void) {
	return iliwi_wifi_construct (ILIWI_TYPE_WIFI);
}


iliwiNetwork** iliwi_wifi_get_visible_networks (iliwiWifi* self, int* result_length1) {
	iliwiNetwork** result = NULL;
	gint _tmp0_ = 0;
	iliwiNetwork** _tmp1_ = NULL;
	iliwiNetwork** _tmp2_;
	gint _tmp2__length1;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp1_ = iliwi_wifi_thread_get_visible_networks (&_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp2__length1 = _tmp0_;
	if (result_length1) {
		*result_length1 = _tmp2__length1;
	}
	result = _tmp2_;
	return result;
}


void iliwi_wifi_connect_to (iliwiWifi* self, iliwiNetwork* network) {
	iliwiNetwork* _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	iliwi_wifi_thread_connect_to_network (_tmp0_);
}


void iliwi_wifi_set_preferred_state (iliwiWifi* self, iliwiNetwork* network, gboolean new_state) {
	iliwiNetwork* _tmp0_;
	gboolean _tmp1_;
	iliwiNetwork* _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	_tmp1_ = new_state;
	_tmp0_->preferred_network = _tmp1_;
	_tmp2_ = network;
	iliwi_wifi_thread_preferred_state_change (_tmp2_);
}


void iliwi_wifi_set_ascii_state (iliwiWifi* self, iliwiNetwork* network, gboolean new_state) {
	iliwiNetwork* _tmp0_;
	gboolean _tmp1_;
	iliwiNetwork* _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	_tmp1_ = new_state;
	_tmp0_->password_in_ascii = _tmp1_;
	_tmp2_ = network;
	iliwi_wifi_thread_preferred_state_change (_tmp2_);
}


void iliwi_wifi_preferred_network_password_change (iliwiWifi* self, iliwiNetwork* network) {
	iliwiNetwork* _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	iliwi_wifi_thread_preferred_state_change (_tmp0_);
}


void iliwi_wifi_preferred_network_username_change (iliwiWifi* self, iliwiNetwork* network) {
	iliwiNetwork* _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	iliwi_wifi_thread_preferred_state_change (_tmp0_);
}


void iliwi_wifi_preferred_network_certificate_change (iliwiWifi* self, iliwiNetwork* network) {
	iliwiNetwork* _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	iliwi_wifi_thread_preferred_state_change (_tmp0_);
}


void iliwi_wifi_set_new_status (iliwiWifi* self, const gchar* new_status) {
	const gchar* _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (new_status != NULL);
	_tmp0_ = new_status;
	iliwi_wifi_set_status (self, _tmp0_);
	g_signal_emit_by_name (self, "status-change");
}


void iliwi_wifi_visible_network_change (iliwiWifi* self) {
	g_return_if_fail (self != NULL);
	g_signal_emit_by_name (self, "network-list-change");
}


const gchar* iliwi_wifi_get_status (iliwiWifi* self) {
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_status;
	result = _tmp0_;
	return result;
}


static void iliwi_wifi_set_status (iliwiWifi* self, const gchar* value) {
	const gchar* _tmp0_;
	gchar* _tmp1_;
	g_return_if_fail (self != NULL);
	_tmp0_ = value;
	_tmp1_ = g_strdup (_tmp0_);
	_g_free0 (self->priv->_status);
	self->priv->_status = _tmp1_;
	g_object_notify ((GObject *) self, "status");
}


static void iliwi_wifi_class_init (iliwiWifiClass * klass) {
	iliwi_wifi_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (iliwiWifiPrivate));
	G_OBJECT_CLASS (klass)->get_property = _vala_iliwi_wifi_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_iliwi_wifi_set_property;
	G_OBJECT_CLASS (klass)->finalize = iliwi_wifi_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), ILIWI_WIFI_STATUS, g_param_spec_string ("status", "status", "status", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_signal_new ("status_change", ILIWI_TYPE_WIFI, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
	g_signal_new ("network_list_change", ILIWI_TYPE_WIFI, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
}


static void iliwi_wifi_instance_init (iliwiWifi * self) {
	gchar* _tmp0_;
	self->priv = ILIWI_WIFI_GET_PRIVATE (self);
	_tmp0_ = g_strdup ("initializing");
	self->priv->_status = _tmp0_;
}


static void iliwi_wifi_finalize (GObject* obj) {
	iliwiWifi * self;
	GThread* _tmp0_;
	self = ILIWI_WIFI (obj);
	iliwi_wifi_thread_stop_thread ();
	_tmp0_ = self->priv->thread;
	g_thread_join (_tmp0_);
	_g_free0 (self->priv->_status);
	G_OBJECT_CLASS (iliwi_wifi_parent_class)->finalize (obj);
}


GType iliwi_wifi_get_type (void) {
	static volatile gsize iliwi_wifi_type_id__volatile = 0;
	if (g_once_init_enter (&iliwi_wifi_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (iliwiWifiClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) iliwi_wifi_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (iliwiWifi), 0, (GInstanceInitFunc) iliwi_wifi_instance_init, NULL };
		GType iliwi_wifi_type_id;
		iliwi_wifi_type_id = g_type_register_static (G_TYPE_OBJECT, "iliwiWifi", &g_define_type_info, 0);
		g_once_init_leave (&iliwi_wifi_type_id__volatile, iliwi_wifi_type_id);
	}
	return iliwi_wifi_type_id__volatile;
}


static void _vala_iliwi_wifi_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
	iliwiWifi * self;
	self = ILIWI_WIFI (object);
	switch (property_id) {
		case ILIWI_WIFI_STATUS:
		g_value_set_string (value, iliwi_wifi_get_status (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


static void _vala_iliwi_wifi_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
	iliwiWifi * self;
	self = ILIWI_WIFI (object);
	switch (property_id) {
		case ILIWI_WIFI_STATUS:
		iliwi_wifi_set_status (self, g_value_get_string (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


GType iliwi_network_status_get_type (void) {
	static volatile gsize iliwi_network_status_type_id__volatile = 0;
	if (g_once_init_enter (&iliwi_network_status_type_id__volatile)) {
		static const GEnumValue values[] = {{ILIWI_NETWORK_STATUS_UNCONNECTED, "ILIWI_NETWORK_STATUS_UNCONNECTED", "unconnected"}, {ILIWI_NETWORK_STATUS_CONNECT, "ILIWI_NETWORK_STATUS_CONNECT", "connect"}, {ILIWI_NETWORK_STATUS_CONNECTING, "ILIWI_NETWORK_STATUS_CONNECTING", "connecting"}, {ILIWI_NETWORK_STATUS_CONNECTED, "ILIWI_NETWORK_STATUS_CONNECTED", "connected"}, {0, NULL, NULL}};
		GType iliwi_network_status_type_id;
		iliwi_network_status_type_id = g_enum_register_static ("iliwiNetworkStatus", values);
		g_once_init_leave (&iliwi_network_status_type_id__volatile, iliwi_network_status_type_id);
	}
	return iliwi_network_status_type_id__volatile;
}


void iliwi_preferred_network_copy (const iliwiPreferredNetwork* self, iliwiPreferredNetwork* dest) {
	const gchar* _tmp0_;
	gchar* _tmp1_;
	gboolean _tmp2_;
	const gchar* _tmp3_;
	gchar* _tmp4_;
	const gchar* _tmp5_;
	gchar* _tmp6_;
	const gchar* _tmp7_;
	gchar* _tmp8_;
	_tmp0_ = (*self).password;
	_tmp1_ = g_strdup (_tmp0_);
	_g_free0 ((*dest).password);
	(*dest).password = _tmp1_;
	_tmp2_ = (*self).password_in_ascii;
	(*dest).password_in_ascii = _tmp2_;
	_tmp3_ = (*self).username;
	_tmp4_ = g_strdup (_tmp3_);
	_g_free0 ((*dest).username);
	(*dest).username = _tmp4_;
	_tmp5_ = (*self).cert;
	_tmp6_ = g_strdup (_tmp5_);
	_g_free0 ((*dest).cert);
	(*dest).cert = _tmp6_;
	_tmp7_ = (*self).cert_dir;
	_tmp8_ = g_strdup (_tmp7_);
	_g_free0 ((*dest).cert_dir);
	(*dest).cert_dir = _tmp8_;
}


void iliwi_preferred_network_destroy (iliwiPreferredNetwork* self) {
	_g_free0 ((*self).password);
	_g_free0 ((*self).username);
	_g_free0 ((*self).cert);
	_g_free0 ((*self).cert_dir);
}


iliwiPreferredNetwork* iliwi_preferred_network_dup (const iliwiPreferredNetwork* self) {
	iliwiPreferredNetwork* dup;
	dup = g_new0 (iliwiPreferredNetwork, 1);
	iliwi_preferred_network_copy (self, dup);
	return dup;
}


void iliwi_preferred_network_free (iliwiPreferredNetwork* self) {
	iliwi_preferred_network_destroy (self);
	g_free (self);
}


GType iliwi_preferred_network_get_type (void) {
	static volatile gsize iliwi_preferred_network_type_id__volatile = 0;
	if (g_once_init_enter (&iliwi_preferred_network_type_id__volatile)) {
		GType iliwi_preferred_network_type_id;
		iliwi_preferred_network_type_id = g_boxed_type_register_static ("iliwiPreferredNetwork", (GBoxedCopyFunc) iliwi_preferred_network_dup, (GBoxedFreeFunc) iliwi_preferred_network_free);
		g_once_init_leave (&iliwi_preferred_network_type_id__volatile, iliwi_preferred_network_type_id);
	}
	return iliwi_preferred_network_type_id__volatile;
}


gboolean iliwi_network_valid_network (iliwiNetwork* self) {
	gboolean result = FALSE;
	const gchar* _tmp0_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->address;
	result = _tmp0_ != NULL;
	return result;
}


gchar* iliwi_network_pretty_string (iliwiNetwork* self) {
	gchar* result = NULL;
	gchar* _tmp0_;
	gchar* info_str;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_;
	gboolean _tmp4_;
	gboolean _tmp11_;
	gchar* _tmp14_;
	gchar* status_str;
	iliwiNetworkStatus _tmp15_;
	const gchar* _tmp19_;
	gint _tmp20_;
	const gchar* _tmp21_;
	const gchar* _tmp22_;
	gchar* _tmp23_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = g_strdup ("");
	info_str = _tmp0_;
	_tmp2_ = self->encryption;
	if (_tmp2_) {
		gboolean _tmp3_;
		_tmp3_ = self->authentication;
		_tmp1_ = !_tmp3_;
	} else {
		_tmp1_ = FALSE;
	}
	_tmp4_ = _tmp1_;
	if (_tmp4_) {
		gchar* _tmp5_;
		_tmp5_ = g_strdup ("(enc)");
		_g_free0 (info_str);
		info_str = _tmp5_;
	} else {
		gboolean _tmp6_ = FALSE;
		gboolean _tmp7_;
		gboolean _tmp9_;
		_tmp7_ = self->encryption;
		if (_tmp7_) {
			gboolean _tmp8_;
			_tmp8_ = self->authentication;
			_tmp6_ = _tmp8_;
		} else {
			_tmp6_ = FALSE;
		}
		_tmp9_ = _tmp6_;
		if (_tmp9_) {
			gchar* _tmp10_;
			_tmp10_ = g_strdup ("(enc+auth)");
			_g_free0 (info_str);
			info_str = _tmp10_;
		}
	}
	_tmp11_ = self->adhoc;
	if (_tmp11_) {
		const gchar* _tmp12_;
		gchar* _tmp13_;
		_tmp12_ = info_str;
		_tmp13_ = g_strconcat (_tmp12_, "~", NULL);
		_g_free0 (info_str);
		info_str = _tmp13_;
	}
	_tmp14_ = g_strdup ("");
	status_str = _tmp14_;
	_tmp15_ = self->priv->_status;
	if (_tmp15_ == ILIWI_NETWORK_STATUS_CONNECTING) {
		gchar* _tmp16_;
		_tmp16_ = g_strdup ("CONNECTING ");
		_g_free0 (status_str);
		status_str = _tmp16_;
	} else {
		iliwiNetworkStatus _tmp17_;
		_tmp17_ = self->priv->_status;
		if (_tmp17_ == ILIWI_NETWORK_STATUS_CONNECTED) {
			gchar* _tmp18_;
			_tmp18_ = g_strdup ("CONNECTED ");
			_g_free0 (status_str);
			status_str = _tmp18_;
		}
	}
	_tmp19_ = status_str;
	_tmp20_ = self->strength;
	_tmp21_ = info_str;
	_tmp22_ = self->essid;
	_tmp23_ = g_strdup_printf ("%s%i%% %s %s", _tmp19_, _tmp20_, _tmp21_, _tmp22_);
	result = _tmp23_;
	_g_free0 (status_str);
	_g_free0 (info_str);
	return result;
}


gchar* iliwi_network_get_title (iliwiNetwork* self) {
	gchar* result = NULL;
	const gchar* _tmp0_;
	gchar* _tmp1_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->essid;
	_tmp1_ = g_strdup (_tmp0_);
	result = _tmp1_;
	return result;
}


void iliwi_network_set_new_status (iliwiNetwork* self, iliwiNetworkStatus _status) {
	iliwiNetworkStatus _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _status;
	iliwi_network_set_status (self, _tmp0_);
	iliwi_network_update_view (self);
}


void iliwi_network_set_strength (iliwiNetwork* self, gint i, gboolean update_list) {
	gint _tmp0_;
	gboolean _tmp1_;
	g_return_if_fail (self != NULL);
	_tmp0_ = i;
	self->strength = _tmp0_;
	_tmp1_ = update_list;
	if (_tmp1_) {
		iliwi_network_update_view (self);
	}
}


void iliwi_network_set_encyption_to_wpa (iliwiNetwork* self) {
	g_return_if_fail (self != NULL);
	iliwi_network_set_wpa_encryption (self, TRUE);
}


static void iliwi_network_update_view (iliwiNetwork* self) {
	Elm_Genlist_Item* _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->listitem;
	if (_tmp0_ != NULL) {
		Elm_Genlist_Item* _tmp1_;
		_tmp1_ = self->listitem;
		elm_genlist_item_update (_tmp1_);
	}
}


iliwiNetwork* iliwi_network_construct (GType object_type) {
	iliwiNetwork* self = NULL;
	self = (iliwiNetwork*) g_type_create_instance (object_type);
	return self;
}


iliwiNetwork* iliwi_network_new (void) {
	return iliwi_network_construct (ILIWI_TYPE_NETWORK);
}


gboolean iliwi_network_get_wpa_encryption (iliwiNetwork* self) {
	gboolean result;
	gboolean _tmp0_;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = self->priv->_wpa_encryption;
	result = _tmp0_;
	return result;
}


static void iliwi_network_set_wpa_encryption (iliwiNetwork* self, gboolean value) {
	gboolean _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = value;
	self->priv->_wpa_encryption = _tmp0_;
}


iliwiNetworkStatus iliwi_network_get_status (iliwiNetwork* self) {
	iliwiNetworkStatus result;
	iliwiNetworkStatus _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->_status;
	result = _tmp0_;
	return result;
}


static void iliwi_network_set_status (iliwiNetwork* self, iliwiNetworkStatus value) {
	iliwiNetworkStatus _tmp0_;
	g_return_if_fail (self != NULL);
	_tmp0_ = value;
	self->priv->_status = _tmp0_;
}


static void iliwi_value_network_init (GValue* value) {
	value->data[0].v_pointer = NULL;
}


static void iliwi_value_network_free_value (GValue* value) {
	if (value->data[0].v_pointer) {
		iliwi_network_unref (value->data[0].v_pointer);
	}
}


static void iliwi_value_network_copy_value (const GValue* src_value, GValue* dest_value) {
	if (src_value->data[0].v_pointer) {
		dest_value->data[0].v_pointer = iliwi_network_ref (src_value->data[0].v_pointer);
	} else {
		dest_value->data[0].v_pointer = NULL;
	}
}


static gpointer iliwi_value_network_peek_pointer (const GValue* value) {
	return value->data[0].v_pointer;
}


static gchar* iliwi_value_network_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		iliwiNetwork* object;
		object = collect_values[0].v_pointer;
		if (object->parent_instance.g_class == NULL) {
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		}
		value->data[0].v_pointer = iliwi_network_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* iliwi_value_network_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	iliwiNetwork** object_p;
	object_p = collect_values[0].v_pointer;
	if (!object_p) {
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
	}
	if (!value->data[0].v_pointer) {
		*object_p = NULL;
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
		*object_p = value->data[0].v_pointer;
	} else {
		*object_p = iliwi_network_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* iliwi_param_spec_network (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	iliwiParamSpecNetwork* spec;
	g_return_val_if_fail (g_type_is_a (object_type, ILIWI_TYPE_NETWORK), NULL);
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
	G_PARAM_SPEC (spec)->value_type = object_type;
	return G_PARAM_SPEC (spec);
}


gpointer iliwi_value_get_network (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, ILIWI_TYPE_NETWORK), NULL);
	return value->data[0].v_pointer;
}


void iliwi_value_set_network (GValue* value, gpointer v_object) {
	iliwiNetwork* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, ILIWI_TYPE_NETWORK));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, ILIWI_TYPE_NETWORK));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
		iliwi_network_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		iliwi_network_unref (old);
	}
}


void iliwi_value_take_network (GValue* value, gpointer v_object) {
	iliwiNetwork* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, ILIWI_TYPE_NETWORK));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, ILIWI_TYPE_NETWORK));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		iliwi_network_unref (old);
	}
}


static void iliwi_network_class_init (iliwiNetworkClass * klass) {
	iliwi_network_parent_class = g_type_class_peek_parent (klass);
	ILIWI_NETWORK_CLASS (klass)->finalize = iliwi_network_finalize;
	g_type_class_add_private (klass, sizeof (iliwiNetworkPrivate));
}


static void iliwi_network_instance_init (iliwiNetwork * self) {
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	gchar* _tmp3_;
	gchar* _tmp4_;
	self->priv = ILIWI_NETWORK_GET_PRIVATE (self);
	_tmp0_ = g_strdup ("");
	self->essid = _tmp0_;
	self->encryption = FALSE;
	self->authentication = FALSE;
	self->priv->_wpa_encryption = FALSE;
	self->adhoc = FALSE;
	_tmp1_ = g_strdup ("");
	self->password = _tmp1_;
	_tmp2_ = g_strdup ("");
	self->username = _tmp2_;
	_tmp3_ = g_strdup ("");
	self->cert = _tmp3_;
	_tmp4_ = g_strdup ("");
	self->cert_dir = _tmp4_;
	self->password_in_ascii = TRUE;
	self->strength = 0;
	self->unsaved = TRUE;
	self->visible = FALSE;
	self->preferred_network = FALSE;
	self->listitem = NULL;
	self->priv->_status = ILIWI_NETWORK_STATUS_UNCONNECTED;
	self->ref_count = 1;
}


static void iliwi_network_finalize (iliwiNetwork* obj) {
	iliwiNetwork * self;
	self = ILIWI_NETWORK (obj);
	_g_free0 (self->address);
	_g_free0 (self->essid);
	_g_free0 (self->password);
	_g_free0 (self->username);
	_g_free0 (self->cert);
	_g_free0 (self->cert_dir);
}


GType iliwi_network_get_type (void) {
	static volatile gsize iliwi_network_type_id__volatile = 0;
	if (g_once_init_enter (&iliwi_network_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { iliwi_value_network_init, iliwi_value_network_free_value, iliwi_value_network_copy_value, iliwi_value_network_peek_pointer, "p", iliwi_value_network_collect_value, "p", iliwi_value_network_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (iliwiNetworkClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) iliwi_network_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (iliwiNetwork), 0, (GInstanceInitFunc) iliwi_network_instance_init, &g_define_type_value_table };
		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
		GType iliwi_network_type_id;
		iliwi_network_type_id = g_type_register_fundamental (g_type_fundamental_next (), "iliwiNetwork", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&iliwi_network_type_id__volatile, iliwi_network_type_id);
	}
	return iliwi_network_type_id__volatile;
}


gpointer iliwi_network_ref (gpointer instance) {
	iliwiNetwork* self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}


void iliwi_network_unref (gpointer instance) {
	iliwiNetwork* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		ILIWI_NETWORK_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


static gboolean __lambda0_ (void) {
	gboolean result = FALSE;
	iliwiNetworkStatus _tmp0_;
	iliwiNetworkStatus _tmp17_;
	gint _tmp18_;
	_tmp0_ = iliwi_wifi_thread_status;
	if (_tmp0_ == ILIWI_NETWORK_STATUS_UNCONNECTED) {
		gboolean _tmp1_ = FALSE;
		GeeHashMap* _tmp2_;
		gint _tmp3_;
		gint _tmp4_;
		gboolean _tmp6_;
		iliwiNetwork* _tmp13_ = NULL;
		iliwiNetwork* suggestion;
		iliwiNetwork* _tmp14_;
		_tmp2_ = iliwi_wifi_thread_networks;
		_tmp3_ = gee_abstract_map_get_size ((GeeMap*) _tmp2_);
		_tmp4_ = _tmp3_;
		if (_tmp4_ == 0) {
			gint _tmp5_;
			_tmp5_ = iliwi_wifi_thread_seconds_since_last_scan;
			_tmp1_ = _tmp5_ >= ILIWI_ZERO_NETWORKS_SCAN_SECONDS;
		} else {
			_tmp1_ = FALSE;
		}
		_tmp6_ = _tmp1_;
		if (_tmp6_) {
			iliwi_wifi_thread_scan ();
		} else {
			gboolean _tmp7_ = FALSE;
			GeeHashMap* _tmp8_;
			gint _tmp9_;
			gint _tmp10_;
			gboolean _tmp12_;
			_tmp8_ = iliwi_wifi_thread_networks;
			_tmp9_ = gee_abstract_map_get_size ((GeeMap*) _tmp8_);
			_tmp10_ = _tmp9_;
			if (_tmp10_ > 0) {
				gint _tmp11_;
				_tmp11_ = iliwi_wifi_thread_seconds_since_last_scan;
				_tmp7_ = _tmp11_ >= ILIWI_NONZERO_NETWORKS_SCAN_SECONDS;
			} else {
				_tmp7_ = FALSE;
			}
			_tmp12_ = _tmp7_;
			if (_tmp12_) {
				iliwi_wifi_thread_scan ();
			}
		}
		_tmp13_ = iliwi_wifi_thread_suggest_network ();
		suggestion = _tmp13_;
		_tmp14_ = suggestion;
		if (_tmp14_ != NULL) {
			iliwiNetwork* _tmp15_;
			_tmp15_ = suggestion;
			iliwi_wifi_thread_connect_to_network (_tmp15_);
		}
	} else {
		gint _tmp16_;
		_tmp16_ = iliwi_wifi_thread_seconds_since_last_scan;
		if (_tmp16_ >= ILIWI_CONNECTED_SCAN_SECONDS) {
			iliwi_wifi_thread_scan ();
		}
	}
	_tmp17_ = iliwi_wifi_thread_status;
	if (_tmp17_ == ILIWI_NETWORK_STATUS_CONNECT) {
		iliwi_wifi_thread_run_dhcp ();
	}
	_tmp18_ = iliwi_wifi_thread_seconds_since_last_scan;
	iliwi_wifi_thread_seconds_since_last_scan = _tmp18_ + ILIWI_TIMEOUT_SECONDS;
	result = TRUE;
	return result;
}


static gboolean ___lambda0__gsource_func (gpointer self) {
	gboolean result;
	result = __lambda0_ ();
	return result;
}


void* iliwi_wifi_thread_run_thread (void) {
	void* result = NULL;
	GMainLoop* _tmp0_;
	GSource* _tmp1_;
	GSource* time;
	GSource* _tmp2_;
	GSource* _tmp3_;
	GMainLoop* _tmp4_;
	GMainContext* _tmp5_ = NULL;
	GMainLoop* _tmp6_;
	GError * _inner_error_ = NULL;
	_tmp0_ = g_main_loop_new (NULL, FALSE);
	_g_main_loop_unref0 (iliwi_wifi_thread_loop);
	iliwi_wifi_thread_loop = _tmp0_;
	iliwi_wifi_thread_initialize ();
	_tmp1_ = g_timeout_source_new_seconds ((guint) ILIWI_TIMEOUT_SECONDS);
	time = _tmp1_;
	_tmp2_ = time;
	g_source_set_callback (_tmp2_, ___lambda0__gsource_func, NULL, NULL);
	_tmp3_ = time;
	_tmp4_ = iliwi_wifi_thread_loop;
	_tmp5_ = g_main_loop_get_context (_tmp4_);
	g_source_attach (_tmp3_, _tmp5_);
	_tmp6_ = iliwi_wifi_thread_loop;
	g_main_loop_run (_tmp6_);
	_g_source_unref0 (time);
	time = NULL;
	{
		Usage* _tmp7_;
		Usage* _tmp8_;
		_tmp7_ = iliwi_wifi_thread_fso_usage;
		usage_ReleaseResource (_tmp7_, "WiFi", &_inner_error_);
		if (_inner_error_ != NULL) {
			goto __catch3_g_error;
		}
		_tmp8_ = iliwi_wifi_thread_fso_usage;
		usage_ReleaseResource (_tmp8_, "CPU", &_inner_error_);
		if (_inner_error_ != NULL) {
			goto __catch3_g_error;
		}
	}
	goto __finally3;
	__catch3_g_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		_g_error_free0 (e);
	}
	__finally3:
	if (_inner_error_ != NULL) {
		_g_source_unref0 (time);
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return NULL;
	}
	iliwi_wifi_thread_save_preferred_networks ();
	result = NULL;
	_g_source_unref0 (time);
	return result;
}


void iliwi_wifi_thread_stop_thread (void) {
	GMainLoop* _tmp0_;
	_tmp0_ = iliwi_wifi_thread_loop;
	g_main_loop_quit (_tmp0_);
}


iliwiNetwork** iliwi_wifi_thread_get_visible_networks (int* result_length1) {
	iliwiNetwork** result = NULL;
	gint a = 0;
	GeeArrayList* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	iliwiNetwork** _tmp3_ = NULL;
	iliwiNetwork** n;
	gint n_length1;
	gint _n_size_;
	gint b = 0;
	GeeArrayList* _tmp4_;
	gint c = 0;
	iliwiNetwork** _tmp21_;
	gint _tmp21__length1;
	GError * _inner_error_ = NULL;
	_tmp0_ = iliwi_wifi_thread_visible_networks;
	_tmp1_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (iliwiNetwork*, _tmp2_ + 1);
	n = _tmp3_;
	n_length1 = _tmp2_;
	_n_size_ = n_length1;
	_tmp4_ = iliwi_wifi_thread_visible_networks;
	if (_tmp4_ == NULL) {
		FILE* _tmp5_;
		_tmp5_ = stderr;
		fprintf (_tmp5_, "null\n");
	}
	{
		GeeArrayList* _tmp6_;
		_tmp6_ = iliwi_wifi_thread_visible_networks;
		g_static_rec_mutex_lock (&__lock_iliwi_wifi_thread_visible_networks);
		{
			{
				gint i;
				i = 0;
				{
					gboolean _tmp7_;
					_tmp7_ = TRUE;
					while (TRUE) {
						gboolean _tmp8_;
						gint _tmp10_;
						GeeArrayList* _tmp11_;
						gint _tmp12_;
						gint _tmp13_;
						iliwiNetwork** _tmp14_;
						gint _tmp14__length1;
						gint _tmp15_;
						GeeArrayList* _tmp16_;
						gint _tmp17_;
						gpointer _tmp18_ = NULL;
						iliwiNetwork* _tmp19_;
						_tmp8_ = _tmp7_;
						if (!_tmp8_) {
							gint _tmp9_;
							_tmp9_ = i;
							i = _tmp9_ + 1;
						}
						_tmp7_ = FALSE;
						_tmp10_ = i;
						_tmp11_ = iliwi_wifi_thread_visible_networks;
						_tmp12_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp11_);
						_tmp13_ = _tmp12_;
						if (!(_tmp10_ < _tmp13_)) {
							break;
						}
						_tmp14_ = n;
						_tmp14__length1 = n_length1;
						_tmp15_ = i;
						_tmp16_ = iliwi_wifi_thread_visible_networks;
						_tmp17_ = i;
						_tmp18_ = gee_abstract_list_get ((GeeAbstractList*) _tmp16_, _tmp17_);
						_iliwi_network_unref0 (_tmp14_[_tmp15_]);
						_tmp14_[_tmp15_] = (iliwiNetwork*) _tmp18_;
						_tmp19_ = _tmp14_[_tmp15_];
					}
				}
			}
		}
		__finally4:
		{
			GeeArrayList* _tmp20_;
			_tmp20_ = iliwi_wifi_thread_visible_networks;
			g_static_rec_mutex_unlock (&__lock_iliwi_wifi_thread_visible_networks);
		}
		if (_inner_error_ != NULL) {
			n = (_vala_array_free (n, n_length1, (GDestroyNotify) iliwi_network_unref), NULL);
			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return NULL;
		}
	}
	_tmp21_ = n;
	_tmp21__length1 = n_length1;
	if (result_length1) {
		*result_length1 = _tmp21__length1;
	}
	result = _tmp21_;
	return result;
}


void iliwi_wifi_thread_preferred_state_change (iliwiNetwork* network) {
	iliwiNetwork* _tmp0_;
	gboolean _tmp1_;
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	_tmp1_ = _tmp0_->preferred_network;
	if (_tmp1_) {
		GeeHashMap* _tmp2_;
		iliwiNetwork* _tmp3_;
		const gchar* _tmp4_;
		iliwiNetwork* _tmp5_;
		const gchar* _tmp6_;
		gchar* _tmp7_;
		iliwiNetwork* _tmp8_;
		gboolean _tmp9_;
		iliwiNetwork* _tmp10_;
		const gchar* _tmp11_;
		gchar* _tmp12_;
		iliwiNetwork* _tmp13_;
		const gchar* _tmp14_;
		gchar* _tmp15_;
		iliwiNetwork* _tmp16_;
		const gchar* _tmp17_;
		gchar* _tmp18_;
		iliwiPreferredNetwork _tmp19_ = {0};
		iliwiPreferredNetwork _tmp20_;
		iliwiPreferredNetwork _tmp21_;
		_tmp2_ = iliwi_wifi_thread_preferred_networks;
		_tmp3_ = network;
		_tmp4_ = _tmp3_->address;
		_tmp5_ = network;
		_tmp6_ = _tmp5_->password;
		_tmp7_ = g_strdup (_tmp6_);
		_tmp8_ = network;
		_tmp9_ = _tmp8_->password_in_ascii;
		_tmp10_ = network;
		_tmp11_ = _tmp10_->username;
		_tmp12_ = g_strdup (_tmp11_);
		_tmp13_ = network;
		_tmp14_ = _tmp13_->cert;
		_tmp15_ = g_strdup (_tmp14_);
		_tmp16_ = network;
		_tmp17_ = _tmp16_->cert_dir;
		_tmp18_ = g_strdup (_tmp17_);
		memset (&_tmp19_, 0, sizeof (iliwiPreferredNetwork));
		_g_free0 (_tmp19_.password);
		_tmp19_.password = _tmp7_;
		_tmp19_.password_in_ascii = _tmp9_;
		_g_free0 (_tmp19_.username);
		_tmp19_.username = _tmp12_;
		_g_free0 (_tmp19_.cert);
		_tmp19_.cert = _tmp15_;
		_g_free0 (_tmp19_.cert_dir);
		_tmp19_.cert_dir = _tmp18_;
		_tmp20_ = _tmp19_;
		_tmp21_ = _tmp20_;
		gee_abstract_map_set ((GeeAbstractMap*) _tmp2_, _tmp4_, &_tmp21_);
		iliwi_preferred_network_destroy (&_tmp20_);
	} else {
		GeeHashMap* _tmp22_;
		iliwiNetwork* _tmp23_;
		const gchar* _tmp24_;
		gboolean _tmp25_ = FALSE;
		_tmp22_ = iliwi_wifi_thread_preferred_networks;
		_tmp23_ = network;
		_tmp24_ = _tmp23_->address;
		_tmp25_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp22_, _tmp24_);
		if (_tmp25_) {
			GeeHashMap* _tmp26_;
			iliwiNetwork* _tmp27_;
			const gchar* _tmp28_;
			_tmp26_ = iliwi_wifi_thread_preferred_networks;
			_tmp27_ = network;
			_tmp28_ = _tmp27_->address;
			gee_abstract_map_unset ((GeeAbstractMap*) _tmp26_, _tmp28_, NULL);
		}
	}
}


void iliwi_wifi_thread_connect_to_network (iliwiNetwork* network) {
	iliwiWifi* _tmp0_;
	iliwiNetwork* _tmp1_;
	iliwiNetwork* _tmp2_;
	const gchar* _tmp3_ = NULL;
	gchar* _tmp4_;
	gchar* _tmp5_;
	const gchar* _tmp6_ = NULL;
	gchar* _tmp7_;
	gchar* filename;
	iliwiNetwork* _tmp8_;
	const gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* password;
	iliwiNetwork* _tmp11_;
	gboolean _tmp12_;
	const gchar* _tmp18_;
	FILE* _tmp19_ = NULL;
	FILE* stream;
	FILE* _tmp20_;
	iliwiNetwork* _tmp21_;
	gboolean _tmp22_;
	FILE* _tmp24_;
	FILE* _tmp25_;
	iliwiNetwork* _tmp26_;
	const gchar* _tmp27_;
	gchar* _tmp28_ = NULL;
	gchar* _tmp29_;
	iliwiNetwork* _tmp30_;
	gboolean _tmp31_;
	iliwiNetwork* _tmp87_;
	gboolean _tmp88_;
	FILE* _tmp90_;
	FILE* _tmp91_;
	GError * _inner_error_ = NULL;
	g_return_if_fail (network != NULL);
	iliwi_wifi_thread_disconnectt ();
	_tmp0_ = iliwi_wifi;
	iliwi_wifi_set_new_status (_tmp0_, "connecting..");
	_tmp1_ = network;
	iliwi_wifi_thread_connect_network = _tmp1_;
	_tmp2_ = network;
	iliwi_network_set_new_status (_tmp2_, ILIWI_NETWORK_STATUS_CONNECTING);
	_tmp3_ = g_get_user_config_dir ();
	_tmp4_ = g_strconcat (_tmp3_, "/iliwi", NULL);
	_tmp5_ = _tmp4_;
	g_mkdir_with_parents (_tmp5_, 0755);
	_g_free0 (_tmp5_);
	_tmp6_ = g_get_user_config_dir ();
	_tmp7_ = g_strconcat (_tmp6_, "/iliwi/wpa_supplicant.conf", NULL);
	filename = _tmp7_;
	_tmp8_ = network;
	_tmp9_ = _tmp8_->password;
	_tmp10_ = g_strdup (_tmp9_);
	password = _tmp10_;
	_tmp11_ = network;
	_tmp12_ = _tmp11_->password_in_ascii;
	if (_tmp12_) {
		iliwiNetwork* _tmp13_;
		const gchar* _tmp14_;
		gchar* _tmp15_;
		gchar* _tmp16_;
		gchar* _tmp17_;
		_tmp13_ = network;
		_tmp14_ = _tmp13_->password;
		_tmp15_ = g_strconcat ("\"", _tmp14_, NULL);
		_tmp16_ = _tmp15_;
		_tmp17_ = g_strconcat (_tmp16_, "\"", NULL);
		_g_free0 (password);
		password = _tmp17_;
		_g_free0 (_tmp16_);
	}
	_tmp18_ = filename;
	_tmp19_ = fopen (_tmp18_, "w");
	stream = _tmp19_;
	_tmp20_ = stream;
	fputs ("ctrl_interface=/var/run/wpa_supplicant\n", _tmp20_);
	_tmp21_ = network;
	_tmp22_ = _tmp21_->adhoc;
	if (_tmp22_) {
		FILE* _tmp23_;
		_tmp23_ = stream;
		fputs ("ap_scan=2\n", _tmp23_);
	}
	_tmp24_ = stream;
	fputs ("network={\n", _tmp24_);
	_tmp25_ = stream;
	_tmp26_ = network;
	_tmp27_ = _tmp26_->essid;
	_tmp28_ = g_strdup_printf ("  ssid=\"%s\"\n", _tmp27_);
	_tmp29_ = _tmp28_;
	fputs (_tmp29_, _tmp25_);
	_g_free0 (_tmp29_);
	_tmp30_ = network;
	_tmp31_ = _tmp30_->encryption;
	if (_tmp31_) {
		gboolean _tmp32_ = FALSE;
		iliwiNetwork* _tmp33_;
		gboolean _tmp34_;
		gboolean _tmp35_;
		gboolean _tmp38_;
		_tmp33_ = network;
		_tmp34_ = iliwi_network_get_wpa_encryption (_tmp33_);
		_tmp35_ = _tmp34_;
		if (_tmp35_) {
			iliwiNetwork* _tmp36_;
			gboolean _tmp37_;
			_tmp36_ = network;
			_tmp37_ = _tmp36_->authentication;
			_tmp32_ = !_tmp37_;
		} else {
			_tmp32_ = FALSE;
		}
		_tmp38_ = _tmp32_;
		if (_tmp38_) {
			FILE* _tmp39_;
			const gchar* _tmp40_;
			gchar* _tmp41_ = NULL;
			gchar* _tmp42_;
			iliwiNetwork* _tmp43_;
			gboolean _tmp44_;
			_tmp39_ = stream;
			_tmp40_ = password;
			_tmp41_ = g_strdup_printf ("  psk=%s\n", _tmp40_);
			_tmp42_ = _tmp41_;
			fputs (_tmp42_, _tmp39_);
			_g_free0 (_tmp42_);
			_tmp43_ = network;
			_tmp44_ = _tmp43_->adhoc;
			if (_tmp44_) {
				FILE* _tmp45_;
				FILE* _tmp46_;
				FILE* _tmp47_;
				FILE* _tmp48_;
				_tmp45_ = stream;
				fputs ("  proto=WPA\n", _tmp45_);
				_tmp46_ = stream;
				fputs ("  key_mgmt=WPA-NONE\n", _tmp46_);
				_tmp47_ = stream;
				fputs ("  pairwise=NONE\n", _tmp47_);
				_tmp48_ = stream;
				fputs ("  group=TKIP\n", _tmp48_);
			}
		} else {
			gboolean _tmp49_ = FALSE;
			iliwiNetwork* _tmp50_;
			gboolean _tmp51_;
			gboolean _tmp52_;
			gboolean _tmp55_;
			_tmp50_ = network;
			_tmp51_ = iliwi_network_get_wpa_encryption (_tmp50_);
			_tmp52_ = _tmp51_;
			if (_tmp52_) {
				iliwiNetwork* _tmp53_;
				gboolean _tmp54_;
				_tmp53_ = network;
				_tmp54_ = _tmp53_->authentication;
				_tmp49_ = _tmp54_;
			} else {
				_tmp49_ = FALSE;
			}
			_tmp55_ = _tmp49_;
			if (_tmp55_) {
				FILE* _tmp56_;
				iliwiNetwork* _tmp57_;
				const gchar* _tmp58_;
				gchar* _tmp59_ = NULL;
				gchar* _tmp60_;
				FILE* _tmp61_;
				FILE* _tmp62_;
				FILE* _tmp63_;
				FILE* _tmp64_;
				iliwiNetwork* _tmp65_;
				const gchar* _tmp66_;
				FILE* _tmp74_;
				iliwiNetwork* _tmp75_;
				const gchar* _tmp76_;
				gchar* _tmp77_ = NULL;
				gchar* _tmp78_;
				FILE* _tmp79_;
				FILE* _tmp80_;
				_tmp56_ = stream;
				_tmp57_ = network;
				_tmp58_ = _tmp57_->password;
				_tmp59_ = g_strdup_printf ("  password=\"%s\"\n", _tmp58_);
				_tmp60_ = _tmp59_;
				fputs (_tmp60_, _tmp56_);
				_g_free0 (_tmp60_);
				_tmp61_ = stream;
				fputs ("  key_mgmt=WPA-EAP\n", _tmp61_);
				_tmp62_ = stream;
				fputs ("  pairwise=CCMP TKIP\n", _tmp62_);
				_tmp63_ = stream;
				fputs ("  group=CCMP TKIP\n", _tmp63_);
				_tmp64_ = stream;
				fputs ("  eap=PEAP\n", _tmp64_);
				_tmp65_ = network;
				_tmp66_ = _tmp65_->cert;
				if (g_strcmp0 (_tmp66_, "") != 0) {
					FILE* _tmp67_;
					iliwiNetwork* _tmp68_;
					const gchar* _tmp69_;
					iliwiNetwork* _tmp70_;
					const gchar* _tmp71_;
					gchar* _tmp72_ = NULL;
					gchar* _tmp73_;
					_tmp67_ = stream;
					_tmp68_ = network;
					_tmp69_ = _tmp68_->cert_dir;
					_tmp70_ = network;
					_tmp71_ = _tmp70_->cert;
					_tmp72_ = g_strdup_printf ("  ca_cert=\"%s%s\"\n", _tmp69_, _tmp71_);
					_tmp73_ = _tmp72_;
					fputs (_tmp73_, _tmp67_);
					_g_free0 (_tmp73_);
				}
				_tmp74_ = stream;
				_tmp75_ = network;
				_tmp76_ = _tmp75_->username;
				_tmp77_ = g_strdup_printf ("  identity=\"%s\"\n", _tmp76_);
				_tmp78_ = _tmp77_;
				fputs (_tmp78_, _tmp74_);
				_g_free0 (_tmp78_);
				_tmp79_ = stream;
				fputs ("  phase1=\"peaplabel=0\"\n", _tmp79_);
				_tmp80_ = stream;
				fputs ("  phase2=\"auth=MSCHAPV2\"\n", _tmp80_);
			} else {
				FILE* _tmp81_;
				FILE* _tmp82_;
				const gchar* _tmp83_;
				gchar* _tmp84_ = NULL;
				gchar* _tmp85_;
				_tmp81_ = stream;
				fputs ("  key_mgmt=NONE\n", _tmp81_);
				_tmp82_ = stream;
				_tmp83_ = password;
				_tmp84_ = g_strdup_printf ("  wep_key0=%s\n", _tmp83_);
				_tmp85_ = _tmp84_;
				fputs (_tmp85_, _tmp82_);
				_g_free0 (_tmp85_);
			}
		}
	} else {
		FILE* _tmp86_;
		_tmp86_ = stream;
		fputs ("  key_mgmt=NONE\n", _tmp86_);
	}
	_tmp87_ = network;
	_tmp88_ = _tmp87_->adhoc;
	if (_tmp88_) {
		FILE* _tmp89_;
		_tmp89_ = stream;
		fputs ("  mode=1\n", _tmp89_);
	}
	_tmp90_ = stream;
	fputs ("}\n", _tmp90_);
	_tmp91_ = stream;
	fflush (_tmp91_);
	_fclose0 (stream);
	stream = NULL;
	{
		gchar* _tmp92_ = NULL;
		gchar* _tmp93_;
		const gchar* _tmp94_;
		gchar* _tmp95_;
		gchar* _tmp96_;
		const gchar* _tmp97_;
		gchar* _tmp98_;
		gchar* _tmp99_;
		gchar** _tmp100_ = NULL;
		gchar** supplicant_args;
		gint supplicant_args_length1;
		gint _supplicant_args_size_;
		_tmp92_ = g_find_program_in_path ("wpa_supplicant");
		_tmp93_ = g_strdup ("-i");
		_tmp94_ = iliwi_wifi_thread_wireless_interface;
		_tmp95_ = g_strdup (_tmp94_);
		_tmp96_ = g_strdup ("-c");
		_tmp97_ = filename;
		_tmp98_ = g_strdup (_tmp97_);
		_tmp99_ = g_strdup ("-B");
		_tmp100_ = g_new0 (gchar*, 6 + 1);
		_tmp100_[0] = _tmp92_;
		_tmp100_[1] = _tmp93_;
		_tmp100_[2] = _tmp95_;
		_tmp100_[3] = _tmp96_;
		_tmp100_[4] = _tmp98_;
		_tmp100_[5] = _tmp99_;
		supplicant_args = _tmp100_;
		supplicant_args_length1 = 6;
		_supplicant_args_size_ = supplicant_args_length1;
		g_spawn_sync (NULL, supplicant_args, NULL, G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, NULL, NULL, NULL, &_inner_error_);
		if (_inner_error_ != NULL) {
			supplicant_args = (_vala_array_free (supplicant_args, supplicant_args_length1, (GDestroyNotify) g_free), NULL);
			if (_inner_error_->domain == G_SPAWN_ERROR) {
				goto __catch5_g_spawn_error;
			}
			supplicant_args = (_vala_array_free (supplicant_args, supplicant_args_length1, (GDestroyNotify) g_free), NULL);
			_fclose0 (stream);
			_g_free0 (password);
			_g_free0 (filename);
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
		supplicant_args = (_vala_array_free (supplicant_args, supplicant_args_length1, (GDestroyNotify) g_free), NULL);
	}
	goto __finally5;
	__catch5_g_spawn_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_debug ("wifi.vala:330: Couldn't start spawn!");
		_g_error_free0 (e);
	}
	__finally5:
	if (_inner_error_ != NULL) {
		_fclose0 (stream);
		_g_free0 (password);
		_g_free0 (filename);
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
	iliwi_wifi_thread_status = ILIWI_NETWORK_STATUS_CONNECT;
	_fclose0 (stream);
	_g_free0 (password);
	_g_free0 (filename);
}


static void iliwi_wifi_thread_disconnectt (void) {
	iliwiNetwork* _tmp4_;
	GError * _inner_error_ = NULL;
	iliwi_wifi_thread_status = ILIWI_NETWORK_STATUS_UNCONNECTED;
	{
		gchar* _tmp0_ = NULL;
		gchar* _tmp1_;
		gchar** _tmp2_ = NULL;
		gchar** _tmp3_;
		gint _tmp3__length1;
		_tmp0_ = g_find_program_in_path ("killall");
		_tmp1_ = g_strdup ("wpa_supplicant");
		_tmp2_ = g_new0 (gchar*, 2 + 1);
		_tmp2_[0] = _tmp0_;
		_tmp2_[1] = _tmp1_;
		_tmp3_ = _tmp2_;
		_tmp3__length1 = 2;
		g_spawn_sync (NULL, _tmp3_, NULL, G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, NULL, NULL, NULL, &_inner_error_);
		_tmp3_ = (_vala_array_free (_tmp3_, _tmp3__length1, (GDestroyNotify) g_free), NULL);
		if (_inner_error_ != NULL) {
			if (_inner_error_->domain == G_SPAWN_ERROR) {
				goto __catch6_g_spawn_error;
			}
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
		g_remove ("/var/run/wpa_supplicant/eth0");
	}
	goto __finally6;
	__catch6_g_spawn_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		_g_error_free0 (e);
	}
	__finally6:
	if (_inner_error_ != NULL) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
	_tmp4_ = iliwi_wifi_thread_connect_network;
	if (_tmp4_ != NULL) {
		iliwiNetwork* _tmp5_;
		_tmp5_ = iliwi_wifi_thread_connect_network;
		iliwi_network_set_new_status (_tmp5_, ILIWI_NETWORK_STATUS_UNCONNECTED);
		iliwi_wifi_thread_connect_network = NULL;
	}
}


static void iliwi_wifi_thread_run_dhcp (void) {
	GError * _inner_error_ = NULL;
	{
		gchar* _tmp0_;
		gchar* udhcpc_result;
		gchar* _tmp1_ = NULL;
		gchar* _tmp2_;
		const gchar* _tmp3_;
		gchar* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		gchar** _tmp7_ = NULL;
		gchar** _tmp8_;
		gint _tmp8__length1;
		gchar* _tmp9_ = NULL;
		GRegex* _tmp10_;
		GRegex* regex_ip;
		GMatchInfo* _result_ = NULL;
		GRegex* _tmp11_;
		const gchar* _tmp12_;
		GMatchInfo* _tmp13_ = NULL;
		gboolean _tmp14_ = FALSE;
		_tmp0_ = g_strdup ("");
		udhcpc_result = _tmp0_;
		_tmp1_ = g_find_program_in_path ("udhcpc");
		_tmp2_ = g_strdup ("-i");
		_tmp3_ = iliwi_wifi_thread_wireless_interface;
		_tmp4_ = g_strdup (_tmp3_);
		_tmp5_ = g_strdup ("-n");
		_tmp6_ = g_strdup ("-R");
		_tmp7_ = g_new0 (gchar*, 5 + 1);
		_tmp7_[0] = _tmp1_;
		_tmp7_[1] = _tmp2_;
		_tmp7_[2] = _tmp4_;
		_tmp7_[3] = _tmp5_;
		_tmp7_[4] = _tmp6_;
		_tmp8_ = _tmp7_;
		_tmp8__length1 = 5;
		g_spawn_sync (NULL, _tmp8_, NULL, G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, &_tmp9_, NULL, NULL, &_inner_error_);
		_g_free0 (udhcpc_result);
		udhcpc_result = _tmp9_;
		_tmp8_ = (_vala_array_free (_tmp8_, _tmp8__length1, (GDestroyNotify) g_free), NULL);
		if (_inner_error_ != NULL) {
			_g_free0 (udhcpc_result);
			goto __catch7_g_error;
		}
		_tmp10_ = g_regex_new ("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}", 0, 0, &_inner_error_);
		regex_ip = _tmp10_;
		if (_inner_error_ != NULL) {
			_g_free0 (udhcpc_result);
			goto __catch7_g_error;
		}
		_tmp11_ = regex_ip;
		_tmp12_ = udhcpc_result;
		_tmp14_ = g_regex_match (_tmp11_, _tmp12_, 0, &_tmp13_);
		_g_match_info_free0 (_result_);
		_result_ = _tmp13_;
		if (_tmp14_) {
			iliwiNetwork* _tmp15_;
			iliwiWifi* _tmp16_;
			_tmp15_ = iliwi_wifi_thread_connect_network;
			iliwi_network_set_new_status (_tmp15_, ILIWI_NETWORK_STATUS_CONNECTED);
			iliwi_wifi_thread_status = ILIWI_NETWORK_STATUS_CONNECTED;
			_tmp16_ = iliwi_wifi;
			iliwi_wifi_set_new_status (_tmp16_, "idle");
		}
		_g_match_info_free0 (_result_);
		_g_regex_unref0 (regex_ip);
		_g_free0 (udhcpc_result);
	}
	goto __finally7;
	__catch7_g_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_debug ("wifi.vala:359: Couldn't start spawn or regex failed!");
		_g_error_free0 (e);
	}
	__finally7:
	if (_inner_error_ != NULL) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
}


static void iliwi_wifi_thread_initialize (void) {
	GHashFunc _tmp20_;
	GEqualFunc _tmp21_;
	GeeHashMap* _tmp22_;
	GeeArrayList* _tmp23_;
	GError * _inner_error_ = NULL;
	{
		Usage* _tmp0_ = NULL;
		Usage* _tmp1_;
		Usage* _tmp2_;
		Usage* _tmp3_;
		_tmp0_ = g_initable_new (TYPE_USAGE_PROXY, NULL, &_inner_error_, "g-flags", 0, "g-name", "org.freesmartphone.ousaged", "g-bus-type", G_BUS_TYPE_SYSTEM, "g-object-path", "/org/freesmartphone/Usage", "g-interface-name", "org.freesmartphone.Usage", NULL);
		_tmp1_ = (Usage*) _tmp0_;
		if (_inner_error_ != NULL) {
			if (_inner_error_->domain == G_IO_ERROR) {
				goto __catch8_g_io_error;
			}
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
		_g_object_unref0 (iliwi_wifi_thread_fso_usage);
		iliwi_wifi_thread_fso_usage = _tmp1_;
		_tmp2_ = iliwi_wifi_thread_fso_usage;
		usage_RequestResource (_tmp2_, "WiFi", &_inner_error_);
		if (_inner_error_ != NULL) {
			if (_inner_error_->domain == G_IO_ERROR) {
				goto __catch8_g_io_error;
			}
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
		_tmp3_ = iliwi_wifi_thread_fso_usage;
		usage_RequestResource (_tmp3_, "CPU", &_inner_error_);
		if (_inner_error_ != NULL) {
			if (_inner_error_->domain == G_IO_ERROR) {
				goto __catch8_g_io_error;
			}
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
	}
	goto __finally8;
	__catch8_g_io_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_debug ("wifi.vala:370: DBus error!");
		_g_error_free0 (e);
	}
	__finally8:
	if (_inner_error_ != NULL) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
	{
		GRegex* _tmp4_;
		GRegex* _tmp5_;
		GRegex* _tmp6_;
		GRegex* _tmp7_;
		GRegex* _tmp8_;
		GRegex* _tmp9_;
		GRegex* _tmp10_;
		GRegex* _tmp11_;
		GRegex* _tmp12_;
		GRegex* _tmp13_;
		GRegex* _tmp14_;
		GRegex* _tmp15_;
		GRegex* _tmp16_;
		GRegex* _tmp17_;
		GRegex* _tmp18_;
		GRegex* _tmp19_;
		_tmp4_ = g_regex_new (" Address: ([0-9A-Z:]{17})$", 0, 0, &_inner_error_);
		_tmp5_ = _tmp4_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_start_address);
		iliwi_wifi_thread_line_regex_start_address = _tmp5_;
		_tmp6_ = g_regex_new ("^\\s+ESSID:\\\"(.*)\\\"$", 0, 0, &_inner_error_);
		_tmp7_ = _tmp6_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_essid);
		iliwi_wifi_thread_line_regex_essid = _tmp7_;
		_tmp8_ = g_regex_new ("^\\s+Encryption key:on$", 0, 0, &_inner_error_);
		_tmp9_ = _tmp8_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_encryption);
		iliwi_wifi_thread_line_regex_encryption = _tmp9_;
		_tmp10_ = g_regex_new ("^\\s+Quality=(\\d+)/(\\d+) ", 0, 0, &_inner_error_);
		_tmp11_ = _tmp10_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_strength);
		iliwi_wifi_thread_line_regex_strength = _tmp11_;
		_tmp12_ = g_regex_new ("^(\\w+\\d+)\\s*Scan completed :$", 0, 0, &_inner_error_);
		_tmp13_ = _tmp12_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_interface);
		iliwi_wifi_thread_line_regex_interface = _tmp13_;
		_tmp14_ = g_regex_new ("^\\s+Mode:Ad-Hoc$", 0, 0, &_inner_error_);
		_tmp15_ = _tmp14_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_adhoc);
		iliwi_wifi_thread_line_regex_adhoc = _tmp15_;
		_tmp16_ = g_regex_new ("^\\s+IE: WPA", 0, 0, &_inner_error_);
		_tmp17_ = _tmp16_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_wpa_enc);
		iliwi_wifi_thread_line_regex_wpa_enc = _tmp17_;
		_tmp18_ = g_regex_new ("^\\s+Extra:wpa_ie=dd160050f20101000050f20201000050f20201000050f201$", 0, 0, &_inner_error_);
		_tmp19_ = _tmp18_;
		if (_inner_error_ != NULL) {
			goto __catch9_g_error;
		}
		_g_regex_unref0 (iliwi_wifi_thread_line_regex_wpa_enc_auth);
		iliwi_wifi_thread_line_regex_wpa_enc_auth = _tmp19_;
	}
	goto __finally9;
	__catch9_g_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_debug ("wifi.vala:382: Regex error!");
		_g_error_free0 (e);
	}
	__finally9:
	if (_inner_error_ != NULL) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
	_tmp20_ = g_str_hash;
	_tmp21_ = g_str_equal;
	_tmp22_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, ILIWI_TYPE_NETWORK, (GBoxedCopyFunc) iliwi_network_ref, iliwi_network_unref, _tmp20_, _tmp21_, NULL);
	_g_object_unref0 (iliwi_wifi_thread_networks);
	iliwi_wifi_thread_networks = _tmp22_;
	_tmp23_ = gee_array_list_new (ILIWI_TYPE_NETWORK, (GBoxedCopyFunc) iliwi_network_ref, iliwi_network_unref, NULL);
	_g_object_unref0 (iliwi_wifi_thread_visible_networks);
	iliwi_wifi_thread_visible_networks = _tmp23_;
	iliwi_wifi_thread_status = ILIWI_NETWORK_STATUS_UNCONNECTED;
	iliwi_wifi_thread_disconnectt ();
	iliwi_wifi_thread_load_preferred_networks ();
	iliwi_wifi_thread_scan ();
}


static gchar* g_file_stream_read_line (FILE* self) {
	gchar* result = NULL;
	gint c = 0;
	GString* ret;
	GString* _tmp7_;
	g_return_val_if_fail (self != NULL, NULL);
	ret = NULL;
	while (TRUE) {
		gint _tmp0_ = 0;
		gint _tmp1_;
		GString* _tmp2_;
		gint _tmp4_;
		GString* _tmp5_;
		gint _tmp6_;
		_tmp0_ = fgetc (self);
		c = _tmp0_;
		_tmp1_ = c;
		if (!(_tmp1_ != EOF)) {
			break;
		}
		_tmp2_ = ret;
		if (_tmp2_ == NULL) {
			GString* _tmp3_;
			_tmp3_ = g_string_new ("");
			_g_string_free0 (ret);
			ret = _tmp3_;
		}
		_tmp4_ = c;
		if (_tmp4_ == ((gint) '\n')) {
			break;
		}
		_tmp5_ = ret;
		_tmp6_ = c;
		g_string_append_c ((GString*) _tmp5_, (gchar) _tmp6_);
	}
	_tmp7_ = ret;
	if (_tmp7_ == NULL) {
		result = NULL;
		_g_string_free0 (ret);
		return result;
	} else {
		GString* _tmp8_;
		const gchar* _tmp9_;
		gchar* _tmp10_;
		_tmp8_ = ret;
		_tmp9_ = ((GString*) _tmp8_)->str;
		_tmp10_ = g_strdup (_tmp9_);
		result = _tmp10_;
		_g_string_free0 (ret);
		return result;
	}
	_g_string_free0 (ret);
}


static void iliwi_wifi_thread_load_preferred_networks (void) {
	const gchar* _tmp0_ = NULL;
	gchar* _tmp1_;
	gchar* filename;
	const gchar* _tmp2_;
	FILE* _tmp3_ = NULL;
	FILE* in_stream;
	gchar* line = NULL;
	GHashFunc _tmp4_;
	GEqualFunc _tmp5_;
	GeeHashMap* _tmp6_;
	GError * _inner_error_ = NULL;
	_tmp0_ = g_get_user_config_dir ();
	_tmp1_ = g_strconcat (_tmp0_, "/iliwi/preferred_networks", NULL);
	filename = _tmp1_;
	_tmp2_ = filename;
	_tmp3_ = fopen (_tmp2_, "r");
	in_stream = _tmp3_;
	_tmp4_ = g_str_hash;
	_tmp5_ = g_str_equal;
	_tmp6_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, ILIWI_TYPE_PREFERRED_NETWORK, (GBoxedCopyFunc) iliwi_preferred_network_dup, iliwi_preferred_network_free, _tmp4_, _tmp5_, NULL);
	_g_object_unref0 (iliwi_wifi_thread_preferred_networks);
	iliwi_wifi_thread_preferred_networks = _tmp6_;
	{
		GRegex* _tmp7_;
		GRegex* regex_line;
		GMatchInfo* _result_ = NULL;
		_tmp7_ = g_regex_new ("^([0-9A-Z:]{17}) \\\"(.*)\\\"(h)? \\\"(.*)\\\" \\\"(.*)\\\" \\\"(.*)\\" \
"\"$", 0, 0, &_inner_error_);
		regex_line = _tmp7_;
		if (_inner_error_ != NULL) {
			goto __catch10_g_error;
		}
		while (TRUE) {
			FILE* _tmp8_;
			gchar* _tmp9_ = NULL;
			const gchar* _tmp10_;
			GRegex* _tmp11_;
			const gchar* _tmp12_;
			GMatchInfo* _tmp13_ = NULL;
			gboolean _tmp14_ = FALSE;
			_tmp8_ = in_stream;
			_tmp9_ = g_file_stream_read_line (_tmp8_);
			_g_free0 (line);
			line = _tmp9_;
			_tmp10_ = line;
			if (!(_tmp10_ != NULL)) {
				break;
			}
			_tmp11_ = regex_line;
			_tmp12_ = line;
			_tmp14_ = g_regex_match (_tmp11_, _tmp12_, 0, &_tmp13_);
			_g_match_info_free0 (_result_);
			_result_ = _tmp13_;
			if (_tmp14_) {
				GeeHashMap* _tmp15_;
				GMatchInfo* _tmp16_;
				gchar* _tmp17_ = NULL;
				gchar* _tmp18_;
				GMatchInfo* _tmp19_;
				gchar* _tmp20_ = NULL;
				GMatchInfo* _tmp21_;
				gchar* _tmp22_ = NULL;
				gchar* _tmp23_;
				GMatchInfo* _tmp24_;
				gchar* _tmp25_ = NULL;
				GMatchInfo* _tmp26_;
				gchar* _tmp27_ = NULL;
				GMatchInfo* _tmp28_;
				gchar* _tmp29_ = NULL;
				iliwiPreferredNetwork _tmp30_ = {0};
				iliwiPreferredNetwork _tmp31_;
				iliwiPreferredNetwork _tmp32_;
				_tmp15_ = iliwi_wifi_thread_preferred_networks;
				_tmp16_ = _result_;
				_tmp17_ = g_match_info_fetch (_tmp16_, 1);
				_tmp18_ = _tmp17_;
				_tmp19_ = _result_;
				_tmp20_ = g_match_info_fetch (_tmp19_, 2);
				_tmp21_ = _result_;
				_tmp22_ = g_match_info_fetch (_tmp21_, 3);
				_tmp23_ = _tmp22_;
				_tmp24_ = _result_;
				_tmp25_ = g_match_info_fetch (_tmp24_, 4);
				_tmp26_ = _result_;
				_tmp27_ = g_match_info_fetch (_tmp26_, 5);
				_tmp28_ = _result_;
				_tmp29_ = g_match_info_fetch (_tmp28_, 6);
				memset (&_tmp30_, 0, sizeof (iliwiPreferredNetwork));
				_g_free0 (_tmp30_.password);
				_tmp30_.password = _tmp20_;
				_tmp30_.password_in_ascii = g_strcmp0 (_tmp23_, "h") != 0;
				_g_free0 (_tmp30_.username);
				_tmp30_.username = _tmp25_;
				_g_free0 (_tmp30_.cert);
				_tmp30_.cert = _tmp27_;
				_g_free0 (_tmp30_.cert_dir);
				_tmp30_.cert_dir = _tmp29_;
				_tmp31_ = _tmp30_;
				_tmp32_ = _tmp31_;
				gee_abstract_map_set ((GeeAbstractMap*) _tmp15_, _tmp18_, &_tmp32_);
				iliwi_preferred_network_destroy (&_tmp31_);
				_g_free0 (_tmp23_);
				_g_free0 (_tmp18_);
			}
		}
		_g_match_info_free0 (_result_);
		_g_regex_unref0 (regex_line);
	}
	goto __finally10;
	__catch10_g_error:
	{
		GError* e = NULL;
		const gchar* _tmp33_;
		e = _inner_error_;
		_inner_error_ = NULL;
		_tmp33_ = filename;
		g_debug ("wifi.vala:417: Couldn't parse the file %s", _tmp33_);
		_g_error_free0 (e);
	}
	__finally10:
	if (_inner_error_ != NULL) {
		_g_free0 (line);
		_fclose0 (in_stream);
		_g_free0 (filename);
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
	_g_free0 (line);
	_fclose0 (in_stream);
	_g_free0 (filename);
}


static void iliwi_wifi_thread_save_preferred_networks (void) {
	const gchar* _tmp0_ = NULL;
	gchar* _tmp1_;
	gchar* _tmp2_;
	const gchar* _tmp3_ = NULL;
	gchar* _tmp4_;
	gchar* filename;
	const gchar* _tmp5_;
	FILE* _tmp6_ = NULL;
	FILE* stream;
	_tmp0_ = g_get_user_config_dir ();
	_tmp1_ = g_strconcat (_tmp0_, "/iliwi", NULL);
	_tmp2_ = _tmp1_;
	g_mkdir_with_parents (_tmp2_, 0755);
	_g_free0 (_tmp2_);
	_tmp3_ = g_get_user_config_dir ();
	_tmp4_ = g_strconcat (_tmp3_, "/iliwi/preferred_networks", NULL);
	filename = _tmp4_;
	_tmp5_ = filename;
	_tmp6_ = fopen (_tmp5_, "w");
	stream = _tmp6_;
	{
		GeeHashMap* _tmp7_;
		GeeSet* _tmp8_;
		GeeSet* _tmp9_;
		GeeSet* _tmp10_;
		GeeIterator* _tmp11_ = NULL;
		GeeIterator* _tmp12_;
		GeeIterator* _address_it;
		_tmp7_ = iliwi_wifi_thread_preferred_networks;
		_tmp8_ = gee_abstract_map_get_keys ((GeeMap*) _tmp7_);
		_tmp9_ = _tmp8_;
		_tmp10_ = _tmp9_;
		_tmp11_ = gee_iterable_iterator ((GeeIterable*) _tmp10_);
		_tmp12_ = _tmp11_;
		_g_object_unref0 (_tmp10_);
		_address_it = _tmp12_;
		while (TRUE) {
			GeeIterator* _tmp13_;
			gboolean _tmp14_ = FALSE;
			GeeIterator* _tmp15_;
			gpointer _tmp16_ = NULL;
			gchar* address;
			GeeHashMap* _tmp17_;
			const gchar* _tmp18_;
			gpointer _tmp19_ = NULL;
			iliwiPreferredNetwork* _tmp20_;
			iliwiPreferredNetwork _tmp21_ = {0};
			iliwiPreferredNetwork _tmp22_;
			iliwiPreferredNetwork network;
			const gchar* _tmp23_ = NULL;
			iliwiPreferredNetwork _tmp24_;
			gboolean _tmp25_;
			const gchar* _tmp26_;
			gchar* _tmp27_;
			gchar* password_type;
			FILE* _tmp28_;
			const gchar* _tmp29_;
			iliwiPreferredNetwork _tmp30_;
			const gchar* _tmp31_;
			const gchar* _tmp32_;
			iliwiPreferredNetwork _tmp33_;
			const gchar* _tmp34_;
			iliwiPreferredNetwork _tmp35_;
			const gchar* _tmp36_;
			iliwiPreferredNetwork _tmp37_;
			const gchar* _tmp38_;
			gchar* _tmp39_ = NULL;
			gchar* _tmp40_;
			_tmp13_ = _address_it;
			_tmp14_ = gee_iterator_next (_tmp13_);
			if (!_tmp14_) {
				break;
			}
			_tmp15_ = _address_it;
			_tmp16_ = gee_iterator_get (_tmp15_);
			address = (gchar*) _tmp16_;
			_tmp17_ = iliwi_wifi_thread_preferred_networks;
			_tmp18_ = address;
			_tmp19_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp17_, _tmp18_);
			_tmp20_ = (iliwiPreferredNetwork*) _tmp19_;
			iliwi_preferred_network_copy (_tmp20_, &_tmp21_);
			_tmp22_ = _tmp21_;
			_iliwi_preferred_network_free0 (_tmp20_);
			network = _tmp22_;
			_tmp24_ = network;
			_tmp25_ = _tmp24_.password_in_ascii;
			if (_tmp25_) {
				_tmp23_ = "";
			} else {
				_tmp23_ = "h";
			}
			_tmp26_ = _tmp23_;
			_tmp27_ = g_strdup (_tmp26_);
			password_type = _tmp27_;
			_tmp28_ = stream;
			_tmp29_ = address;
			_tmp30_ = network;
			_tmp31_ = _tmp30_.password;
			_tmp32_ = password_type;
			_tmp33_ = network;
			_tmp34_ = _tmp33_.username;
			_tmp35_ = network;
			_tmp36_ = _tmp35_.cert;
			_tmp37_ = network;
			_tmp38_ = _tmp37_.cert_dir;
			_tmp39_ = g_strdup_printf ("%s \"%s\"%s \"%s\" \"%s\" \"%s\"\n", _tmp29_, _tmp31_, _tmp32_, _tmp34_, _tmp36_, _tmp38_);
			_tmp40_ = _tmp39_;
			fputs (_tmp40_, _tmp28_);
			_g_free0 (_tmp40_);
			_g_free0 (password_type);
			iliwi_preferred_network_destroy (&network);
			_g_free0 (address);
		}
		_g_object_unref0 (_address_it);
	}
	_fclose0 (stream);
	_g_free0 (filename);
}


static void iliwi_wifi_thread_scan (void) {
	iliwiWifi* _tmp0_;
	gchar* _tmp1_;
	gchar* _result_;
	iliwiWifi* _tmp8_;
	GError * _inner_error_ = NULL;
	_tmp0_ = iliwi_wifi;
	iliwi_wifi_set_new_status (_tmp0_, "scanning..");
	iliwi_wifi_thread_seconds_since_last_scan = 0;
	_tmp1_ = g_strdup ("");
	_result_ = _tmp1_;
	{
		gchar* _tmp2_ = NULL;
		gchar* _tmp3_;
		gchar** _tmp4_ = NULL;
		gchar** _tmp5_;
		gint _tmp5__length1;
		gchar* _tmp6_ = NULL;
		const gchar* _tmp7_;
		_tmp2_ = g_find_program_in_path ("iwlist");
		_tmp3_ = g_strdup ("scan");
		_tmp4_ = g_new0 (gchar*, 2 + 1);
		_tmp4_[0] = _tmp2_;
		_tmp4_[1] = _tmp3_;
		_tmp5_ = _tmp4_;
		_tmp5__length1 = 2;
		g_spawn_sync (NULL, _tmp5_, NULL, G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, &_tmp6_, NULL, NULL, &_inner_error_);
		_g_free0 (_result_);
		_result_ = _tmp6_;
		_tmp5_ = (_vala_array_free (_tmp5_, _tmp5__length1, (GDestroyNotify) g_free), NULL);
		if (_inner_error_ != NULL) {
			if (_inner_error_->domain == G_SPAWN_ERROR) {
				goto __catch11_g_spawn_error;
			}
			_g_free0 (_result_);
			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
		_tmp7_ = _result_;
		iliwi_wifi_thread_parse_iwlist_networks (_tmp7_);
	}
	goto __finally11;
	__catch11_g_spawn_error:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_debug ("wifi.vala:439: Couldn't start spawn!");
		_g_error_free0 (e);
	}
	__finally11:
	if (_inner_error_ != NULL) {
		_g_free0 (_result_);
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
	_tmp8_ = iliwi_wifi;
	iliwi_wifi_set_new_status (_tmp8_, "idle");
	iliwi_wifi_thread_seconds_since_last_scan = 0;
	_g_free0 (_result_);
}


static gpointer _g_object_ref0 (gpointer self) {
	return self ? g_object_ref (self) : NULL;
}


static void iliwi_wifi_thread_parse_iwlist_networks (const gchar* iwlist_result) {
	const gchar* _tmp0_;
	gchar** _tmp1_;
	gchar** _tmp2_ = NULL;
	gchar** lines;
	gint lines_length1;
	gint _lines_size_;
	GMatchInfo* _result_ = NULL;
	iliwiNetwork* current_network;
	iliwiWifi* _tmp99_;
	GError * _inner_error_ = NULL;
	g_return_if_fail (iwlist_result != NULL);
	_tmp0_ = iwlist_result;
	_tmp2_ = _tmp1_ = g_strsplit (_tmp0_, "\n", 0);
	lines = _tmp2_;
	lines_length1 = _vala_array_length (_tmp1_);
	_lines_size_ = lines_length1;
	current_network = NULL;
	{
		GeeArrayList* _tmp3_;
		_tmp3_ = iliwi_wifi_thread_visible_networks;
		g_static_rec_mutex_lock (&__lock_iliwi_wifi_thread_visible_networks);
		{
			GeeArrayList* _tmp16_;
			gchar** _tmp17_;
			gint _tmp17__length1;
			gboolean _tmp92_ = FALSE;
			iliwiNetwork* _tmp93_;
			gboolean _tmp96_;
			{
				GeeArrayList* _tmp4_;
				GeeArrayList* _tmp5_;
				GeeArrayList* _n_list;
				GeeArrayList* _tmp6_;
				gint _tmp7_;
				gint _tmp8_;
				gint _n_size;
				gint _n_index;
				_tmp4_ = iliwi_wifi_thread_visible_networks;
				_tmp5_ = _g_object_ref0 (_tmp4_);
				_n_list = _tmp5_;
				_tmp6_ = _n_list;
				_tmp7_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp6_);
				_tmp8_ = _tmp7_;
				_n_size = _tmp8_;
				_n_index = -1;
				while (TRUE) {
					gint _tmp9_;
					gint _tmp10_;
					gint _tmp11_;
					GeeArrayList* _tmp12_;
					gint _tmp13_;
					gpointer _tmp14_ = NULL;
					iliwiNetwork* n;
					iliwiNetwork* _tmp15_;
					_tmp9_ = _n_index;
					_n_index = _tmp9_ + 1;
					_tmp10_ = _n_index;
					_tmp11_ = _n_size;
					if (!(_tmp10_ < _tmp11_)) {
						break;
					}
					_tmp12_ = _n_list;
					_tmp13_ = _n_index;
					_tmp14_ = gee_abstract_list_get ((GeeAbstractList*) _tmp12_, _tmp13_);
					n = (iliwiNetwork*) _tmp14_;
					_tmp15_ = n;
					iliwi_network_set_strength (_tmp15_, 0, FALSE);
					_iliwi_network_unref0 (n);
				}
				_g_object_unref0 (_n_list);
			}
			_tmp16_ = iliwi_wifi_thread_visible_networks;
			gee_abstract_collection_clear ((GeeAbstractCollection*) _tmp16_);
			_tmp17_ = lines;
			_tmp17__length1 = lines_length1;
			{
				gchar** line_collection = NULL;
				gint line_collection_length1 = 0;
				gint _line_collection_size_ = 0;
				gint line_it = 0;
				line_collection = _tmp17_;
				line_collection_length1 = _tmp17__length1;
				for (line_it = 0; line_it < _tmp17__length1; line_it = line_it + 1) {
					gchar* _tmp18_;
					gchar* line = NULL;
					_tmp18_ = g_strdup (line_collection[line_it]);
					line = _tmp18_;
					{
						GRegex* _tmp19_;
						const gchar* _tmp20_;
						GMatchInfo* _tmp21_ = NULL;
						gboolean _tmp22_ = FALSE;
						_tmp19_ = iliwi_wifi_thread_line_regex_essid;
						_tmp20_ = line;
						_tmp22_ = g_regex_match (_tmp19_, _tmp20_, 0, &_tmp21_);
						_g_match_info_free0 (_result_);
						_result_ = _tmp21_;
						if (_tmp22_) {
							iliwiNetwork* _tmp23_;
							GMatchInfo* _tmp24_;
							gchar* _tmp25_ = NULL;
							_tmp23_ = current_network;
							_tmp24_ = _result_;
							_tmp25_ = g_match_info_fetch (_tmp24_, 1);
							_g_free0 (_tmp23_->essid);
							_tmp23_->essid = _tmp25_;
						} else {
							GRegex* _tmp26_;
							const gchar* _tmp27_;
							GMatchInfo* _tmp28_ = NULL;
							gboolean _tmp29_ = FALSE;
							_tmp26_ = iliwi_wifi_thread_line_regex_encryption;
							_tmp27_ = line;
							_tmp29_ = g_regex_match (_tmp26_, _tmp27_, 0, &_tmp28_);
							_g_match_info_free0 (_result_);
							_result_ = _tmp28_;
							if (_tmp29_) {
								iliwiNetwork* _tmp30_;
								_tmp30_ = current_network;
								_tmp30_->encryption = TRUE;
							} else {
								GRegex* _tmp31_;
								const gchar* _tmp32_;
								GMatchInfo* _tmp33_ = NULL;
								gboolean _tmp34_ = FALSE;
								_tmp31_ = iliwi_wifi_thread_line_regex_wpa_enc_auth;
								_tmp32_ = line;
								_tmp34_ = g_regex_match (_tmp31_, _tmp32_, 0, &_tmp33_);
								_g_match_info_free0 (_result_);
								_result_ = _tmp33_;
								if (_tmp34_) {
									iliwiNetwork* _tmp35_;
									iliwiNetwork* _tmp36_;
									_tmp35_ = current_network;
									_tmp35_->authentication = TRUE;
									_tmp36_ = current_network;
									iliwi_network_set_encyption_to_wpa (_tmp36_);
								} else {
									GRegex* _tmp37_;
									const gchar* _tmp38_;
									GMatchInfo* _tmp39_ = NULL;
									gboolean _tmp40_ = FALSE;
									_tmp37_ = iliwi_wifi_thread_line_regex_wpa_enc;
									_tmp38_ = line;
									_tmp40_ = g_regex_match (_tmp37_, _tmp38_, 0, &_tmp39_);
									_g_match_info_free0 (_result_);
									_result_ = _tmp39_;
									if (_tmp40_) {
										iliwiNetwork* _tmp41_;
										_tmp41_ = current_network;
										iliwi_network_set_encyption_to_wpa (_tmp41_);
									} else {
										GRegex* _tmp42_;
										const gchar* _tmp43_;
										GMatchInfo* _tmp44_ = NULL;
										gboolean _tmp45_ = FALSE;
										_tmp42_ = iliwi_wifi_thread_line_regex_adhoc;
										_tmp43_ = line;
										_tmp45_ = g_regex_match (_tmp42_, _tmp43_, 0, &_tmp44_);
										_g_match_info_free0 (_result_);
										_result_ = _tmp44_;
										if (_tmp45_) {
											iliwiNetwork* _tmp46_;
											_tmp46_ = current_network;
											_tmp46_->adhoc = TRUE;
										} else {
											GRegex* _tmp47_;
											const gchar* _tmp48_;
											GMatchInfo* _tmp49_ = NULL;
											gboolean _tmp50_ = FALSE;
											_tmp47_ = iliwi_wifi_thread_line_regex_strength;
											_tmp48_ = line;
											_tmp50_ = g_regex_match (_tmp47_, _tmp48_, 0, &_tmp49_);
											_g_match_info_free0 (_result_);
											_result_ = _tmp49_;
											if (_tmp50_) {
												iliwiNetwork* _tmp51_;
												GMatchInfo* _tmp52_;
												gchar* _tmp53_ = NULL;
												gchar* _tmp54_;
												gdouble _tmp55_ = 0.0;
												GMatchInfo* _tmp56_;
												gchar* _tmp57_ = NULL;
												gchar* _tmp58_;
												gdouble _tmp59_ = 0.0;
												_tmp51_ = current_network;
												_tmp52_ = _result_;
												_tmp53_ = g_match_info_fetch (_tmp52_, 1);
												_tmp54_ = _tmp53_;
												_tmp55_ = g_ascii_strtod (_tmp54_, NULL);
												_tmp56_ = _result_;
												_tmp57_ = g_match_info_fetch (_tmp56_, 2);
												_tmp58_ = _tmp57_;
												_tmp59_ = g_ascii_strtod (_tmp58_, NULL);
												iliwi_network_set_strength (_tmp51_, (gint) ((_tmp55_ / _tmp59_) * 100), TRUE);
												_g_free0 (_tmp58_);
												_g_free0 (_tmp54_);
											} else {
												GRegex* _tmp60_;
												const gchar* _tmp61_;
												GMatchInfo* _tmp62_ = NULL;
												gboolean _tmp63_ = FALSE;
												_tmp60_ = iliwi_wifi_thread_line_regex_start_address;
												_tmp61_ = line;
												_tmp63_ = g_regex_match (_tmp60_, _tmp61_, 0, &_tmp62_);
												_g_match_info_free0 (_result_);
												_result_ = _tmp62_;
												if (_tmp63_) {
													gboolean _tmp64_ = FALSE;
													iliwiNetwork* _tmp65_;
													gboolean _tmp68_;
													GeeHashMap* _tmp70_;
													GMatchInfo* _tmp71_;
													gchar* _tmp72_ = NULL;
													gchar* _tmp73_;
													gboolean _tmp74_ = FALSE;
													gboolean _tmp75_;
													iliwiNetwork* _tmp85_;
													_tmp65_ = current_network;
													if (_tmp65_ != NULL) {
														iliwiNetwork* _tmp66_;
														gboolean _tmp67_ = FALSE;
														_tmp66_ = current_network;
														_tmp67_ = iliwi_network_valid_network (_tmp66_);
														_tmp64_ = _tmp67_;
													} else {
														_tmp64_ = FALSE;
													}
													_tmp68_ = _tmp64_;
													if (_tmp68_) {
														iliwiNetwork* _tmp69_;
														_tmp69_ = current_network;
														iliwi_wifi_thread_found_network (_tmp69_);
													}
													_tmp70_ = iliwi_wifi_thread_networks;
													_tmp71_ = _result_;
													_tmp72_ = g_match_info_fetch (_tmp71_, 1);
													_tmp73_ = _tmp72_;
													_tmp74_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp70_, _tmp73_);
													_tmp75_ = _tmp74_;
													_g_free0 (_tmp73_);
													if (_tmp75_) {
														GeeHashMap* _tmp76_;
														GMatchInfo* _tmp77_;
														gchar* _tmp78_ = NULL;
														gchar* _tmp79_;
														gpointer _tmp80_ = NULL;
														_tmp76_ = iliwi_wifi_thread_networks;
														_tmp77_ = _result_;
														_tmp78_ = g_match_info_fetch (_tmp77_, 1);
														_tmp79_ = _tmp78_;
														_tmp80_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp76_, _tmp79_);
														_iliwi_network_unref0 (current_network);
														current_network = (iliwiNetwork*) _tmp80_;
														_g_free0 (_tmp79_);
													} else {
														iliwiNetwork* _tmp81_;
														iliwiNetwork* _tmp82_;
														GMatchInfo* _tmp83_;
														gchar* _tmp84_ = NULL;
														_tmp81_ = iliwi_network_new ();
														_iliwi_network_unref0 (current_network);
														current_network = _tmp81_;
														_tmp82_ = current_network;
														_tmp83_ = _result_;
														_tmp84_ = g_match_info_fetch (_tmp83_, 1);
														_g_free0 (_tmp82_->address);
														_tmp82_->address = _tmp84_;
													}
													_tmp85_ = current_network;
													_tmp85_->visible = TRUE;
												} else {
													GRegex* _tmp86_;
													const gchar* _tmp87_;
													GMatchInfo* _tmp88_ = NULL;
													gboolean _tmp89_ = FALSE;
													_tmp86_ = iliwi_wifi_thread_line_regex_interface;
													_tmp87_ = line;
													_tmp89_ = g_regex_match (_tmp86_, _tmp87_, 0, &_tmp88_);
													_g_match_info_free0 (_result_);
													_result_ = _tmp88_;
													if (_tmp89_) {
														GMatchInfo* _tmp90_;
														gchar* _tmp91_ = NULL;
														_tmp90_ = _result_;
														_tmp91_ = g_match_info_fetch (_tmp90_, 1);
														_g_free0 (iliwi_wifi_thread_wireless_interface);
														iliwi_wifi_thread_wireless_interface = _tmp91_;
													}
												}
											}
										}
									}
								}
							}
						}
						_g_free0 (line);
					}
				}
			}
			_tmp93_ = current_network;
			if (_tmp93_ != NULL) {
				iliwiNetwork* _tmp94_;
				gboolean _tmp95_ = FALSE;
				_tmp94_ = current_network;
				_tmp95_ = iliwi_network_valid_network (_tmp94_);
				_tmp92_ = _tmp95_;
			} else {
				_tmp92_ = FALSE;
			}
			_tmp96_ = _tmp92_;
			if (_tmp96_) {
				iliwiNetwork* _tmp97_;
				_tmp97_ = current_network;
				iliwi_wifi_thread_found_network (_tmp97_);
			}
		}
		__finally12:
		{
			GeeArrayList* _tmp98_;
			_tmp98_ = iliwi_wifi_thread_visible_networks;
			g_static_rec_mutex_unlock (&__lock_iliwi_wifi_thread_visible_networks);
		}
		if (_inner_error_ != NULL) {
			_iliwi_network_unref0 (current_network);
			_g_match_info_free0 (_result_);
			lines = (_vala_array_free (lines, lines_length1, (GDestroyNotify) g_free), NULL);
			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
	}
	_tmp99_ = iliwi_wifi;
	iliwi_wifi_visible_network_change (_tmp99_);
	_iliwi_network_unref0 (current_network);
	_g_match_info_free0 (_result_);
	lines = (_vala_array_free (lines, lines_length1, (GDestroyNotify) g_free), NULL);
}


static void iliwi_wifi_thread_found_network (iliwiNetwork* network) {
	iliwiNetwork* _tmp0_;
	gboolean _tmp1_;
	GeeArrayList* _tmp13_;
	iliwiNetwork* _tmp14_;
	g_return_if_fail (network != NULL);
	_tmp0_ = network;
	_tmp1_ = _tmp0_->unsaved;
	if (_tmp1_) {
		iliwiNetwork* _tmp2_;
		GeeHashMap* _tmp3_;
		iliwiNetwork* _tmp4_;
		const gchar* _tmp5_;
		gboolean _tmp6_ = FALSE;
		GeeHashMap* _tmp9_;
		iliwiNetwork* _tmp10_;
		const gchar* _tmp11_;
		iliwiNetwork* _tmp12_;
		_tmp2_ = network;
		_tmp2_->unsaved = FALSE;
		_tmp3_ = iliwi_wifi_thread_preferred_networks;
		_tmp4_ = network;
		_tmp5_ = _tmp4_->address;
		_tmp6_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp3_, _tmp5_);
		if (_tmp6_) {
			iliwiNetwork* _tmp7_;
			iliwiNetwork* _tmp8_;
			_tmp7_ = network;
			_tmp7_->preferred_network = TRUE;
			_tmp8_ = network;
			iliwi_wifi_thread_connect_to_suggestion (_tmp8_);
		}
		_tmp9_ = iliwi_wifi_thread_networks;
		_tmp10_ = network;
		_tmp11_ = _tmp10_->address;
		_tmp12_ = network;
		gee_abstract_map_set ((GeeAbstractMap*) _tmp9_, _tmp11_, _tmp12_);
	}
	_tmp13_ = iliwi_wifi_thread_visible_networks;
	_tmp14_ = network;
	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp13_, _tmp14_);
}


static void iliwi_wifi_thread_connect_to_suggestion (iliwiNetwork* network) {
	GeeHashMap* _tmp0_;
	iliwiNetwork* _tmp1_;
	const gchar* _tmp2_;
	gboolean _tmp3_ = FALSE;
	iliwiNetwork* _tmp43_;
	g_return_if_fail (network != NULL);
	_tmp0_ = iliwi_wifi_thread_preferred_networks;
	_tmp1_ = network;
	_tmp2_ = _tmp1_->address;
	_tmp3_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp0_, _tmp2_);
	if (_tmp3_) {
		iliwiNetwork* _tmp4_;
		GeeHashMap* _tmp5_;
		iliwiNetwork* _tmp6_;
		const gchar* _tmp7_;
		gpointer _tmp8_ = NULL;
		iliwiPreferredNetwork* _tmp9_;
		const gchar* _tmp10_;
		gchar* _tmp11_;
		iliwiNetwork* _tmp12_;
		GeeHashMap* _tmp13_;
		iliwiNetwork* _tmp14_;
		const gchar* _tmp15_;
		gpointer _tmp16_ = NULL;
		iliwiPreferredNetwork* _tmp17_;
		gboolean _tmp18_;
		iliwiNetwork* _tmp19_;
		GeeHashMap* _tmp20_;
		iliwiNetwork* _tmp21_;
		const gchar* _tmp22_;
		gpointer _tmp23_ = NULL;
		iliwiPreferredNetwork* _tmp24_;
		const gchar* _tmp25_;
		gchar* _tmp26_;
		iliwiNetwork* _tmp27_;
		GeeHashMap* _tmp28_;
		iliwiNetwork* _tmp29_;
		const gchar* _tmp30_;
		gpointer _tmp31_ = NULL;
		iliwiPreferredNetwork* _tmp32_;
		const gchar* _tmp33_;
		gchar* _tmp34_;
		iliwiNetwork* _tmp35_;
		GeeHashMap* _tmp36_;
		iliwiNetwork* _tmp37_;
		const gchar* _tmp38_;
		gpointer _tmp39_ = NULL;
		iliwiPreferredNetwork* _tmp40_;
		const gchar* _tmp41_;
		gchar* _tmp42_;
		_tmp4_ = network;
		_tmp5_ = iliwi_wifi_thread_preferred_networks;
		_tmp6_ = network;
		_tmp7_ = _tmp6_->address;
		_tmp8_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp5_, _tmp7_);
		_tmp9_ = (iliwiPreferredNetwork*) _tmp8_;
		_tmp10_ = (*_tmp9_).password;
		_tmp11_ = g_strdup (_tmp10_);
		_g_free0 (_tmp4_->password);
		_tmp4_->password = _tmp11_;
		_iliwi_preferred_network_free0 (_tmp9_);
		_tmp12_ = network;
		_tmp13_ = iliwi_wifi_thread_preferred_networks;
		_tmp14_ = network;
		_tmp15_ = _tmp14_->address;
		_tmp16_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp13_, _tmp15_);
		_tmp17_ = (iliwiPreferredNetwork*) _tmp16_;
		_tmp18_ = (*_tmp17_).password_in_ascii;
		_tmp12_->password_in_ascii = _tmp18_;
		_iliwi_preferred_network_free0 (_tmp17_);
		_tmp19_ = network;
		_tmp20_ = iliwi_wifi_thread_preferred_networks;
		_tmp21_ = network;
		_tmp22_ = _tmp21_->address;
		_tmp23_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp20_, _tmp22_);
		_tmp24_ = (iliwiPreferredNetwork*) _tmp23_;
		_tmp25_ = (*_tmp24_).username;
		_tmp26_ = g_strdup (_tmp25_);
		_g_free0 (_tmp19_->username);
		_tmp19_->username = _tmp26_;
		_iliwi_preferred_network_free0 (_tmp24_);
		_tmp27_ = network;
		_tmp28_ = iliwi_wifi_thread_preferred_networks;
		_tmp29_ = network;
		_tmp30_ = _tmp29_->address;
		_tmp31_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp28_, _tmp30_);
		_tmp32_ = (iliwiPreferredNetwork*) _tmp31_;
		_tmp33_ = (*_tmp32_).cert;
		_tmp34_ = g_strdup (_tmp33_);
		_g_free0 (_tmp27_->cert);
		_tmp27_->cert = _tmp34_;
		_iliwi_preferred_network_free0 (_tmp32_);
		_tmp35_ = network;
		_tmp36_ = iliwi_wifi_thread_preferred_networks;
		_tmp37_ = network;
		_tmp38_ = _tmp37_->address;
		_tmp39_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp36_, _tmp38_);
		_tmp40_ = (iliwiPreferredNetwork*) _tmp39_;
		_tmp41_ = (*_tmp40_).cert_dir;
		_tmp42_ = g_strdup (_tmp41_);
		_g_free0 (_tmp35_->cert_dir);
		_tmp35_->cert_dir = _tmp42_;
		_iliwi_preferred_network_free0 (_tmp40_);
	}
	_tmp43_ = iliwi_wifi_thread_connection_suggestion;
	if (_tmp43_ == NULL) {
		iliwiNetwork* _tmp44_;
		_tmp44_ = network;
		iliwi_wifi_thread_connection_suggestion = _tmp44_;
	} else {
		iliwiNetwork* _tmp45_;
		gint _tmp46_;
		iliwiNetwork* _tmp47_;
		gint _tmp48_;
		_tmp45_ = iliwi_wifi_thread_connection_suggestion;
		_tmp46_ = _tmp45_->strength;
		_tmp47_ = network;
		_tmp48_ = _tmp47_->strength;
		if (_tmp46_ < _tmp48_) {
			iliwiNetwork* _tmp49_;
			_tmp49_ = network;
			iliwi_wifi_thread_connection_suggestion = _tmp49_;
		}
	}
}


static iliwiNetwork* iliwi_wifi_thread_suggest_network (void) {
	iliwiNetwork* result = NULL;
	iliwiNetwork* suggestion;
	iliwiNetwork* _tmp21_;
	suggestion = NULL;
	{
		GeeHashMap* _tmp0_;
		GeeCollection* _tmp1_;
		GeeCollection* _tmp2_;
		GeeCollection* _tmp3_;
		GeeIterator* _tmp4_ = NULL;
		GeeIterator* _tmp5_;
		GeeIterator* _network_it;
		_tmp0_ = iliwi_wifi_thread_networks;
		_tmp1_ = gee_abstract_map_get_values ((GeeMap*) _tmp0_);
		_tmp2_ = _tmp1_;
		_tmp3_ = _tmp2_;
		_tmp4_ = gee_iterable_iterator ((GeeIterable*) _tmp3_);
		_tmp5_ = _tmp4_;
		_g_object_unref0 (_tmp3_);
		_network_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_ = FALSE;
			GeeIterator* _tmp8_;
			gpointer _tmp9_ = NULL;
			iliwiNetwork* network;
			GeeHashMap* _tmp10_;
			iliwiNetwork* _tmp11_;
			const gchar* _tmp12_;
			gboolean _tmp13_ = FALSE;
			_tmp6_ = _network_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _network_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			network = (iliwiNetwork*) _tmp9_;
			_tmp10_ = iliwi_wifi_thread_preferred_networks;
			_tmp11_ = network;
			_tmp12_ = _tmp11_->address;
			_tmp13_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp10_, _tmp12_);
			if (_tmp13_) {
				iliwiNetwork* _tmp14_;
				_tmp14_ = suggestion;
				if (_tmp14_ == NULL) {
					iliwiNetwork* _tmp15_;
					_tmp15_ = network;
					suggestion = _tmp15_;
				} else {
					iliwiNetwork* _tmp16_;
					gint _tmp17_;
					iliwiNetwork* _tmp18_;
					gint _tmp19_;
					_tmp16_ = network;
					_tmp17_ = _tmp16_->strength;
					_tmp18_ = suggestion;
					_tmp19_ = _tmp18_->strength;
					if (_tmp17_ > _tmp19_) {
						iliwiNetwork* _tmp20_;
						_tmp20_ = network;
						suggestion = _tmp20_;
					}
				}
			}
			_iliwi_network_unref0 (network);
		}
		_g_object_unref0 (_network_it);
	}
	_tmp21_ = suggestion;
	result = _tmp21_;
	return result;
}


iliwiWifiThread* iliwi_wifi_thread_construct (GType object_type) {
	iliwiWifiThread * self = NULL;
	self = (iliwiWifiThread*) g_object_new (object_type, NULL);
	return self;
}


iliwiWifiThread* iliwi_wifi_thread_new (void) {
	return iliwi_wifi_thread_construct (ILIWI_TYPE_WIFI_THREAD);
}


static void iliwi_wifi_thread_class_init (iliwiWifiThreadClass * klass) {
	iliwi_wifi_thread_parent_class = g_type_class_peek_parent (klass);
	G_OBJECT_CLASS (klass)->finalize = iliwi_wifi_thread_finalize;
	g_static_rec_mutex_init (&__lock_iliwi_wifi_thread_visible_networks);
}


static void iliwi_wifi_thread_instance_init (iliwiWifiThread * self) {
}


static void iliwi_wifi_thread_finalize (GObject* obj) {
	iliwiWifiThread * self;
	self = ILIWI_WIFI_THREAD (obj);
	G_OBJECT_CLASS (iliwi_wifi_thread_parent_class)->finalize (obj);
}


GType iliwi_wifi_thread_get_type (void) {
	static volatile gsize iliwi_wifi_thread_type_id__volatile = 0;
	if (g_once_init_enter (&iliwi_wifi_thread_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (iliwiWifiThreadClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) iliwi_wifi_thread_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (iliwiWifiThread), 0, (GInstanceInitFunc) iliwi_wifi_thread_instance_init, NULL };
		GType iliwi_wifi_thread_type_id;
		iliwi_wifi_thread_type_id = g_type_register_static (G_TYPE_OBJECT, "iliwiWifiThread", &g_define_type_info, 0);
		g_once_init_leave (&iliwi_wifi_thread_type_id__volatile, iliwi_wifi_thread_type_id);
	}
	return iliwi_wifi_thread_type_id__volatile;
}


static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	if ((array != NULL) && (destroy_func != NULL)) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}


static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}


static gint _vala_array_length (gpointer array) {
	int length;
	length = 0;
	if (array) {
		while (((gpointer*) array)[length]) {
			length++;
		}
	}
	return length;
}