2 * Network Configuration Module
4 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
24 #include <sys/ioctl.h>
25 #include <arpa/inet.h>
26 #include <vconf-keys.h>
27 #include <system_info.h>
34 static gboolean netconfig_is_emulated = FALSE;
36 static gboolean __netconfig_emulator_test_emulation_env(void)
41 DBG("Test emulation environment");
43 ret = system_info_get_platform_string("tizen.org/system/model_name", &model);
44 if (ret != SYSTEM_INFO_ERROR_NONE) {
45 ERR("Failed to get system information(%d)", ret);
49 if (model && strncmp(model, "Emulator", strlen("Emulator")) == 0) {
60 static void __netconfig_emulator_set_ip(void)
62 const char EMUL_IFNAME[] = "eth0";
66 GVariantBuilder *builder;
69 sockfd = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
71 ERR("Failed to open socket");
75 memset(&ifr, 0, sizeof(struct ifreq));
76 g_strlcpy((char *)ifr.ifr_name, EMUL_IFNAME, 16);
78 if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0) {
79 ERR("Failed to get IP address");
88 inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr), 30);
90 netconfig_set_vconf_str(VCONFKEY_NETWORK_IP, ip, TRUE);
92 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
93 g_variant_builder_add(builder, "{sv}", "IPv4Address",
94 g_variant_new_string(ip));
96 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
97 g_variant_builder_unref(builder);
99 netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
100 NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", params);
103 static void __netconfig_emulator_set_proxy(void)
105 const char HTTP_PROXY[] = "http_proxy";
107 GVariantBuilder *builder;
110 proxy = netconfig_get_env(HTTP_PROXY);
111 DBG("Get system proxy: %s", proxy);
114 netconfig_set_vconf_str(VCONFKEY_NETWORK_PROXY, proxy, TRUE);
116 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
117 g_variant_builder_add(builder, "{sv}", "ProxyAddress",
118 g_variant_new_string(proxy));
120 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
121 g_variant_builder_unref(builder);
123 netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
124 NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged",
131 static void __netconfig_emulator_set_network_state(void)
133 GVariantBuilder *builder;
136 netconfig_set_vconf_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 1, TRUE);
137 netconfig_set_vconf_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_ETHERNET, TRUE);
138 netconfig_set_vconf_int(VCONFKEY_DNET_STATE, VCONFKEY_DNET_NORMAL_CONNECTED, TRUE);
140 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
142 g_variant_builder_add(builder, "{sv}", "NetworkStatus",
143 g_variant_new_int32(VCONFKEY_NETWORK_ETHERNET));
145 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
146 g_variant_builder_unref(builder);
148 netconfig_dbus_emit_signal(NULL, NETCONFIG_NETWORK_PATH,
149 NETCONFIG_NETWORK_INTERFACE, "NetworkConfigChanged", params);
152 static void __netconfig_emulator_config_emul_env(void)
154 __netconfig_emulator_set_ip();
155 __netconfig_emulator_set_proxy();
156 __netconfig_emulator_set_network_state();
159 gboolean emulator_is_emulated(void)
161 return netconfig_is_emulated;
164 void emulator_test_and_start(void)
166 netconfig_is_emulated = __netconfig_emulator_test_emulation_env();
168 DBG("Emulation environment tested: %s", netconfig_is_emulated ? "It's emulated" : "Not emulated");
170 if (netconfig_is_emulated == TRUE)
171 __netconfig_emulator_config_emul_env();