Exemplo n.º 1
0
static void
dispose (GObject *object)
{
	NMDeviceWimax *self = NM_DEVICE_WIMAX (object);
	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);

	if (priv->disposed)
		goto done;

	priv->disposed = TRUE;

	clear_activation_timeout (self);
	clear_link_timeout (self);
	clear_connected_poll (self);

	if (priv->sdk_action_defer_id)
		g_source_remove (priv->sdk_action_defer_id);

	if (priv->sdk) {
		iwmx_sdk_set_callbacks (priv->sdk, NULL, NULL, NULL, NULL, NULL, NULL);
		wmxsdk_unref (priv->sdk);
	}

	g_free (priv->bsid);

	set_current_nsp (self, NULL);

	g_slist_free_full (priv->nsp_list, g_object_unref);

	iwmx_sdk_new_callback_unregister (wmx_new_sdk_cb, self);
	nm_wimax_util_sdk_unref ();

done:
	G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
}
Exemplo n.º 2
0
static gboolean
removed_handler(gpointer user_data)
{
	struct wmxsdk *wmxsdk = user_data;

	if (wmxsdk->removed_cb)
		wmxsdk->removed_cb(wmxsdk, wmxsdk->callback_data);
	wmxsdk_unref(wmxsdk);
	return FALSE;
}
Exemplo n.º 3
0
static void iwmx_sdk_dev_add(unsigned idx, unsigned api_idx, const char *name)
{
	struct wmxsdk *wmxsdk;
	const char *s;

	if (idx >= IWMX_SDK_DEV_MAX) {
		nm_log_err(LOGD_WIMAX, "BUG! idx (%u) >= IWMX_SDK_DEV_MAX (%u)", idx, IWMX_SDK_DEV_MAX);
		return;
	}
	if (g_iwmx_sdk_devs[idx] != NULL) {
		nm_log_err(LOGD_WIMAX, "BUG! device index %u already enumerated?", idx);
		return;
	}

	wmxsdk = wmxsdk_new();
	if (wmxsdk == NULL) {
		nm_log_err(LOGD_WIMAX, "Can't allocate %zu bytes", sizeof(*wmxsdk));
		return;
	}

	/*
	 * This depends on a hack in the WiMAX Network Service; it has
	 * to return, as part of the device name, a string "if:IFNAME"
	 * where the OS's device name is stored.
	 */
	s = strstr(name, "if:");
	if (s == NULL
	    || sscanf(s, "if:%15[^ \f\n\r\t\v]", wmxsdk->ifname) != 1) {
		nm_log_err(LOGD_WIMAX, "Cannot extract network interface name off '%s'",
			      name);
		goto error;
	}
	nm_log_dbg(LOGD_WIMAX, "network interface name: '%s'", wmxsdk->ifname);

	strncpy(wmxsdk->name, name, sizeof(wmxsdk->name));
	wmxsdk->device_id.privilege = WIMAX_API_PRIVILEGE_READ_WRITE;
	wmxsdk->device_id.deviceIndex = api_idx;

	if (iwmx_sdk_setup(wmxsdk) != 0) {
		nm_log_err(LOGD_WIMAX, "wxmsdk: %s: cannot set up interface", wmxsdk->ifname);
		goto error;
	}

	g_iwmx_sdk_devs[idx] = wmxsdk;

	/* Notify listeners of new devices */
	iwmx_sdk_call_new_callbacks (wmxsdk);
	return;

error:
	wmxsdk_unref(wmxsdk);
	return;
}
Exemplo n.º 4
0
static gboolean
connect_result_handler(gpointer user_data)
{
	ConnectResultInfo *info = user_data;

	if (info->wmxsdk->connect_result_cb) {
		info->wmxsdk->connect_result_cb(info->wmxsdk,
		                                info->result,
		                                info->wmxsdk->callback_data);
	}
	wmxsdk_unref(info->wmxsdk);
	memset(info, 0, sizeof(*info));
	free(info);
	return FALSE;
}
Exemplo n.º 5
0
static gboolean
media_status_change_handler(gpointer user_data)
{
	MediaStatusInfo *info = user_data;

	if (info->wmxsdk->media_status_cb) {
		info->wmxsdk->media_status_cb(info->wmxsdk,
		                              info->media_status,
		                              info->wmxsdk->callback_data);
	}
	wmxsdk_unref(info->wmxsdk);
	memset(info, 0, sizeof(*info));
	free(info);
	return FALSE;
}
Exemplo n.º 6
0
static void iwmx_sdk_dev_rm(unsigned idx)
{
	struct wmxsdk *wmxsdk;

	if (idx >= IWMX_SDK_DEV_MAX) {
		nm_log_err(LOGD_WIMAX, "BUG! idx (%u) >= IWMX_SDK_DEV_MAX (%u)", idx, IWMX_SDK_DEV_MAX);
		return;
	}

	wmxsdk = g_iwmx_sdk_devs[idx];
	_schedule_removed(wmxsdk);
	iwmx_sdk_remove(wmxsdk);
	wmxsdk_unref(wmxsdk);
	g_iwmx_sdk_devs[idx] = NULL;
}
Exemplo n.º 7
0
static gboolean
scan_result_handler(gpointer user_data)
{
	ScanResultInfo *info = user_data;

	if (info->wmxsdk->scan_result_cb) {
		info->wmxsdk->scan_result_cb(info->wmxsdk,
		                             info->nsps,
		                             info->num_nsps,
		                             info->wmxsdk->callback_data);
	}
	wmxsdk_unref(info->wmxsdk);
	free(info->nsps);
	memset(info, 0, sizeof(*info));
	free(info);
	return FALSE;
}
Exemplo n.º 8
0
static gboolean
state_change_handler(gpointer user_data)
{
	StateChangeInfo *info = user_data;

	if (info->wmxsdk->state_change_cb) {
		info->wmxsdk->state_change_cb(info->wmxsdk,
		                              info->new_status,
		                              info->old_status,
		                              info->reason,
		                              info->wmxsdk->callback_data);
	}
	wmxsdk_unref(info->wmxsdk);
	memset(info, 0, sizeof(*info));
	free(info);
	return FALSE;
}
static void
wmx_removed_cb (struct wmxsdk *wmxsdk, void *user_data)
{
	NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data);
	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);

	if (priv->sdk) {
		/* Clear callbacks just in case we don't hold the last reference */
		iwmx_sdk_set_callbacks (priv->sdk, NULL, NULL, NULL, NULL, NULL, NULL);

		wmxsdk_unref (priv->sdk);
		priv->sdk = NULL;

		priv->status = WIMAX_API_DEVICE_STATUS_UnInitialized;
		nm_device_state_changed (NM_DEVICE (self),
								 NM_DEVICE_STATE_UNAVAILABLE,
								 NM_DEVICE_STATE_REASON_NONE);
	}
}
Exemplo n.º 10
0
static void
wmx_removed_cb (struct wmxsdk *wmxsdk, void *user_data)
{
	NMDeviceWimax *self = NM_DEVICE_WIMAX (user_data);
	NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);

	if (!priv->sdk) {
		nm_log_dbg (LOGD_WIMAX, "(%s): removed unhandled WiMAX interface", wmxsdk->ifname);
		return;
	}

	nm_log_dbg (LOGD_WIMAX, "(%s): removed WiMAX interface", wmxsdk->ifname);

	/* Clear callbacks just in case we don't hold the last reference */
	iwmx_sdk_set_callbacks (priv->sdk, NULL, NULL, NULL, NULL, NULL, NULL);
	wmxsdk_unref (priv->sdk);
	priv->sdk = NULL;

	priv->status = WIMAX_API_DEVICE_STATUS_UnInitialized;
	nm_device_state_changed (NM_DEVICE (self),
							 NM_DEVICE_STATE_UNAVAILABLE,
							 NM_DEVICE_STATE_REASON_NONE);
}