---
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
[email protected]
http://lists.connman.net/listinfo/connman