Skip to content

Commit

Permalink
vpn: Return transport ident with get_property()
Browse files Browse the repository at this point in the history
[vpn] Return transport ident with get_property(). JB#48769

Return the service_ident with "Transport" keyword given to
get_property(). Plugin tracks the transport and this is can be used
elsewhere as well.

It is important to free the service_ident after notifying provider about
state change as the service_ident is useful for IPv6 checks when
disconnecting.
  • Loading branch information
LaakkonenJussi committed Mar 17, 2021
1 parent 5b7e6fc commit 0d574b0
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions connman/plugins/vpn.c
Expand Up @@ -155,6 +155,8 @@ static const char *get_string(struct connman_provider *provider,
return data->host_ip[0];
} else if (g_str_equal(key, "VPN.Domain"))
return data->domain;
else if (g_str_equal(key, "Transport"))
return data->service_ident;

return g_hash_table_lookup(data->setting_strings, key);
}
Expand Down Expand Up @@ -270,14 +272,12 @@ static bool provider_is_connected(struct connection_data *data)
static void set_provider_state(struct connection_data *data)
{
enum connman_provider_state state = CONNMAN_PROVIDER_STATE_UNKNOWN;
bool connected;
int err = 0;

DBG("provider %p new state %s", data->provider, data->state);

if (!provider_is_connected(data)) {
g_free(data->service_ident);
data->service_ident = NULL;
}
connected = provider_is_connected(data);

if (g_str_equal(data->state, "ready")) {
state = CONNMAN_PROVIDER_STATE_READY;
Expand All @@ -297,7 +297,7 @@ static void set_provider_state(struct connection_data *data)
}

connman_provider_set_state(data->provider, state);
return;
goto free;

set:
if (data->cb_data)
Expand All @@ -308,6 +308,12 @@ static void set_provider_state(struct connection_data *data)

free_config_cb_data(data->cb_data);
data->cb_data = NULL;

free:
if (!connected) {
g_free(data->service_ident);
data->service_ident = NULL;
}
}

static int create_provider(struct connection_data *data, void *user_data)
Expand Down Expand Up @@ -1045,12 +1051,14 @@ static int disconnect_provider(struct connection_data *data)
dbus_pending_call_set_notify(data->disconnect_call, disconnect_reply,
data, NULL);

g_free(data->service_ident);
data->service_ident = NULL;
data->default_route_set = false;

connman_provider_set_state(data->provider,
CONNMAN_PROVIDER_STATE_DISCONNECT);

g_free(data->service_ident);
data->service_ident = NULL;

return -EINPROGRESS;
}

Expand Down

0 comments on commit 0d574b0

Please sign in to comment.