Revert "Added support to delete ipv6 route using netlink."
[platform/core/connectivity/net-config.git] / src / utils / emulator.c
old mode 100644 (file)
new mode 100755 (executable)
index f0b07da..29f1ab9
@@ -1,7 +1,7 @@
 /*
  * Network Configuration Module
  *
- * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  *
  */
 
+#include <vconf.h>
+#include <net/if.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <arpa/inet.h>
-#include <net/if.h>
-#include <sys/utsname.h>
-#include <vconf.h>
 #include <vconf-keys.h>
+#include <system_info.h>
 
 #include "log.h"
 #include "emulator.h"
+#include "util.h"
+#include "netdbus.h"
 
 static gboolean netconfig_is_emulated = FALSE;
 
 static gboolean __netconfig_emulator_test_emulation_env(void)
 {
-       struct utsname buf;
-       const char *EMUL_UTSNAME_MACHINE_SUFFIX = "emulated";
+       int ret;
+       char *model = NULL;
 
        DBG("Test emulation environment");
 
-       uname(&buf);
+       ret = system_info_get_platform_string("tizen.org/system/model_name", &model);
+       if (ret != SYSTEM_INFO_ERROR_NONE) {
+               ERR("Failed to get system information(%d)", ret);
+               return FALSE;
+       }
 
-       if (g_str_has_suffix(buf.machine, EMUL_UTSNAME_MACHINE_SUFFIX) == TRUE)
+       if (model && strncmp(model, "Emulator", strlen("Emulator")) == 0) {
+               free(model);
                return TRUE;
+       }
+
+       if (model)
+               free(model);
 
        return FALSE;
 }
 
 static void __netconfig_emulator_set_ip(void)
 {
-       const int BUF_LEN_MAX = 255;
        const char EMUL_IFNAME[] = "eth0";
-       char ip[BUF_LEN_MAX];
+       char ip[30] = { 0, };
        int sockfd = 0;
        struct ifreq ifr;
+       GVariantBuilder *builder;
+       GVariant *params;
 
-       if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
+       sockfd = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
+       if (sockfd < 0) {
                ERR("Failed to open socket");
                return;
        }
 
        memset(&ifr, 0, sizeof(struct ifreq));
-       g_strlcpy((char*)&ifr.ifr_name, EMUL_IFNAME, sizeof(EMUL_IFNAME));
+       g_strlcpy((char *)ifr.ifr_name, EMUL_IFNAME, 16);
 
        if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0) {
-               ERR("Error getting IP address");
+               ERR("Failed to get IP address");
 
                close(sockfd);
                return;
        }
 
-       g_strlcpy(ip, (char*)inet_ntoa(((struct sockaddr_in*)&ifr.ifr_addr)->sin_addr), BUF_LEN_MAX);
+       close(sockfd);
+
+       g_strlcpy(ip,
+                       inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr), 30);
 
        vconf_set_str(VCONFKEY_NETWORK_IP, ip);
 
-       close(sockfd);
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "IPv4Address",
+                                                 g_variant_new_string(ip));
+
+       params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
+
+       netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+                                  NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", params);
 }
 
 static void __netconfig_emulator_set_proxy(void)
 {
        const char HTTP_PROXY[] = "http_proxy";
        char *proxy = NULL;
+       GVariantBuilder *builder;
+       GVariant *params;
 
-       proxy = getenv(HTTP_PROXY);
+       proxy = netconfig_get_env(HTTP_PROXY);
        DBG("Get system proxy: %s", proxy);
 
-       if(proxy != NULL)
+       if (proxy != NULL) {
                vconf_set_str(VCONFKEY_NETWORK_PROXY, proxy);
+
+               builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+               g_variant_builder_add(builder, "{sv}", "ProxyAddress",
+                                                         g_variant_new_string(proxy));
+
+               params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
+
+               netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+                                                  NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged",
+                                                  params);
+
+               free(proxy);
+       }
 }
 
 static void __netconfig_emulator_set_network_state(void)
 {
+       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_OFF);
+       vconf_set_int(VCONFKEY_DNET_STATE, VCONFKEY_DNET_NORMAL_CONNECTED);
+
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
+       g_variant_builder_add(builder, "{sv}", "NetworkStatus",
+                                         g_variant_new_int32(VCONFKEY_NETWORK_ETHERNET));
+
+       params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
+
+       netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
+                                  NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", params);
 }
 
 static void __netconfig_emulator_config_emul_env(void)
@@ -102,12 +153,12 @@ static void __netconfig_emulator_config_emul_env(void)
        __netconfig_emulator_set_network_state();
 }
 
-gboolean netconfig_emulator_is_emulated(void)
+gboolean emulator_is_emulated(void)
 {
        return netconfig_is_emulated;
 }
 
-void netconfig_emulator_test_and_start(void)
+void emulator_test_and_start(void)
 {
        netconfig_is_emulated = __netconfig_emulator_test_emulation_env();