#define NETCONFIG_ETHERNET_PATH "/net/netconfig/ethernet"
#define NETCONFIG_ETHERNET_INTERFACE "net.netconfig.ethernet"
+#define CONTAINER_FILE "/run/systemd/container"
+#define DBUS_HOST_SYSTEM_BUS_ADDRESS "unix:path=/run/host/dbus/system_bus_socket"
+
#define DBUS_PATH_MAX_BUFLEN 512
#define DBUS_STATE_MAX_BUFLEN 64
#endif
void netconfig_network_notify_ethernet_cable_state(const char *key);
+int netconfig_dbus_get_vconf_value(const char *key,
+ const char *type, int *ret, int *int_value, char **str_value);
const char *netconfig_get_default_profile(void);
const char *netconfig_get_default_ifname(void);
void netconfig_update_default(void);
void netconfig_update_default_profile(void);
+void netconfig_update_initial_container_vconf(void);
const char *netconfig_get_ifname(const char *profile);
void state_object_create_and_init(void);
extern "C" {
#endif
+void register_gdbus_signal_container(void);
+void deregister_gdbus_signal_container(void);
void register_gdbus_signal(void);
void deregister_gdbus_signal(void);
#define MAC_ADDRESS_MAX_LEN 18
#define MAX_SIZE_ERROR_BUFFER 256
+#define VCONF_ETH_MAC_ADDRESS "db/dnet/mac_address"
#define ETHERNET_FEATURE "http://tizen.org/feature/network.ethernet"
#define TETHERING_FEATURE "http://tizen.org/feature/network.tethering"
int netconfig_send_restriction_to_net_popup(const char *title,
const char *type, const char *restriction);
void netconfig_set_system_event(int sys_evt, int evt_key, int evt_val);
-void netconfig_set_vconf_int(const char * key, int value, gboolean log);
-void netconfig_set_vconf_str(const char * key, const char * value, gboolean log);
-int netconfig_vconf_get_int(const char * key, int *value);
-int netconfig_vconf_get_bool(const char * key, int *value);
+void netconfig_set_vconf_int(const char *key, int value, gboolean log);
+void netconfig_set_vconf_str(const char *key, const char *value, gboolean log);
+int netconfig_vconf_get_int(const char *key, int *value);
+int netconfig_vconf_get_bool(const char *key, int *value);
+
+char *netconfig_vconf_get_str_dbus(const char *key);
+int netconfig_vconf_get_int_dbus(const char *key, int *value);
+int netconfig_vconf_get_bool_dbus(const char *key, int *value);
+
char* netconfig_get_env(const char *key);
void netconfig_set_mac_address_to_vconf(const char *def_mac);
void netconfig_set_mac_address_from_file(void);
#include "wifi.h"
+#define VCONF_WIFI_OFF_STATE_BY_AIRPLANE "file/private/wifi/wifi_off_by_airplane"
+#define VCONF_WIFI_OFF_STATE_BY_RESTRICTED "file/private/wifi/wifi_off_by_restricted"
+#define VCONF_WIFI_OFF_STATE_BY_EMERGENCY "file/private/wifi/wifi_off_by_emergency"
+
void wifi_power_initialize(void);
void wifi_power_deinitialize(void);
return -1;
}
- gconn_data.connection = conn;
+ if (access(CONTAINER_FILE, F_OK) == 0) {
+ gconn_data.connection = g_dbus_connection_new_for_address_sync(
+ DBUS_HOST_SYSTEM_BUS_ADDRESS,
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
+ NULL, NULL, NULL);
+ } else
+ gconn_data.connection = conn;
+
if (gconn_data.connection == NULL) {
ERR("Failed to connect to the D-BUS daemon");
return -1;
/*Poll the ethernet Cable Plug-in /Plug-out status at every 1000 ms*/
#define ETH_POLLING_TIME 1000
-#define CONTAINER_FILE "/run/systemd/container"
/* Callback to Poll the Ethernet Status*/
gboolean __net_ethernet_cable_status_polling_callback(gpointer data)
return TRUE;
}
+void _got_name_cb_container(void)
+{
+ register_gdbus_signal_container();
+ netconfig_update_initial_container_vconf();
+}
+
void _got_name_cb(void)
{
wifi_object_create_and_init();
}
if (access(CONTAINER_FILE, F_OK) == 0) {
- ret = setup_gdbus(NULL);
+ ret = setup_gdbus(_got_name_cb_container);
if (ret != 0) {
ERR("_netconfig_setup_gdbus is failed\n");
return 0;
}
+
g_main_loop_run(main_loop);
+
cleanup_gdbus();
log_cleanup();
+ deregister_gdbus_signal_container();
+
return 0;
}
gboolean is_internet;
};
+struct netconfig_vconf_key_t {
+ const char *key;
+ enum vconf_t type;
+};
+
+static struct netconfig_vconf_key_t network_vconf_keys[] = {
+ {VCONFKEY_NETWORK_IP, VCONF_TYPE_STRING},
+ {VCONFKEY_NETWORK_PROXY, VCONF_TYPE_STRING},
+ {VCONFKEY_NETWORK_IP6, VCONF_TYPE_STRING},
+ {VCONF_ETH_MAC_ADDRESS, VCONF_TYPE_STRING},
+ {VCONFKEY_WIFI_CONNECTED_AP_NAME, VCONF_TYPE_STRING},
+ {VCONFKEY_WIFI_BSSID_ADDRESS, VCONF_TYPE_STRING},
+ {VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_STATUS, VCONF_TYPE_INT},
+ {VCONFKEY_DNET_STATE, VCONF_TYPE_INT},
+ {VCONF_WIFI_OFF_STATE_BY_EMERGENCY, VCONF_TYPE_INT},
+ {VCONF_WIFI_OFF_STATE_BY_AIRPLANE, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_WIFI_OFF_BY_AIRPLANE, VCONF_TYPE_INT},
+ {VCONFKEY_WIFI_TRANSFER_STATE, VCONF_TYPE_INT},
+ {VCONF_WIFI_OFF_STATE_BY_RESTRICTED, VCONF_TYPE_INT},
+ {VCONFKEY_WIFI_STRENGTH, VCONF_TYPE_INT},
+ {VCONFKEY_WIFI_STATE, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_WIFI_STATE, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_CELLULAR_PKT_LAST_RCV, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_CELLULAR_PKT_LAST_SNT, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_RCV, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_CELLULAR_PKT_TOTAL_SNT, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_WIFI_PKT_TOTAL_RCV, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_WIFI_PKT_LAST_RCV, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_WIFI_PKT_TOTAL_SNT, VCONF_TYPE_INT},
+ {VCONFKEY_NETWORK_WIFI_PKT_LAST_SNT, VCONF_TYPE_INT},
+ {NULL, }
+};
+
static struct netconfig_default_connection
netconfig_default_connection_info = { NULL, };
return g_strdup(mac_str);
}
+int netconfig_dbus_get_vconf_value(const char *key,
+ const char *type, int *ret, int *int_value, char **str_value)
+{
+ GVariant *result = NULL;
+ GVariant *params = NULL;
+
+ params = g_variant_new("(ss)", key, type);
+
+ result = netconfig_invoke_dbus_method(NETCONFIG_SERVICE,
+ NETCONFIG_NETWORK_PATH, NETCONFIG_NETWORK_INTERFACE,
+ "RequestVconfValue", params);
+
+ if (result == NULL) {
+ ERR("netconfig_invoke_dbus_method failed");
+ return FALSE;
+ }
+
+ g_variant_get(result, "(iis)", ret, int_value, str_value);
+
+ INFO("Vconf key: %s, type: %s, ret: %d, int_value: %d, str_value: %s",
+ key, type, *ret, *int_value, *str_value);
+
+ g_variant_unref(result);
+
+ return TRUE;
+}
+
const char *netconfig_get_default_profile(void)
{
return netconfig_default_connection_info.profile;
}
}
+void netconfig_update_initial_container_vconf(void)
+{
+ char *str_value = NULL;
+ int int_value = 0;
+ int idx = 0;
+
+ while (network_vconf_keys[idx].key) {
+ switch (network_vconf_keys[idx].type) {
+ case VCONF_TYPE_STRING:
+ str_value = netconfig_vconf_get_str_dbus(network_vconf_keys[idx].key);
+ if (str_value)
+ vconf_set_str(network_vconf_keys[idx].key, str_value);
+ g_free(str_value);
+ break;
+ case VCONF_TYPE_INT:
+ if (netconfig_vconf_get_int_dbus(network_vconf_keys[idx].key, &int_value) == VCONF_OK)
+ vconf_set_int(network_vconf_keys[idx].key, int_value);
+ break;
+ default:
+ break;
+ }
+
+ idx++;
+ }
+}
+
const char *netconfig_get_ifname(const char *profile)
{
const char *ifname = NULL;
#define CONNMAN_SIGNAL_DEVICE_CHANGED "DeviceChanged"
#define CONNMAN_SIGNAL_DEVICE_DETECTED "DeviceDetected"
#define SIGNAL_NAME_OWNER_CHANGED "NameOwnerChanged"
+#define NETCONFIG_SIGNAL_VCONF_CHANGED "VconfChanged"
+
#define MAX_SIG_LEN 64
#define TOTAL_CONN_SIGNALS 7
#if defined TIZEN_DEBUG_ENABLE
static int dumpservice_subscription_id = 0;
#endif
+static int netconfig_subscription_id = 0;
typedef void (*supplicant_signal_cb)(GDBusConnection *conn,
const gchar *name, const gchar *path, const gchar *interface,
if (value != NULL) {
netconfig_set_default_ipaddress(value);
- vconf_set_str(VCONFKEY_NETWORK_IP, value);
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, value, TRUE);
g_variant_builder_add(builder, "{sv}", "IPv4Address",
g_variant_new_string(value));
} else if (old_ip != NULL && strlen(old_ip) > 0) {
- vconf_set_str(VCONFKEY_NETWORK_IP, "");
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, "",TRUE);
g_variant_builder_add(builder, "{sv}", "IPv4Address",
g_variant_new_string(""));
}
if (value != NULL) {
netconfig_set_default_ipaddress6(value);
- vconf_set_str(VCONFKEY_NETWORK_IP6, value);
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_IP6, value, TRUE);
g_variant_builder_add(builder, "{sv}", "IPv6Address",
g_variant_new_string(value));
} else if (old_ip6 != NULL && strlen(old_ip6) > 0) {
- vconf_set_str(VCONFKEY_NETWORK_IP6, "");
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_IP6, "", TRUE);
g_variant_builder_add(builder, "{sv}", "IPv6Address",
g_variant_new_string(""));
}
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
netconfig_set_default_proxy(value);
- vconf_set_str(VCONFKEY_NETWORK_PROXY, value);
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_PROXY, value, TRUE);
g_variant_builder_add(builder, "{sv}", "ProxyAddress",
g_variant_new_string(value));
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
netconfig_set_default_proxy("");
- vconf_set_str(VCONFKEY_NETWORK_PROXY, "");
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_PROXY, "", TRUE);
g_variant_builder_add(builder, "{sv}", "ProxyAddress",
g_variant_new_string(""));
return;
}
+static void _dbus_vconf_changed_cb(GDBusConnection *conn,
+ const gchar *Name, const gchar *path, const gchar *interface,
+ const gchar *sig, GVariant *param, gpointer user_data)
+{
+ gchar *key = NULL;
+ gchar *type = NULL;
+ gchar *str_val = NULL;
+ int int_val = 0;
+
+ if (param == NULL)
+ return;
+
+ g_variant_get(param, "(sssi)", &key, &type, &str_val, &int_val);
+
+ if (!key || key[0] == '\0')
+ goto done;
+
+ DBG("VconfChanged key: %s, type: %s, str_val: %s, int_val: %d",
+ key, type, str_val, int_val);
+
+ if (g_strcmp0(type, "string") == 0 && str_val)
+ vconf_set_str(key, str_val);
+ else if (g_strcmp0(type, "int") == 0)
+ vconf_set_int(key, int_val);
+ else if (g_strcmp0(type, "bool") == 0)
+ vconf_set_bool(key, int_val);
+
+done:
+ g_free(key);
+ g_free(type);
+ g_free(str_val);
+}
+
static void _scan_changed_cb(GDBusConnection *conn,
const gchar *name, const gchar *path, const gchar *interface,
const gchar *sig, GVariant *param, gpointer user_data)
_supplicant_dpp_conf_obj,
};
+void register_gdbus_signal_container(void)
+{
+ GDBusConnection *connection = NULL;
+ connection = netdbus_get_connection();
+
+ if (connection == NULL) {
+ ERR("Failed to get GDbus Connection");
+ return;
+ }
+
+ netconfig_subscription_id = g_dbus_connection_signal_subscribe(
+ connection,
+ NETCONFIG_SERVICE,
+ NETCONFIG_NETWORK_INTERFACE,
+ NETCONFIG_SIGNAL_VCONF_CHANGED,
+ NETCONFIG_NETWORK_PATH,
+ NULL,
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ _dbus_vconf_changed_cb,
+ NULL,
+ NULL);
+
+ INFO("Successfully register host net-config DBus signal filter");
+}
+
void register_gdbus_signal(void)
{
GDBusConnection *connection = NULL;
netconfig_update_default();
}
+void deregister_gdbus_signal_container(void)
+{
+ GDBusConnection *connection = NULL;
+
+ connection = netdbus_get_connection();
+ if (!connection) {
+ ERR("Already de-registered. Nothing to be done");
+ return;
+ }
+
+ if (netconfig_subscription_id)
+ g_dbus_connection_signal_unsubscribe(connection,
+ netconfig_subscription_id);
+}
+
void deregister_gdbus_signal(void)
{
GDBusConnection *connection = NULL;
g_strlcpy(ip,
inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr), 30);
- vconf_set_str(VCONFKEY_NETWORK_IP, ip);
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, ip, TRUE);
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
g_variant_builder_add(builder, "{sv}", "IPv4Address",
DBG("Get system proxy: %s", proxy);
if (proxy != NULL) {
- vconf_set_str(VCONFKEY_NETWORK_PROXY, proxy);
+ netconfig_set_vconf_str(VCONFKEY_NETWORK_PROXY, proxy, TRUE);
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
g_variant_builder_add(builder, "{sv}", "ProxyAddress",
GVariantBuilder *builder;
GVariant *params;
- vconf_set_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 1);
- vconf_set_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_ETHERNET);
- vconf_set_int(VCONFKEY_DNET_STATE, VCONFKEY_DNET_NORMAL_CONNECTED);
+ netconfig_set_vconf_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 1, TRUE);
+ netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_ETHERNET, TRUE);
+ netconfig_set_vconf_int(VCONFKEY_DNET_STATE, VCONFKEY_DNET_NORMAL_CONNECTED, TRUE);
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
#include "util.h"
#include "neterror.h"
#include "wifi-state.h"
+#include "network-state.h"
#include "netdbus.h"
#define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
online_monitor_plugin->notify_online_state(ifname, online_state);
}
-void netconfig_set_vconf_int(const char * key, int value, gboolean log)
+void netconfig_set_vconf_int(const char *key, int value, gboolean log)
{
int ret = 0;
+ GVariant *params = NULL;
if (log)
DBG("[%s: %d]", key, value);
ret = vconf_set_int(key, value);
if (ret != VCONF_OK)
ERR("Failed to set");
+
+ params = g_variant_new("(sssi)", key, "int", "", value);
+ if (netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+ NETCONFIG_NETWORK_INTERFACE, "VconfChanged",
+ params) == FALSE)
+ ERR("Failed to emit VconfChanged signal");
}
-void netconfig_set_vconf_str(const char * key, const char * value, gboolean log)
+void netconfig_set_vconf_str(const char *key, const char *value, gboolean log)
{
int ret = 0;
+ GVariant *params = NULL;
if (log)
DBG("[%s: %s]", key, value);
ret = vconf_set_str(key, value);
if (ret != VCONF_OK)
ERR("Failed to set");
+
+ params = g_variant_new("(sssi)", key, "string", value, 0);
+ if (netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+ NETCONFIG_NETWORK_INTERFACE, "VconfChanged",
+ params) == FALSE)
+ ERR("Failed to emit VconfChanged signal");
}
-int netconfig_vconf_get_int(const char * key, int *value)
+int netconfig_vconf_get_int(const char *key, int *value)
{
int ret = 0;
return 0;
}
-int netconfig_vconf_get_bool(const char * key, int *value)
+int netconfig_vconf_get_bool(const char *key, int *value)
{
int ret = 0;
return 0;
}
+char *netconfig_vconf_get_str_dbus(const char *key)
+{
+ int ret = 0;
+ int int_value = 0;
+ char *str_value = NULL;
+
+ if (!netconfig_dbus_get_vconf_value(key, "string", &ret, &int_value, &str_value))
+ return NULL;
+
+ return str_value;
+}
+
+int netconfig_vconf_get_int_dbus(const char *key, int *value)
+{
+ int ret = 0;
+ int int_value = 0;
+ char *str_value = NULL;
+
+ if (!netconfig_dbus_get_vconf_value(key, "int", &ret, &int_value, &str_value))
+ return VCONF_ERROR;
+
+ *value = int_value;
+
+ if (str_value)
+ g_free(str_value);
+
+ return ret;
+}
+
+int netconfig_vconf_get_bool_dbus(const char *key, int *value)
+{
+ int ret = 0;
+ int int_value = 0;
+ char *str_value = NULL;
+
+ if (!netconfig_dbus_get_vconf_value(key, "bool", &ret, &int_value, &str_value))
+ return VCONF_ERROR;
+
+ *value = int_value;
+
+ if (str_value)
+ g_free(str_value);
+
+ return ret;
+}
+
char* netconfig_get_env(const char *key)
{
FILE *fp;
#define WLAN_SUPPLICANT_SCRIPT "/usr/bin/wpa_supp.sh"
#define P2P_SUPPLICANT_SCRIPT "/usr/bin/p2p_supp.sh"
-#define VCONF_WIFI_OFF_STATE_BY_AIRPLANE "file/private/wifi/wifi_off_by_airplane"
-#define VCONF_WIFI_OFF_STATE_BY_RESTRICTED "file/private/wifi/wifi_off_by_restricted"
-#define VCONF_WIFI_OFF_STATE_BY_EMERGENCY "file/private/wifi/wifi_off_by_emergency"
#if !defined TIZEN_WEARABLE
#define VCONFKEY_SETAPPL_NETWORK_PERMIT_WITH_LCD_OFF_LIMIT "db/setting/network_with_lcd_off_limit"
#endif
#define WLAN_MAC_ADDR_MAX 20
#define ETH_MAC_ADDR_SIZE 6
-#define VCONF_ETH_MAC_ADDRESS "db/dnet/mac_address"
#define NET_EXEC_PATH "/sbin/ifconfig"
#define OS_RANDOM_FILE "/dev/urandom"