X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fconnman.git;a=blobdiff_plain;f=src%2Fservice.c;h=356a21870c320bd1e71d12b64411d3e4442950e0;hp=794555ea240d73273b8c342b9dfa73fa2f0ab912;hb=00b8c314dc2cfb641494d413f4b00d90a10ecbeb;hpb=b6922282a9e5ede695b4294ffc4d696838523dd6 diff --git a/src/service.c b/src/service.c index 794555e..356a218 100755 --- a/src/service.c +++ b/src/service.c @@ -3196,7 +3196,7 @@ static void disconnection_requested_changed(struct connman_service *service) } void connman_service_set_disconnection_requested(struct connman_service *service, - bool disconnection_requested) + bool disconnection_requested) { if (service == NULL) return; @@ -3204,6 +3204,47 @@ void connman_service_set_disconnection_requested(struct connman_service *service service->disconnection_requested = disconnection_requested; disconnection_requested_changed(service); } + +static void connman_service_emit_state(struct connman_service *service, + enum connman_service_state state) +{ + const char *str; + enum connman_service_state cur_state = service->state; + + if (service->state != state) + service->state = state; + + str = state2string(service->state); + if (!str) { + service->state = cur_state; + return; + } + + DBG(" %s, %s", str, service->path); + + connman_dbus_property_changed_basic(service->path, + CONNMAN_SERVICE_INTERFACE, "State", + DBUS_TYPE_STRING, &str); + + emit_state_changed_with_properties(service); + service->state = cur_state; +} + +void connman_service_notify_reconnection(struct connman_service *service) +{ + if (!service) + return; + + if (service->state != CONNMAN_SERVICE_STATE_READY && + service->state != CONNMAN_SERVICE_STATE_ONLINE) + return; + + connman_service_emit_state(service, CONNMAN_SERVICE_STATE_CONFIGURATION); + connman_service_emit_state(service, CONNMAN_SERVICE_STATE_READY); + + if (service->state == CONNMAN_SERVICE_STATE_ONLINE) + connman_service_emit_state(service, CONNMAN_SERVICE_STATE_ONLINE); +} #endif static void strength_changed(struct connman_service *service) @@ -9147,6 +9188,50 @@ static void set_priority_connected_service(void) #endif } } + +static void emit_wifi_roaming_failure(struct connman_service *service, + enum connman_service_state new_state) +{ + if (connman_setting_get_bool("WifiRoaming") && + connman_network_get_bool(service->network, "WiFi.Roaming")) { + const char *cur_bssid; + const char *dst_bssid; + const char *ifname; + struct connman_device *device; + + device = connman_network_get_device(service->network); + if (device) { + ifname = connman_device_get_string(device, "Interface"); + cur_bssid = connman_network_get_string(service->network, + "WiFi.RoamingCurBSSID"); + dst_bssid = connman_network_get_string(service->network, + "WiFi.RoamingDstBSSID"); + } + + if (device && ifname && cur_bssid && dst_bssid) { + switch(new_state) { + case CONNMAN_SERVICE_STATE_UNKNOWN: + case CONNMAN_SERVICE_STATE_ASSOCIATION: + case CONNMAN_SERVICE_STATE_CONFIGURATION: + case CONNMAN_SERVICE_STATE_READY: + case CONNMAN_SERVICE_STATE_ONLINE: + break; + case CONNMAN_SERVICE_STATE_DISCONNECT: + case CONNMAN_SERVICE_STATE_FAILURE: + case CONNMAN_SERVICE_STATE_IDLE: + __connman_technology_notify_roaming_state(ifname, + "failure", cur_bssid, dst_bssid); + connman_network_set_bool(service->network, + "WiFi.Roaming", false); + connman_network_set_string(service->network, + "WiFi.RoamingCurBSSID", NULL); + connman_network_set_string(service->network, + "WiFi.RoamingDstBSSID", NULL); + break; + } + } + } +} #endif static const char *get_dbus_sender(struct connman_service *service) @@ -9353,6 +9438,8 @@ static int service_indicate_state(struct connman_service *service) proxy_changed(service); #if defined TIZEN_EXT } + + emit_wifi_roaming_failure(service, new_state); #endif /* @@ -9393,55 +9480,7 @@ static int service_indicate_state(struct connman_service *service) #else __connman_service_connect_default(service); #endif - /* Update Wi-Fi Roaming result */ - if (connman_setting_get_bool("WifiRoaming") && - connman_network_get_bool(service->network, "WiFi.Roaming")) { - const char *cur_bssid; - const char *dst_bssid; - const char *ifname; - struct connman_device *device; - - device = connman_network_get_device(service->network); - if (device) { - ifname = connman_device_get_string(device, "Interface"); - cur_bssid = connman_network_get_string(service->network, - "WiFi.RoamingCurBSSID"); - dst_bssid = connman_network_get_string(service->network, - "WiFi.RoamingDstBSSID"); - } - - if (device && ifname && cur_bssid && dst_bssid) { - switch(new_state) { - case CONNMAN_SERVICE_STATE_UNKNOWN: - case CONNMAN_SERVICE_STATE_ASSOCIATION: - case CONNMAN_SERVICE_STATE_CONFIGURATION: - break; - case CONNMAN_SERVICE_STATE_READY: - case CONNMAN_SERVICE_STATE_ONLINE: - __connman_technology_notify_roaming_state(ifname, - "success", cur_bssid, dst_bssid); - connman_network_set_bool(service->network, - "WiFi.Roaming", false); - connman_network_set_string(service->network, - "WiFi.RoamingCurBSSID", NULL); - connman_network_set_string(service->network, - "WiFi.RoamingDstBSSID", NULL); - break; - case CONNMAN_SERVICE_STATE_DISCONNECT: - case CONNMAN_SERVICE_STATE_FAILURE: - case CONNMAN_SERVICE_STATE_IDLE: - __connman_technology_notify_roaming_state(ifname, - "failure", cur_bssid, dst_bssid); - connman_network_set_bool(service->network, - "WiFi.Roaming", false); - connman_network_set_string(service->network, - "WiFi.RoamingCurBSSID", NULL); - connman_network_set_string(service->network, - "WiFi.RoamingDstBSSID", NULL); - break; - } - } - } + emit_wifi_roaming_failure(service, new_state); #endif __connman_connection_update_gateway();