*
*/
-#include <app.h>
#include <stdio.h>
#include <vconf.h>
#include <stdlib.h>
#include "wifi-eap-config.h"
#include "network-state.h"
#include "network-accessibility.h"
+#include "wifi-key-encryption.h"
#define NETCONFIG_AGENT_FIELD_NAME "Name"
#define NETCONFIG_AGENT_FIELD_SSID "SSID"
#define NETCONFIG_AGENT_FIELD_WPS "WPS"
#define NETCONFIG_AGENT_FIELD_WPS_PBC "WPS_PBC"
#define NETCONFIG_AGENT_FIELD_WPS_PIN "WPS_PIN"
+#if defined TIZEN_CAPTIVE_PORTAL
+#define NETCONFIG_AGENT_FIELD_USERNAME "Username"
+#define NETCONFIG_AGENT_FIELD_PASSWORD "Password"
+#endif
#define NETCONFIG_AGENT_ERR_CONNECT_FAILED "connect-failed"
char *identity;
char *passphrase;
char *wps_pin;
+#if defined TIZEN_CAPTIVE_PORTAL
+ char *username;
+ char *password;
+#endif
gboolean wps_pbc;
};
static void __netconfig_agent_clear_fields(void)
{
- g_byte_array_free(agent.ssid, TRUE);
+ if (agent.ssid)
+ g_byte_array_free(agent.ssid, TRUE);
g_free(agent.name);
g_free(agent.identity);
g_free(agent.passphrase);
g_free(agent.wps_pin);
+#if defined TIZEN_CAPTIVE_PORTAL
+ g_free(agent.username);
+ g_free(agent.password);
+#endif
agent.ssid = NULL;
agent.name = NULL;
agent.identity = NULL;
agent.passphrase = NULL;
agent.wps_pin = NULL;
+#if defined TIZEN_CAPTIVE_PORTAL
+ agent.username = NULL;
+ agent.password = NULL;
+#endif
agent.wps_pbc = FALSE;
}
{
GVariant *reply = NULL;
GVariant *params = NULL;
- GError *error;
- GDBusConnection *connection = NULL;
-
- connection = netdbus_get_connection();
- if (connection == NULL) {
- ERR("GDBusconnection is NULL");
- return -1;
- }
-
- do {
- error = NULL;
- params = g_variant_new("(o)", NETCONFIG_WIFI_PATH);
-
- reply = g_dbus_connection_call_sync(
- connection,
- CONNMAN_SERVICE,
- CONNMAN_MANAGER_PATH,
- CONNMAN_MANAGER_INTERFACE,
- "RegisterAgent",
- params,
- NULL,
- G_DBUS_CALL_FLAGS_NONE,
- DBUS_REPLY_TIMEOUT,
- netdbus_get_cancellable(),
- &error);
-
- if (reply == NULL) {
- if (error != NULL) {
- if (g_strcmp0(error->message,
- "GDBus.Error:net.connman.Error.AlreadyExists: Already exists") == 0) {
- break;
- } else {
- ERR("Fail to register agent [%d: %s]",
- error->code, error->message);
- }
- g_error_free(error);
- } else
- ERR("Fail to register agent");
- } else
- g_variant_unref(reply);
+ params = g_variant_new("(o)", NETCONFIG_WIFI_PATH);
+ reply = netconfig_invoke_dbus_method(CONNMAN_SERVICE,
+ CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE,
+ "RegisterAgent", params);
- sleep(1);
- } while (TRUE);
+ if (reply == NULL) {
+ ERR("Fail to register agent");
+ return FALSE;
+ } else
+ g_variant_unref(reply);
INFO("Registered to connman agent successfully");
- return 0;
+ return TRUE;
}
int connman_unregister_agent(void)
name_len = strlen(name);
agent.ssid = g_byte_array_sized_new(name_len);
agent.ssid->len = name_len;
- memcpy(agent.ssid->data, name, name_len);
+ memcpy(agent.ssid->data, name, name_len + 1);
if (identity)
agent.identity = g_strdup(identity);
if (passphrase)
agent.passphrase = g_strdup(passphrase);
+ gchar *enc_data = NULL;
+ enc_data = _netconfig_encrypt_passphrase(agent.passphrase);
+
+ if (!enc_data) {
+ ERR("Failed to encrypt the passphrase");
+ } else {
+ g_free(agent.passphrase);
+ agent.passphrase = enc_data;
+ }
+
DBG("Successfully configured for EAP network");
return TRUE;
gboolean updated = FALSE;
gboolean reply = FALSE;
- g_return_val_if_fail(connman_agent != NULL, FALSE);
+ g_return_val_if_fail(connman_agent != NULL, TRUE);
DBG("Set agent fields for %s", service);
g_dbus_method_invocation_return_gerror(context, error);
g_clear_error(&error);
- return reply;
+ return TRUE;
}
__netconfig_agent_clear_fields();
updated = TRUE;
DBG("Field [%s] - []", field);
+
+ if (agent.passphrase == NULL)
+ continue;
+
+ if (netconfig_check_passphrase(service, agent.passphrase) == FALSE) {
+ ERR("Invalid passphrase");
+
+ g_free(agent.passphrase);
+ agent.passphrase = NULL;
+
+ updated = FALSE;
+ continue;
+ }
+
+ gchar *enc_data = NULL;
+ enc_data = _netconfig_encrypt_passphrase(agent.passphrase);
+
+ if (!enc_data) {
+ ERR("Failed to encrypt the passphrase");
+ continue;
+ }
+
+ g_free(agent.passphrase);
+ agent.passphrase = enc_data;
}
} else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_WPS_PBC) == 0) {
if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING) &&
agent.wps_pin = g_strdup(g_variant_get_string(value, NULL));
updated = TRUE;
- DBG("Field [%s] - []", field);
+ DBG("Field [%s] - [%s]", field, agent.wps_pin);
}
} else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_NAME) == 0) {
if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) {
agent.name = g_strdup(g_variant_get_string(value, NULL));
updated = TRUE;
- DBG("Field [%s] - []", field);
+ DBG("Field [%s] - [%s]", field, agent.name);
}
} else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_SSID) == 0) {
if (agent.ssid != NULL) {
agent.identity = g_strdup(g_variant_get_string(value, NULL));
updated = TRUE;
- DBG("Field [%s] - []", field);
+ DBG("Field [%s] - [%s]", field, agent.identity);
+ }
+#if defined TIZEN_CAPTIVE_PORTAL
+ } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_USERNAME) == 0) {
+ if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) {
+ agent.username = g_strdup(g_variant_get_string(value, NULL));
+ updated = TRUE;
+
+ DBG("Field [%s] - [%s]", field, agent.username);
}
+ } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_PASSWORD) == 0) {
+ if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) {
+ agent.password = g_strdup(g_variant_get_string(value, NULL));
+ updated = TRUE;
+
+ DBG("Field [%s] - [%s]", field, agent.password);
+ }
+#endif
}
}
+ g_variant_iter_free(iter);
+
if (updated == TRUE) {
reply = netconfig_invoke_dbus_method_nonblock(CONNMAN_SERVICE,
service, CONNMAN_SERVICE_INTERFACE, "Connect",
NULL, __netconfig_wifi_connect_reply);
- if (reply == TRUE) {
- g_dbus_method_invocation_return_value(context, NULL);
- } else {
+ if (reply != TRUE) {
+ ERR("Fail to connect Wi-Fi");
+ __netconfig_agent_clear_fields();
error = g_error_new(G_DBUS_ERROR,
G_DBUS_ERROR_AUTH_FAILED,
CONNMAN_ERROR_INTERFACE ".InvalidArguments");
g_dbus_method_invocation_return_gerror(context, error);
g_clear_error(&error);
+ return TRUE;
}
} else {
+ ERR("Fail to connect Wi-Fi");
+ __netconfig_agent_clear_fields();
+
error = g_error_new(G_DBUS_ERROR,
G_DBUS_ERROR_AUTH_FAILED,
CONNMAN_ERROR_INTERFACE ".InvalidArguments");
g_dbus_method_invocation_return_gerror(context, error);
g_clear_error(&error);
+ return TRUE;
}
- if (reply != TRUE) {
- ERR("Fail to connect Wi-Fi");
-
- __netconfig_agent_clear_fields();
- }
- g_variant_iter_free(iter);
-
net_connman_agent_complete_set_field(connman_agent, context);
- return reply;
+ return TRUE;
}
gboolean handle_request_input(NetConnmanAgent *connman_agent,
gboolean updated = FALSE;
GVariantBuilder *builder = NULL;
- g_return_val_if_fail(connman_agent != NULL, FALSE);
+ g_return_val_if_fail(connman_agent != NULL, TRUE);
if (NULL == service)
- return FALSE;
+ return TRUE;
DBG("Agent fields requested for service: %s", service);
g_variant_new_string(agent.passphrase));
updated = TRUE;
- DBG("Setting [%s] - []", field);
+ DBG("Setting [%s] - [%s]", field, agent.passphrase);
} else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_WPS) == 0 &&
(agent.wps_pbc == TRUE || agent.wps_pin != NULL)) {
if (agent.wps_pbc == TRUE) {
g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_WPS, g_variant_new_string(agent.wps_pin));
updated = TRUE;
- DBG("Setting string [%s] - []", field);
+ DBG("Setting string [%s] - [%s]", field, agent.wps_pin);
}
} else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_NAME) == 0 &&
agent.name != NULL) {
g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_NAME, g_variant_new_string(agent.name));
updated = TRUE;
- DBG("Settings [%s] - []", field);
+ DBG("Settings [%s] - [%s]", field, agent.name);
} else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_SSID) == 0 &&
agent.ssid != NULL) {
int i = 0;
g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_IDENTITY, g_variant_new_string(agent.identity));
updated = TRUE;
- DBG("Settings [%s] - []", field);
+ DBG("Settings [%s] - [%s]", field, agent.identity);
+#if defined TIZEN_CAPTIVE_PORTAL
+ } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_USERNAME) == 0 &&
+ agent.username != NULL) {
+ g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_USERNAME, g_variant_new_string(agent.username));
+
+ updated = TRUE;
+ DBG("Settings [%s] - [%s]", field, agent.username);
+ } else if (g_strcmp0(field, NETCONFIG_AGENT_FIELD_PASSWORD) == 0 &&
+ agent.password != NULL) {
+ g_variant_builder_add(builder, "{sv}", NETCONFIG_AGENT_FIELD_PASSWORD, g_variant_new_string(agent.password));
+
+ updated = TRUE;
+ DBG("Settings [%s] - [%s]", field, agent.password);
+#endif
}
}
if (NULL == out_table) {
net_connman_agent_complete_request_input(connman_agent, context, out_table);
- return FALSE;
+ return TRUE;
}
if (updated == TRUE)
}
__netconfig_agent_clear_fields();
- g_variant_unref(out_table);
- return updated;
+ return TRUE;
}
gboolean handle_report_error(NetConnmanAgent *connman_agent,
GDBusMethodInvocation *context, const gchar *service, const gchar *error)
{
- gboolean ret = TRUE;
-
- g_return_val_if_fail(connman_agent != NULL, FALSE);
+ g_return_val_if_fail(connman_agent != NULL, TRUE);
net_connman_agent_complete_report_error(connman_agent, context);
DBG("Agent error for service[%s] - [%s]", service, error);
/* Do something when it failed to make a connection */
- return ret;
+ return TRUE;
}
#if defined TIZEN_CAPTIVE_PORTAL
#if defined TIZEN_WEARABLE
static gboolean is_portal_msg_shown = FALSE;
-static guint portal_msg_timer = 0;
#endif
struct poll_timer_data {
return FALSE;
}
-#if defined TIZEN_WEARABLE
-static gboolean __netconfig_display_portal_msg(gpointer data)
-{
- DBG("");
- wc_launch_popup(WC_POPUP_TYPE_CAPTIVE_PORTAL);
-
- netconfig_stop_timer(&portal_msg_timer);
-
- return FALSE;
-}
-#endif
-
static void __netconfig_wifi_portal_login_timer_start(struct poll_timer_data
*data)
{
GDBusMethodInvocation *context, const gchar *service, const gchar *url)
{
#if defined TIZEN_CAPTIVE_PORTAL
- gboolean ret = FALSE;
gboolean ignore_portal = FALSE;
const char * ssid = NULL;
- g_return_val_if_fail(connman_agent != NULL, FALSE);
+ g_return_val_if_fail(connman_agent != NULL, TRUE);
DBG("service[%s] - url[%s]", service, url);
if (ssid == NULL) {
ERR("Connected AP name is NULL!!");
net_connman_agent_complete_request_browser(connman_agent, context);
- return FALSE;
+ return TRUE;
}
ignore_portal = __check_ignore_portal_list(ssid);
is_monitor_notifier_registered = TRUE;
}
-#if defined TIZEN_WEARABLE
- if (is_portal_msg_shown) {
- net_connman_agent_complete_request_browser(connman_agent, context);
- return TRUE;
- }
-
- is_portal_msg_shown = TRUE;
- netconfig_start_timer_seconds(4, __netconfig_display_portal_msg, NULL, &portal_msg_timer);
-#else
- ret = netconfig_send_notification_to_net_popup(NETCONFIG_ADD_PORTAL_NOTI, ssid);
-#endif
+ netconfig_send_notification_to_net_popup(NETCONFIG_ADD_PORTAL_NOTI, ssid);
timer_data.time_elapsed = 0;
__netconfig_wifi_portal_login_timer_start(&timer_data);
net_connman_agent_complete_request_browser(connman_agent, context);
- return ret;
+ return TRUE;
#else
GError *error = NULL;
error = g_error_new(G_DBUS_ERROR,
g_dbus_method_invocation_return_gerror(context, error);
g_clear_error(&error);
- return FALSE;
+ return TRUE;
#endif
}