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.
21 #include <vconf-keys.h>
22 #include <syspopup_caller.h>
27 #include "network-state.h"
29 #define NETCONFIG_NETWORK_STATE_PATH "/net/netconfig/network"
31 #define PROP_DEFAULT FALSE
32 #define PROP_DEFAULT_STR NULL
35 gboolean netconfig_iface_network_state_update_default_connection_info(
36 NetconfigNetworkState *master,
37 gchar *connection_type, gchar *connection_state,
38 gchar *ip_addr, gchar *proxy_addr, GError **error);
40 #include "netconfig-iface-network-state-glue.h"
44 PROP_NETWORK_STATE_CONN,
45 PROP_NETWORK_STATE_PATH,
48 struct NetconfigNetworkStateClass {
52 struct NetconfigNetworkState {
55 DBusGConnection *conn;
59 G_DEFINE_TYPE(NetconfigNetworkState, netconfig_network_state, G_TYPE_OBJECT);
62 static void __netconfig_network_state_gobject_get_property(GObject *object,
63 guint prop_id, GValue *value, GParamSpec *pspec)
68 static void __netconfig_network_state_gobject_set_property(GObject *object,
69 guint prop_id, const GValue *value, GParamSpec *pspec)
71 NetconfigNetworkState *network_state = NETCONFIG_NETWORK_STATE(object);
74 case PROP_NETWORK_STATE_CONN:
76 network_state->conn = g_value_get_boxed(value);
77 INFO("network_state(%p) set conn(%p)", network_state, network_state->conn);
81 case PROP_NETWORK_STATE_PATH:
83 if (network_state->path)
84 g_free(network_state->path);
86 network_state->path = g_value_dup_string(value);
87 INFO("network_state(%p) path(%s)", network_state, network_state->path);
93 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
97 static void netconfig_network_state_init(NetconfigNetworkState *network_state)
99 DBG("network_state initialize");
101 network_state->conn = NULL;
102 network_state->path = g_strdup(PROP_DEFAULT_STR);
105 static void netconfig_network_state_class_init(NetconfigNetworkStateClass *klass)
107 GObjectClass *object_class = G_OBJECT_CLASS(klass);
109 DBG("class initialize");
111 object_class->get_property = __netconfig_network_state_gobject_get_property;
112 object_class->set_property = __netconfig_network_state_gobject_set_property;
115 dbus_g_object_type_install_info(NETCONFIG_TYPE_NETWORK_STATE,
116 &dbus_glib_netconfig_iface_network_state_object_info);
119 g_object_class_install_property(object_class, PROP_NETWORK_STATE_CONN,
120 g_param_spec_boxed("conn", "CONNECTION", "DBus connection",
121 DBUS_TYPE_G_CONNECTION,
122 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
124 g_object_class_install_property(object_class, PROP_NETWORK_STATE_PATH,
125 g_param_spec_string("path", "Path", "Object path",
127 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
131 static void __netconfig_pop_3g_alert_syspoppup(void)
135 int wifi_ug_state = 0;
137 vconf_get_int(VCONFKEY_WIFI_UG_RUN_STATE, &wifi_ug_state);
138 if (wifi_ug_state == VCONFKEY_WIFI_UG_RUN_STATE_ON_FOREGROUND)
143 bundle_add(b, "_SYSPOPUP_TITLE_", "Cellular connection popup");
144 bundle_add(b, "_SYSPOPUP_TYPE_", "notification");
145 bundle_add(b, "_SYSPOPUP_CONTENT_", "connected");
147 DBG("Launch 3G alert network popup");
148 rv = syspopup_launch("net-popup", b);
153 gboolean netconfig_iface_network_state_update_default_connection_info(
154 NetconfigNetworkState *master,
155 gchar *connection_type, gchar *connection_state,
156 gchar *ip_addr, gchar *proxy_addr, GError **error)
161 int previous_network_status = 0;
163 DBG("connection type (%s), connection state(%s), ip_addr(%s), proxy_addr(%s)",
164 connection_type, connection_state, ip_addr, proxy_addr);
166 if (netconfig_emulator_is_emulated() == TRUE)
169 vconf_get_int(VCONFKEY_NETWORK_WIFI_STATE, &wifi_state);
170 vconf_get_int(VCONFKEY_NETWORK_STATUS, &previous_network_status);
172 if (g_str_equal(connection_state, "idle") == TRUE &&
173 previous_network_status != VCONFKEY_NETWORK_OFF) {
174 vconf_set_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_OFF);
176 if (g_str_equal(connection_type, "wifi") == TRUE)
177 if (wifi_state != VCONFKEY_NETWORK_WIFI_OFF)
178 vconf_set_int(VCONFKEY_NETWORK_WIFI_STATE,
179 VCONFKEY_NETWORK_WIFI_NOT_CONNECTED);
181 vconf_set_str(VCONFKEY_NETWORK_IP, "");
182 vconf_set_str(VCONFKEY_NETWORK_PROXY, "");
184 vconf_set_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 0);
186 DBG("Successfully clear IP and PROXY up");
187 } else if (g_str_equal(connection_state, "ready") == TRUE ||
188 g_str_equal(connection_state, "online") == TRUE) {
189 ip = vconf_get_str(VCONFKEY_NETWORK_IP);
190 proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
192 DBG("existed ip (%s), proxy (%s)", ip, proxy);
194 if (g_str_equal(connection_type, "wifi") == TRUE) {
195 vconf_set_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_WIFI);
197 if (wifi_state != VCONFKEY_NETWORK_WIFI_OFF)
198 vconf_set_int(VCONFKEY_NETWORK_WIFI_STATE,
199 VCONFKEY_NETWORK_WIFI_CONNECTED);
200 } else if (g_str_equal(connection_type, "cellular") == TRUE) {
201 vconf_set_int(VCONFKEY_NETWORK_STATUS, VCONFKEY_NETWORK_CELLULAR);
203 if (wifi_state != VCONFKEY_NETWORK_WIFI_OFF)
204 vconf_set_int(VCONFKEY_NETWORK_WIFI_STATE,
205 VCONFKEY_NETWORK_WIFI_NOT_CONNECTED);
207 if (previous_network_status != VCONFKEY_NETWORK_CELLULAR)
208 __netconfig_pop_3g_alert_syspoppup();
211 if (ip != NULL && ip_addr != NULL &&
212 g_str_equal(ip, ip_addr) != TRUE)
213 vconf_set_str(VCONFKEY_NETWORK_IP, ip_addr);
215 if (proxy != NULL && proxy_addr != NULL &&
216 g_str_equal(proxy, proxy_addr) != TRUE)
217 vconf_set_str(VCONFKEY_NETWORK_PROXY, proxy_addr);
219 vconf_set_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, 1);
221 DBG("Successfully update default network configuration");
227 gpointer netconfig_network_state_create_and_init(DBusGConnection *conn)
231 g_return_val_if_fail(conn != NULL, NULL);
233 object = g_object_new(NETCONFIG_TYPE_NETWORK_STATE, "conn", conn, "path",
234 NETCONFIG_NETWORK_STATE_PATH, NULL);
236 INFO("create network_state(%p)", object);
238 dbus_g_connection_register_g_object(conn, NETCONFIG_NETWORK_STATE_PATH, object);
240 INFO("network_state(%p) register DBus path(%s)", object, NETCONFIG_NETWORK_STATE_PATH);