static void update_header(void)
{
	GdkPixbuf *image = NULL;
	const char *type, *info;
	GtkWidget *widget;
	gboolean favorite;

	type = connman_service_get_type(path);
	if (g_strcmp0(type, "wifi") == 0) {
		uint8_t strength;

		strength = connman_service_get_strength(path);

		cui_theme_get_signal_icone_and_info(strength, &image, &info);
	} else
		cui_theme_get_type_icone_and_info(type, &image, &info);

	set_image(builder, "service_type", image, info);
	set_label(builder, "service_name",
			connman_service_get_name(path), "- Hidden -");

	if (connman_service_is_connected(path) == TRUE)
		cui_theme_get_state_icone_and_info(
				connman_service_get_state(path), &image, &info);
	else
		image = NULL;

	set_image(builder, "service_state", image, info);
	set_label(builder, "service_error",
				connman_service_get_error(path), "");

	favorite = connman_service_is_favorite(path);

	set_button_toggle(builder, "service_autoconnect",
				connman_service_is_autoconnect(path));
	widget = set_widget_sensitive(builder,
				"service_autoconnect", favorite);
	if (favorite == TRUE) {
		g_signal_connect(widget, "toggled",
				G_CALLBACK(autoconnect_button_toggled), NULL);
	}

	set_button_toggle(builder, "service_favorite", favorite);
	widget = set_widget_sensitive(builder, "service_favorite", favorite);

	if (favorite == TRUE) {
		g_signal_connect(widget, "toggled",
				G_CALLBACK(favorite_button_toggled), NULL);
	}
}
static void update_connection_status(connman_service_t *connected_service, jvalue_ref *status)
{
	if(NULL == connected_service || NULL == status)
		return;

	int connman_state = 0;
	connman_state = connman_service_get_state(connected_service->state);
	if(connman_state == CONNMAN_SERVICE_STATE_ONLINE
		|| connman_state == CONNMAN_SERVICE_STATE_READY)
	{
		connman_service_get_ipinfo(connected_service);

		jobject_put(*status, J_CSTR_TO_JVAL("state"), jstring_create("connected"));
		if(NULL != connected_service->ipinfo.iface)
			jobject_put(*status, J_CSTR_TO_JVAL("interfaceName"), jstring_create(connected_service->ipinfo.iface));
		if(NULL != connected_service->ipinfo.ipv4.address)
			jobject_put(*status, J_CSTR_TO_JVAL("ipAddress"), jstring_create(connected_service->ipinfo.ipv4.address));
		if(NULL != connected_service->ipinfo.ipv4.netmask)
			jobject_put(*status, J_CSTR_TO_JVAL("netmask"), jstring_create(connected_service->ipinfo.ipv4.netmask));
		if(NULL != connected_service->ipinfo.ipv4.gateway)
			jobject_put(*status, J_CSTR_TO_JVAL("gateway"), jstring_create(connected_service->ipinfo.ipv4.gateway));
		
		gsize i;
		char dns_str[16];
		for (i = 0; i < g_strv_length(connected_service->ipinfo.dns); i++)
		{
			sprintf(dns_str,"dns%d",i+1);
			jobject_put(*status, jstring_create(dns_str), jstring_create(connected_service->ipinfo.dns[i]));
		}

		if(NULL != connected_service->ipinfo.ipv4.method)
			jobject_put(*status, J_CSTR_TO_JVAL("method"), jstring_create(connected_service->ipinfo.ipv4.method));
			
		if(connman_service_type_wifi(connected_service))
		{
			if(NULL != connected_service->name)
				jobject_put(*status, J_CSTR_TO_JVAL("ssid"), jstring_create(connected_service->name));
			jobject_put(*status, J_CSTR_TO_JVAL("isWakeOnWifiEnabled"), jboolean_create(false));
		}
		const char *s = (connman_state == CONNMAN_SERVICE_STATE_ONLINE)?"yes":"no";
		jobject_put(*status, J_CSTR_TO_JVAL("onInternet"), jstring_create(s));
	}
	else
		jobject_put(*status, J_CSTR_TO_JVAL("state"), jstring_create("disconnected"));

}
示例#3
0
static void service_set_state(GtkService *service)
{
	GtkServicePrivate *priv = service->priv;
	const struct connman_ipv4 *ipv4;
	enum connman_state state;
	GdkPixbuf *image = NULL;
	const char *ip = NULL;
	const char *info;

	if (connman_service_is_connected(service->path) == FALSE) {
		gtk_widget_set_tooltip_text((GtkWidget *)priv->name, "");
		return;
	}

	ipv4 = connman_service_get_ipv4(service->path);
	if (ipv4 == NULL) {
		const struct connman_ipv6 *ipv6;

		ipv6 = connman_service_get_ipv6(service->path);
		if (ipv6 != NULL)
			ip = ipv6->address;
	} else
		ip = ipv4->address;

	if (ip == NULL)
		ip = "";

	gtk_widget_set_tooltip_text((GtkWidget *)priv->name, ip);

	state = connman_service_get_state(service->path);
	cui_theme_get_state_icone_and_info(state, &image, &info);

	if (image == NULL)
		return;

	gtk_widget_set_visible((GtkWidget *)priv->state, TRUE);
	gtk_widget_set_tooltip_text((GtkWidget *)priv->state, info);
	gtk_image_set_from_pixbuf(priv->state, image);
}
示例#4
0
文件: session.c 项目: igaw/connman
static void update_session_state(struct connman_session *session)
{
	enum connman_service_state service_state;
	enum connman_session_state state = CONNMAN_SESSION_STATE_DISCONNECTED;

	if (session->service) {
		service_state = connman_service_get_state(session->service);
		state = service_to_session_state(service_state);
		session->info->state = state;
	}
	session->info->state = state;

	DBG("session %p state %s", session, state2string(state));

	update_firewall(session);
	del_nat_rules(session);
	update_routing_table(session);
	add_nat_rules(session);

	if (policy && policy->update_session_state)
		policy->update_session_state(session, state);

	session_notify(session);
}
示例#5
0
文件: session.c 项目: igaw/connman
static void session_activate(struct connman_session *session)
{
	GHashTableIter iter;
	gpointer key, value;

	if (!service_hash)
		return;

	if (policy && policy->get_service_for_session) {
		struct connman_service *service;
		struct connman_service_info *info;
		GSList *service_list = NULL;
		enum connman_service_state state = CONNMAN_SESSION_STATE_DISCONNECTED;

		g_hash_table_iter_init(&iter, service_hash);

		while (g_hash_table_iter_next(&iter, &key, &value)) {
			struct connman_service_info *info = value;
			state = connman_service_get_state(info->service);

			if (is_session_connected(session, state))
				service_list = g_slist_prepend(service_list,
							       info->service);
		}

		service_list = g_slist_reverse(service_list);
		service = policy->get_service_for_session(session, service_list);

		if (service) {
			info = g_hash_table_lookup(service_hash, service);
			DBG("session %p add service %p", session, info->service);

			info->sessions = g_slist_prepend(info->sessions,
							session);
			session->service = info->service;
			update_session_state(session);
		}

		g_slist_free(service_list);
		return;
	}

	g_hash_table_iter_init(&iter, service_hash);
	while (g_hash_table_iter_next(&iter, &key, &value)) {
		struct connman_service_info *info = value;
		enum connman_service_state state;

		state = connman_service_get_state(info->service);

		if (is_session_connected(session, state) &&
				session_match_service(session, info->service)) {
			DBG("session %p add service %p", session, info->service);

			info->sessions = g_slist_prepend(info->sessions,
							session);
			session->service = info->service;
			update_session_state(session);

			return;
		}
	}

	session_notify(session);
}