X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fservice.c;h=1d94a661864f36600f734649118a3a0e3b883019;hb=2271c9fed743991d83ece8a7650b547d0391d1fc;hp=a941f44d59bff81f67061e8677f201e5726a3366;hpb=d76088a3c6104f2569279086752a3f3cf1ea6adc;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/service.c b/src/service.c index a941f44..1d94a66 100644 --- a/src/service.c +++ b/src/service.c @@ -139,6 +139,8 @@ const char *__connman_service_type2string(enum connman_service_type type) return "bluetooth"; case CONNMAN_SERVICE_TYPE_CELLULAR: return "cellular"; + case CONNMAN_SERVICE_TYPE_GPS: + return "gps"; case CONNMAN_SERVICE_TYPE_VPN: return "vpn"; } @@ -312,13 +314,29 @@ static void strength_changed(struct connman_service *service) static void favorite_changed(struct connman_service *service) { + if (service->path == NULL) + return; + connman_dbus_property_changed_basic(service->path, CONNMAN_SERVICE_INTERFACE, "Favorite", DBUS_TYPE_BOOLEAN, &service->favorite); } +static void immutable_changed(struct connman_service *service) +{ + if (service->path == NULL) + return; + + connman_dbus_property_changed_basic(service->path, + CONNMAN_SERVICE_INTERFACE, "Immutable", + DBUS_TYPE_BOOLEAN, &service->immutable); +} + static void roaming_changed(struct connman_service *service) { + if (service->path == NULL) + return; + connman_dbus_property_changed_basic(service->path, CONNMAN_SERVICE_INTERFACE, "Roaming", DBUS_TYPE_BOOLEAN, &service->roaming); @@ -326,6 +344,9 @@ static void roaming_changed(struct connman_service *service) static void autoconnect_changed(struct connman_service *service) { + if (service->path == NULL) + return; + connman_dbus_property_changed_basic(service->path, CONNMAN_SERVICE_INTERFACE, "AutoConnect", DBUS_TYPE_BOOLEAN, &service->autoconnect); @@ -342,6 +363,7 @@ static void passphrase_changed(struct connman_service *service) case CONNMAN_SERVICE_TYPE_WIMAX: case CONNMAN_SERVICE_TYPE_BLUETOOTH: case CONNMAN_SERVICE_TYPE_CELLULAR: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: return; case CONNMAN_SERVICE_TYPE_WIFI: @@ -355,10 +377,11 @@ static void passphrase_changed(struct connman_service *service) case CONNMAN_SERVICE_SECURITY_PSK: case CONNMAN_SERVICE_SECURITY_WPA: case CONNMAN_SERVICE_SECURITY_RSN: - case CONNMAN_SERVICE_SECURITY_8021X: if (service->passphrase == NULL) required = TRUE; break; + case CONNMAN_SERVICE_SECURITY_8021X: + break; } break; } @@ -379,6 +402,7 @@ static void apn_changed(struct connman_service *service) case CONNMAN_SERVICE_TYPE_WIMAX: case CONNMAN_SERVICE_TYPE_BLUETOOTH: case CONNMAN_SERVICE_TYPE_WIFI: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: return; case CONNMAN_SERVICE_TYPE_CELLULAR: @@ -440,6 +464,26 @@ static void append_ipv4config(DBusMessageIter *iter, void *user_data) __connman_ipconfig_append_ipv4config(service->ipconfig, iter); } +static void append_proxy(DBusMessageIter *iter, void *user_data) +{ + struct connman_service *service = user_data; + + switch (service->state) { + case CONNMAN_SERVICE_STATE_UNKNOWN: + case CONNMAN_SERVICE_STATE_IDLE: + case CONNMAN_SERVICE_STATE_FAILURE: + case CONNMAN_SERVICE_STATE_DISCONNECT: + case CONNMAN_SERVICE_STATE_ASSOCIATION: + case CONNMAN_SERVICE_STATE_CONFIGURATION: + return; + case CONNMAN_SERVICE_STATE_READY: + break; + } + + if (service->ipconfig != NULL) + __connman_ipconfig_append_proxy(service->ipconfig, iter); +} + static void settings_changed(struct connman_service *service) { connman_dbus_property_changed_dict(service->path, @@ -447,6 +491,15 @@ static void settings_changed(struct connman_service *service) append_ipv4, service); } +static void ipv4_configuration_changed(struct connman_service *service) +{ + connman_dbus_property_changed_dict(service->path, + CONNMAN_SERVICE_INTERFACE, + "IPv4.Configuration", + append_ipv4config, + service); +} + static DBusMessage *get_properties(DBusConnection *conn, DBusMessage *msg, void *user_data) { @@ -515,8 +568,7 @@ static DBusMessage *get_properties(DBusConnection *conn, switch (service->type) { case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: - case CONNMAN_SERVICE_TYPE_WIMAX: - case CONNMAN_SERVICE_TYPE_BLUETOOTH: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: break; case CONNMAN_SERVICE_TYPE_CELLULAR: @@ -568,16 +620,19 @@ static DBusMessage *get_properties(DBusConnection *conn, case CONNMAN_SERVICE_SECURITY_PSK: case CONNMAN_SERVICE_SECURITY_WPA: case CONNMAN_SERVICE_SECURITY_RSN: - case CONNMAN_SERVICE_SECURITY_8021X: if (service->passphrase == NULL) required = TRUE; break; + case CONNMAN_SERVICE_SECURITY_8021X: + break; } connman_dbus_dict_append_basic(&dict, "PassphraseRequired", DBUS_TYPE_BOOLEAN, &required); /* fall through */ case CONNMAN_SERVICE_TYPE_ETHERNET: + case CONNMAN_SERVICE_TYPE_WIMAX: + case CONNMAN_SERVICE_TYPE_BLUETOOTH: connman_dbus_dict_append_dict(&dict, "Ethernet", append_ethernet, service); break; @@ -588,6 +643,8 @@ static DBusMessage *get_properties(DBusConnection *conn, connman_dbus_dict_append_dict(&dict, "IPv4.Configuration", append_ipv4config, service); + connman_dbus_dict_append_dict(&dict, "Proxy", append_proxy, service); + connman_dbus_dict_close(&array, &dict); return reply; @@ -727,6 +784,8 @@ static DBusMessage *set_property(DBusConnection *conn, if (err < 0) return __connman_error_failed(msg, -err); + ipv4_configuration_changed(service); + __connman_storage_save_service(service); } else return __connman_error_invalid_property(msg); @@ -1059,7 +1118,7 @@ static DBusMessage *remove_service(DBusConnection *conn, set_idle(service); - connman_service_set_favorite(service, FALSE); + __connman_service_set_favorite(service, FALSE); __connman_storage_save_service(service); return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); @@ -1322,6 +1381,7 @@ static gint service_compare(gconstpointer a, gconstpointer b, case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: case CONNMAN_SERVICE_TYPE_ETHERNET: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: break; case CONNMAN_SERVICE_TYPE_WIFI: @@ -1387,13 +1447,13 @@ __connman_service_get_network(struct connman_service *service) } /** - * connman_service_set_favorite: + * __connman_service_set_favorite: * @service: service structure * @favorite: favorite value * * Change the favorite setting of service */ -int connman_service_set_favorite(struct connman_service *service, +int __connman_service_set_favorite(struct connman_service *service, connman_bool_t favorite) { GSequenceIter *iter; @@ -1416,6 +1476,16 @@ int connman_service_set_favorite(struct connman_service *service, return 0; } +int __connman_service_set_immutable(struct connman_service *service, + connman_bool_t immutable) +{ + service->immutable = immutable; + + immutable_changed(service); + + return 0; +} + void __connman_service_set_string(struct connman_service *service, const char *key, const char *value) { @@ -1477,6 +1547,9 @@ int __connman_service_indicate_state(struct connman_service *service, __connman_service_disconnect(service); } + if (state == CONNMAN_SERVICE_STATE_CONFIGURATION) + __connman_ipconfig_enable(service->ipconfig); + service->state = state; state_changed(service); @@ -1491,7 +1564,7 @@ int __connman_service_indicate_state(struct connman_service *service, if (state == CONNMAN_SERVICE_STATE_READY) { set_reconnect_state(service, TRUE); - connman_service_set_favorite(service, TRUE); + __connman_service_set_favorite(service, TRUE); reply_pending(service, 0); @@ -1598,34 +1671,34 @@ static connman_bool_t prepare_network(struct connman_service *service) static void prepare_8021x(struct connman_service *service) { - if (service->eap) + if (service->eap != NULL) connman_network_set_string(service->network, "WiFi.EAP", service->eap); - if (service->identity) + if (service->identity != NULL) connman_network_set_string(service->network, "WiFi.Identity", service->identity); - if (service->ca_cert_file) + if (service->ca_cert_file != NULL) connman_network_set_string(service->network, "WiFi.CACertFile", service->ca_cert_file); - if (service->client_cert_file) + if (service->client_cert_file != NULL) connman_network_set_string(service->network, "WiFi.ClientCertFile", service->client_cert_file); - if (service->private_key_file) + if (service->private_key_file != NULL) connman_network_set_string(service->network, "WiFi.PrivateKeyFile", service->private_key_file); - if (service->private_key_passphrase) + if (service->private_key_passphrase != NULL) connman_network_set_string(service->network, "WiFi.PrivateKeyPassphrase", service->private_key_passphrase); - if (service->phase2) + if (service->phase2 != NULL) connman_network_set_string(service->network, "WiFi.Phase2", service->phase2); } @@ -1645,6 +1718,7 @@ int __connman_service_connect(struct connman_service *service) switch (service->type) { case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: return -EINVAL; case CONNMAN_SERVICE_TYPE_ETHERNET: @@ -1664,10 +1738,11 @@ int __connman_service_connect(struct connman_service *service) case CONNMAN_SERVICE_SECURITY_PSK: case CONNMAN_SERVICE_SECURITY_WPA: case CONNMAN_SERVICE_SECURITY_RSN: - case CONNMAN_SERVICE_SECURITY_8021X: if (service->passphrase == NULL) return -ENOKEY; break; + case CONNMAN_SERVICE_SECURITY_8021X: + break; } break; } @@ -2334,6 +2409,7 @@ struct connman_service *__connman_service_create_from_network(struct connman_net case CONNMAN_SERVICE_TYPE_ETHERNET: case CONNMAN_SERVICE_TYPE_WIMAX: case CONNMAN_SERVICE_TYPE_BLUETOOTH: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: service->autoconnect = FALSE; break; @@ -2465,6 +2541,7 @@ static int service_load(struct connman_service *service) case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: case CONNMAN_SERVICE_TYPE_ETHERNET: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: break; case CONNMAN_SERVICE_TYPE_WIFI: @@ -2611,6 +2688,7 @@ update: case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: case CONNMAN_SERVICE_TYPE_ETHERNET: + case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: break; case CONNMAN_SERVICE_TYPE_WIFI: