--- src/connman.h | 3 +++ src/network.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/service.c | 34 ++++++++++++++++++++++++---------- 3 files changed, 71 insertions(+), 10 deletions(-)
diff --git a/src/connman.h b/src/connman.h index 6202db3..978a71a 100644 --- a/src/connman.h +++ b/src/connman.h @@ -474,6 +474,9 @@ int __connman_service_set_favorite(struct connman_service *service, connman_bool_t favorite); int __connman_service_set_immutable(struct connman_service *service, connman_bool_t immutable); +void __connman_service_set_apn(struct connman_service *service, + const char *apn); +const char *__connman_service_get_apn(struct connman_service *service); void __connman_service_set_string(struct connman_service *service, const char *key, const char *value); diff --git a/src/network.c b/src/network.c index 5bba620..8b15d6e 100644 --- a/src/network.c +++ b/src/network.c @@ -1268,6 +1268,50 @@ int connman_network_set_roaming(struct connman_network *network, } /** + * connman_network_set_apn: + * @network: network structure + * @apn: access point name + * + * Set access point name for network + */ +int connman_network_set_apn(struct connman_network *network, const char *apn) +{ + struct connman_service *service; + + DBG("network %p apn %s", network, apn); + + service = __connman_service_lookup_from_network(network); + if (service == NULL) + return -EINVAL; + + __connman_service_set_apn(service, apn); + + if (network->driver != NULL && network->driver->setup != NULL) + return network->driver->setup(network, "Cellular.APN"); + else + return 0; +} + +/** + * connman_network_get_apn: + * @network: network structure + * + * Get access point name for network + */ +const char *connman_network_get_apn(struct connman_network *network) +{ + struct connman_service *service; + + DBG("network %p", network); + + service = __connman_service_lookup_from_network(network); + if (service == NULL) + return NULL; + + return __connman_service_get_apn(service); +} + +/** * connman_network_set_string: * @network: network structure * @key: unique identifier diff --git a/src/service.c b/src/service.c index 7751dc0..56b07b0 100644 --- a/src/service.c +++ b/src/service.c @@ -2119,14 +2119,8 @@ static DBusMessage *set_property(DBusConnection *conn, dbus_message_iter_get_basic(&value, &apn); - g_free(service->apn); - service->apn = g_strdup(apn); - - apn_changed(service); - if (service->network != NULL) - connman_network_set_string(service->network, - "Cellular.APN", service->apn); + connman_network_set_apn(service->network, apn); __connman_storage_save_service(service); } else if (g_str_equal(name, "Username") == TRUE) { @@ -3216,6 +3210,28 @@ int __connman_service_set_immutable(struct connman_service *service, return 0; } +void __connman_service_set_apn(struct connman_service *service, const char *apn) +{ + if (service == NULL || service->immutable == TRUE) + return; + + if (g_strcmp0(service->apn, apn) == 0) + return; + + g_free(service->apn); + service->apn = g_strdup(apn); + + apn_changed(service); +} + +const char *__connman_service_get_apn(struct connman_service *service) +{ + if (service == NULL) + return NULL; + + return service->apn; +} + void __connman_service_set_string(struct connman_service *service, const char *key, const char *value) { @@ -3565,9 +3581,7 @@ static connman_bool_t prepare_network(struct connman_service *service) case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: break; case CONNMAN_NETWORK_TYPE_CELLULAR: - connman_network_set_string(service->network, - "Cellular.APN", service->apn); - + connman_network_set_apn(service->network, service->apn); connman_network_set_string(service->network, "Cellular.Username", service->username); connman_network_set_string(service->network, -- 1.7.0.4 _______________________________________________ connman mailing list connman@connman.net http://lists.connman.net/listinfo/connman