summaryrefslogtreecommitdiff
path: root/src/provider.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2011-07-12 11:48:11 +0200
committerMarcel Holtmann <marcel@holtmann.org>2011-07-12 11:48:11 +0200
commitdc8904eb9962882e14c92c8d865f1f49fbd02d57 (patch)
tree481c2542be9effb887618cf889cef90b0e2537b3 /src/provider.c
parent2fdb73604f5013a293c9a9b4039595127cbf3ae0 (diff)
downloadconnman-dc8904eb9962882e14c92c8d865f1f49fbd02d57.tar.gz
connman-dc8904eb9962882e14c92c8d865f1f49fbd02d57.tar.bz2
connman-dc8904eb9962882e14c92c8d865f1f49fbd02d57.zip
provider: Untangle create and connect code block
Diffstat (limited to 'src/provider.c')
-rw-r--r--src/provider.c46
1 files changed, 20 insertions, 26 deletions
diff --git a/src/provider.c b/src/provider.c
index 68183dc6..ca6d2ae0 100644
--- a/src/provider.c
+++ b/src/provider.c
@@ -475,10 +475,9 @@ int __connman_provider_create_and_connect(DBusMessage *msg)
{
struct connman_provider *provider;
DBusMessageIter iter, array;
- const char *type = NULL, *name = NULL, *service_path = NULL;
+ const char *type = NULL, *name = NULL, *service_path;
const char *host = NULL, *domain = NULL;
char *ident;
- gboolean created = FALSE;
int err;
dbus_message_iter_init(msg, &iter);
@@ -524,25 +523,21 @@ int __connman_provider_create_and_connect(DBusMessage *msg)
DBG("ident %s", ident);
provider = connman_provider_lookup(ident);
-
if (provider == NULL) {
- created = TRUE;
provider = connman_provider_get(ident);
- if (provider) {
- provider->host = g_strdup(host);
- provider->domain = g_strdup(domain);
- provider->name = g_strdup(name);
- provider->type = g_strdup(type);
+ if (provider == NULL) {
+ DBG("can not create provider");
+ return -EOPNOTSUPP;
}
+ provider->host = g_strdup(host);
+ provider->domain = g_strdup(domain);
+ provider->name = g_strdup(name);
+ provider->type = g_strdup(type);
+
provider_register(provider);
}
- if (provider == NULL) {
- DBG("can not create provider");
- err = -EOPNOTSUPP;
- goto failed;
- }
dbus_message_iter_init(msg, &iter);
dbus_message_iter_recurse(&iter, &array);
@@ -568,12 +563,13 @@ int __connman_provider_create_and_connect(DBusMessage *msg)
g_free(ident);
- if (provider->vpn_service == NULL)
+ if (provider->vpn_service == NULL) {
provider->vpn_service =
__connman_service_create_from_provider(provider);
- if (provider->vpn_service == NULL) {
- err = -EOPNOTSUPP;
- goto failed;
+ if (provider->vpn_service == NULL) {
+ err = -EOPNOTSUPP;
+ goto unref;
+ }
}
err = __connman_service_connect(provider->vpn_service);
@@ -587,15 +583,13 @@ int __connman_provider_create_and_connect(DBusMessage *msg)
return 0;
failed:
- if (provider != NULL && created == TRUE) {
- DBG("can not connect delete provider");
- connman_provider_unref(provider);
+ __connman_service_put(provider->vpn_service);
+ provider->vpn_service = NULL;
- if (provider->vpn_service != NULL) {
- __connman_service_put(provider->vpn_service);
- provider->vpn_service = NULL;
- }
- }
+unref:
+ DBG("can not connect, delete provider");
+
+ connman_provider_unref(provider);
return err;
}