gboolean connman_manager_connect_service (ConnmanManager *manager, ConnmanService *service, const gchar *secret) { GVariantBuilder *builder; GError *error = NULL; GVariant *variant; const gchar *ssid = connman_service_get_name(service); g_message("Connecting to service '%s'", connman_service_get_name(service)); if (!connman_service_type_wifi(service)) { g_critical("Service is not a Wifi service"); return FALSE; } builder = g_variant_builder_new(G_VARIANT_TYPE_ARRAY); g_variant_builder_add(builder, "{sv}", "Type", g_variant_new_string("wifi")); g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new_string("managed")); g_variant_builder_add(builder, "{sv}", "SSID", g_variant_new_string(ssid)); if (secret) { g_variant_builder_add(builder, "{sv}", "Security", g_variant_new_string("rsn")); g_variant_builder_add(builder, "{sv}", "Passphrase", g_variant_new_string(secret)); } else { g_variant_builder_add(builder, "{sv}", "Security", g_variant_new_string("none")); } variant = g_variant_builder_end(builder); connman_proxy_manager_call_connect_service(manager->proxy, variant, NULL, service_connect_callback, manager); g_variant_unref(variant); if (error) { g_error("%s", error->message); g_error_free(error); return FALSE; } return TRUE; }
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")); }