summaryrefslogtreecommitdiff
path: root/src/service.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/service.c')
-rwxr-xr-xsrc/service.c85
1 files changed, 80 insertions, 5 deletions
diff --git a/src/service.c b/src/service.c
index fb780fbe..b130888b 100755
--- a/src/service.c
+++ b/src/service.c
@@ -4888,6 +4888,30 @@ bool connman_service_get_internet_connection(struct connman_service *service)
return service->is_internet_connection;
}
+
+DBusMessage *connman_service_get_defaut_info(DBusMessage *msg,
+ struct connman_service *service)
+{
+ DBusMessage *reply;
+ DBusMessageIter array, dict;
+
+ reply = dbus_message_new_method_return(msg);
+ if (!reply)
+ return NULL;
+
+ dbus_message_iter_init_append(reply, &array);
+
+ if (service)
+ dbus_message_iter_append_basic(&array, DBUS_TYPE_OBJECT_PATH,
+ &service->path);
+
+ connman_dbus_dict_open(&array, &dict);
+ if (service)
+ append_properties(&dict, FALSE, service);
+ connman_dbus_dict_close(&array, &dict);
+
+ return reply;
+}
#endif
void __connman_service_set_proxy_autoconfig(struct connman_service *service,
@@ -6331,6 +6355,9 @@ static bool auto_connect_service(GList *services,
bool ignore[MAX_CONNMAN_SERVICE_TYPES] = { };
bool autoconnecting = false;
GList *list;
+#if defined TIZEN_EXT
+ GList *wifi_ignore = NULL;
+#endif
DBG("preferred %d sessions %d reason %s", preferred, active_count,
reason2string(reason));
@@ -6346,6 +6373,13 @@ static bool auto_connect_service(GList *services,
for (list = services; list; list = list->next) {
service = list->data;
+#if defined TIZEN_EXT
+ if (service->type == CONNMAN_SERVICE_TYPE_WIFI) {
+ int index = connman_network_get_index(service->network);
+ if (g_slist_find(wifi_ignore, GINT_TO_POINTER(index)) != NULL)
+ continue;
+ } else
+#endif
if (ignore[service->type]) {
DBG("service %p type %s ignore", service,
__connman_service_type2string(service->type));
@@ -6369,9 +6403,18 @@ static bool auto_connect_service(GList *services,
if (service->pending ||
is_connecting(service->state) ||
is_connected(service->state)) {
+#if defined TIZEN_EXT
+ if (service->type == CONNMAN_SERVICE_TYPE_WIFI) {
+ int index = connman_network_get_index(service->network);
+ wifi_ignore = g_slist_prepend(wifi_ignore, GINT_TO_POINTER(index));
+
+ autoconnecting = true;
+ continue;
+ }
+#else
if (autoconnect_no_session_active(service))
return true;
-
+#endif
ignore[service->type] = true;
autoconnecting = true;
@@ -6388,6 +6431,7 @@ static bool auto_connect_service(GList *services,
#if defined TIZEN_EXT
DBG("Service is not favorite, autoconnecting %d",
autoconnecting);
+ g_slist_free(wifi_ignore);
#endif
return autoconnecting;
}
@@ -6403,7 +6447,9 @@ static bool auto_connect_service(GList *services,
if (is_ignore(service) || service->state !=
CONNMAN_SERVICE_STATE_IDLE)
continue;
-
+#if defined TIZEN_EXT
+ if (service->type != CONNMAN_SERVICE_TYPE_WIFI)
+#endif
if (autoconnect_already_connecting(service, autoconnecting)) {
DBG("service %p type %s has no users", service,
__connman_service_type2string(service->type));
@@ -6414,13 +6460,15 @@ static bool auto_connect_service(GList *services,
(preferred) ? "preferred" : reason2string(reason));
__connman_service_connect(service, reason);
-
+#if !defined TIZEN_EXT
if (autoconnect_no_session_active(service))
return true;
-
+#endif
ignore[service->type] = true;
}
-
+#if defined TIZEN_EXT
+ g_slist_free(wifi_ignore);
+#endif
return autoconnecting;
}
@@ -7731,6 +7779,25 @@ static gint service_compare(gconstpointer a, gconstpointer b)
a_connected = is_connected(state_a);
b_connected = is_connected(state_b);
+#if defined TIZEN_EXT
+ if ((a_connected && b_connected) &&
+ state_a == state_b &&
+ service_a->type == CONNMAN_SERVICE_TYPE_WIFI &&
+ service_b->type == CONNMAN_SERVICE_TYPE_WIFI) {
+ const char *default_interface =
+ connman_option_get_string("DefaultWifiInterface");
+ const char *ifname_a = connman_device_get_string(
+ connman_network_get_device(service_a->network), "Interface");
+ const char *ifname_b = connman_device_get_string(
+ connman_network_get_device(service_b->network), "Interface");
+
+ if (g_strcmp0(default_interface, ifname_a) == 0)
+ return -1;
+ else if (g_strcmp0(default_interface, ifname_b) == 0)
+ return 1;
+ }
+#endif
+
if (a_connected && b_connected) {
if (service_a->order > service_b->order)
return -1;
@@ -8764,6 +8831,10 @@ static int service_indicate_state(struct connman_service *service)
#if defined TIZEN_EXT
if (service->type == CONNMAN_SERVICE_TYPE_WIFI)
set_priority_connected_service();
+
+ if (!is_connected(old_state))
+ connman_device_send_connected_signal(
+ connman_network_get_device(service->network), true);
#endif
break;
@@ -8855,6 +8926,10 @@ static int service_indicate_state(struct connman_service *service)
(old_state == CONNMAN_SERVICE_STATE_READY &&
new_state != CONNMAN_SERVICE_STATE_ONLINE)) {
__connman_notifier_disconnect(service->type);
+#if defined TIZEN_EXT
+ connman_device_send_connected_signal(
+ connman_network_get_device(service->network), false);
+#endif
}
if (new_state == CONNMAN_SERVICE_STATE_ONLINE) {