mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-15 08:58:06 +02:00
cli: move find_active_connection() to common.c
Beside nmc_find_connection(), which is very similar. Also, drop unused argument @cons.
This commit is contained in:
parent
f0a2686545
commit
5e34a4b424
3 changed files with 87 additions and 84 deletions
|
|
@ -490,6 +490,83 @@ found:
|
|||
return found;
|
||||
}
|
||||
|
||||
NMActiveConnection *
|
||||
nmc_find_active_connection (const GPtrArray *active_cons,
|
||||
const char *filter_type,
|
||||
const char *filter_val,
|
||||
int *idx,
|
||||
gboolean complete)
|
||||
{
|
||||
int i;
|
||||
int start = (idx && *idx > 0) ? *idx : 0;
|
||||
NMRemoteConnection *con;
|
||||
NMActiveConnection *found = NULL;
|
||||
|
||||
nm_assert (filter_val);
|
||||
|
||||
for (i = start; i < active_cons->len; i++) {
|
||||
NMActiveConnection *candidate = g_ptr_array_index (active_cons, i);
|
||||
const char *v, *v_num;
|
||||
|
||||
con = nm_active_connection_get_connection (candidate);
|
||||
|
||||
/* When filter_type is NULL, compare connection ID (filter_val)
|
||||
* against all types. Otherwise, only compare against the specific
|
||||
* type. If 'path' or 'apath' filter types are specified, comparison
|
||||
* against numeric index (in addition to the whole path) is allowed.
|
||||
*/
|
||||
if (NM_IN_STRSET (filter_type, NULL, "id")) {
|
||||
v = nm_active_connection_get_id (candidate);
|
||||
if (complete)
|
||||
nmc_complete_strings (filter_val, v, NULL);
|
||||
if (nm_streq0 (filter_val, v))
|
||||
goto found;
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (filter_type, NULL, "uuid")) {
|
||||
v = nm_active_connection_get_uuid (candidate);
|
||||
if (complete && (filter_type || *filter_val))
|
||||
nmc_complete_strings (filter_val, v, NULL);
|
||||
if (nm_streq0 (filter_val, v))
|
||||
goto found;
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (filter_type, NULL, "path")) {
|
||||
v = con ? nm_connection_get_path (NM_CONNECTION (con)) : NULL;
|
||||
v_num = nm_utils_dbus_path_get_last_component (v);
|
||||
if (complete && (filter_type || *filter_val))
|
||||
nmc_complete_strings (filter_val, v, filter_type ? v_num : NULL, NULL);
|
||||
if ( nm_streq0 (filter_val, v)
|
||||
|| (filter_type && nm_streq0 (filter_val, v_num)))
|
||||
goto found;
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (filter_type, NULL, "apath")) {
|
||||
v = nm_object_get_path (NM_OBJECT (candidate));
|
||||
v_num = nm_utils_dbus_path_get_last_component (v);
|
||||
if (complete && (filter_type || *filter_val))
|
||||
nmc_complete_strings (filter_val, v, filter_type ? v_num : NULL, NULL);
|
||||
if ( nm_streq0 (filter_val, v)
|
||||
|| (filter_type && nm_streq0 (filter_val, v_num)))
|
||||
goto found;
|
||||
}
|
||||
|
||||
continue;
|
||||
found:
|
||||
if (!idx)
|
||||
return candidate;
|
||||
if (found) {
|
||||
*idx = i;
|
||||
return found;
|
||||
}
|
||||
found = candidate;
|
||||
}
|
||||
|
||||
if (idx)
|
||||
*idx = 0;
|
||||
return found;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
vpn_openconnect_get_secrets (NMConnection *connection, GPtrArray *secrets)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -35,6 +35,12 @@ NMConnection *nmc_find_connection (const GPtrArray *connections,
|
|||
int *start,
|
||||
gboolean complete);
|
||||
|
||||
NMActiveConnection *nmc_find_active_connection (const GPtrArray *active_cons,
|
||||
const char *filter_type,
|
||||
const char *filter_val,
|
||||
int *idx,
|
||||
gboolean complete);
|
||||
|
||||
void nmc_secrets_requested (NMSecretAgentSimple *agent,
|
||||
const char *request_id,
|
||||
const char *title,
|
||||
|
|
|
|||
|
|
@ -737,84 +737,6 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static NMActiveConnection *
|
||||
find_active_connection (const GPtrArray *active_cons,
|
||||
const GPtrArray *cons,
|
||||
const char *filter_type,
|
||||
const char *filter_val,
|
||||
int *idx,
|
||||
gboolean complete)
|
||||
{
|
||||
int i;
|
||||
int start = (idx && *idx > 0) ? *idx : 0;
|
||||
NMRemoteConnection *con;
|
||||
NMActiveConnection *found = NULL;
|
||||
|
||||
nm_assert (filter_val);
|
||||
|
||||
for (i = start; i < active_cons->len; i++) {
|
||||
NMActiveConnection *candidate = g_ptr_array_index (active_cons, i);
|
||||
const char *v, *v_num;
|
||||
|
||||
con = nm_active_connection_get_connection (candidate);
|
||||
|
||||
/* When filter_type is NULL, compare connection ID (filter_val)
|
||||
* against all types. Otherwise, only compare against the specific
|
||||
* type. If 'path' or 'apath' filter types are specified, comparison
|
||||
* against numeric index (in addition to the whole path) is allowed.
|
||||
*/
|
||||
if (NM_IN_STRSET (filter_type, NULL, "id")) {
|
||||
v = nm_active_connection_get_id (candidate);
|
||||
if (complete)
|
||||
nmc_complete_strings (filter_val, v, NULL);
|
||||
if (nm_streq0 (filter_val, v))
|
||||
goto found;
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (filter_type, NULL, "uuid")) {
|
||||
v = nm_active_connection_get_uuid (candidate);
|
||||
if (complete && (filter_type || *filter_val))
|
||||
nmc_complete_strings (filter_val, v, NULL);
|
||||
if (nm_streq0 (filter_val, v))
|
||||
goto found;
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (filter_type, NULL, "path")) {
|
||||
v = con ? nm_connection_get_path (NM_CONNECTION (con)) : NULL;
|
||||
v_num = nm_utils_dbus_path_get_last_component (v);
|
||||
if (complete && (filter_type || *filter_val))
|
||||
nmc_complete_strings (filter_val, v, filter_type ? v_num : NULL, NULL);
|
||||
if ( nm_streq0 (filter_val, v)
|
||||
|| (filter_type && nm_streq0 (filter_val, v_num)))
|
||||
goto found;
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (filter_type, NULL, "apath")) {
|
||||
v = nm_object_get_path (NM_OBJECT (candidate));
|
||||
v_num = nm_utils_dbus_path_get_last_component (v);
|
||||
if (complete && (filter_type || *filter_val))
|
||||
nmc_complete_strings (filter_val, v, filter_type ? v_num : NULL, NULL);
|
||||
if ( nm_streq0 (filter_val, v)
|
||||
|| (filter_type && nm_streq0 (filter_val, v_num)))
|
||||
goto found;
|
||||
}
|
||||
|
||||
continue;
|
||||
found:
|
||||
if (!idx)
|
||||
return candidate;
|
||||
if (found) {
|
||||
*idx = i;
|
||||
return found;
|
||||
}
|
||||
found = candidate;
|
||||
}
|
||||
|
||||
if (idx)
|
||||
*idx = 0;
|
||||
return found;
|
||||
}
|
||||
|
||||
NMMetaColor
|
||||
nmc_active_connection_state_to_color (NMActiveConnectionState state)
|
||||
{
|
||||
|
|
@ -1824,8 +1746,8 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
|
|||
if ( !con
|
||||
&& NM_IN_STRSET (selector, NULL, "apath")) {
|
||||
/* Try apath too */
|
||||
acon = find_active_connection (active_cons, connections, "apath", *argv, NULL,
|
||||
argc == 1 && nmc->complete);
|
||||
acon = nmc_find_active_connection (active_cons, "apath", *argv, NULL,
|
||||
argc == 1 && nmc->complete);
|
||||
if (acon)
|
||||
con = NM_CONNECTION (nm_active_connection_get_connection (acon));
|
||||
}
|
||||
|
|
@ -2659,7 +2581,6 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
|
|||
/* Get active connections */
|
||||
active_cons = nm_client_get_active_connections (nmc->client);
|
||||
while (arg_num > 0) {
|
||||
const GPtrArray *connections;
|
||||
const char *selector = NULL;
|
||||
|
||||
if (arg_num == 1 && nmc->complete)
|
||||
|
|
@ -2675,9 +2596,8 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
|
|||
}
|
||||
}
|
||||
|
||||
connections = nm_client_get_connections (nmc->client);
|
||||
active = find_active_connection (active_cons, connections, selector, *arg_ptr, &idx,
|
||||
arg_num == 1 && nmc->complete);
|
||||
active = nmc_find_active_connection (active_cons, selector, *arg_ptr, &idx,
|
||||
arg_num == 1 && nmc->complete);
|
||||
if (active) {
|
||||
/* Check if the connection is unique. */
|
||||
/* Calling down for the same connection repeatedly would result in
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue