DBus: Move wpas_dbus_new_decompose_object_path()
Moved wpas_dbus_new_decompose_object_path from dbus_new_handlers.c to dbus_new_helpers.c. Signed-off-by: Fabien Marotte <fabienx.marotte@linux.intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
4b6baa2f5e
commit
58f80e2aeb
3 changed files with 67 additions and 64 deletions
|
@ -42,70 +42,6 @@ static const char *debug_strings[] = {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* wpas_dbus_new_decompose_object_path - Decompose an interface object path into parts
|
||||
* @path: The dbus object path
|
||||
* @network: (out) the configured network this object path refers to, if any
|
||||
* @bssid: (out) the scanned bssid this object path refers to, if any
|
||||
* Returns: The object path of the network interface this path refers to
|
||||
*
|
||||
* For a given object path, decomposes the object path into object id, network,
|
||||
* and BSSID parts, if those parts exist.
|
||||
*/
|
||||
static char * wpas_dbus_new_decompose_object_path(const char *path,
|
||||
char **network,
|
||||
char **bssid)
|
||||
{
|
||||
const unsigned int dev_path_prefix_len =
|
||||
strlen(WPAS_DBUS_NEW_PATH_INTERFACES "/");
|
||||
char *obj_path_only;
|
||||
char *next_sep;
|
||||
|
||||
/* Be a bit paranoid about path */
|
||||
if (!path || os_strncmp(path, WPAS_DBUS_NEW_PATH_INTERFACES "/",
|
||||
dev_path_prefix_len))
|
||||
return NULL;
|
||||
|
||||
/* Ensure there's something at the end of the path */
|
||||
if ((path + dev_path_prefix_len)[0] == '\0')
|
||||
return NULL;
|
||||
|
||||
obj_path_only = os_strdup(path);
|
||||
if (obj_path_only == NULL)
|
||||
return NULL;
|
||||
|
||||
next_sep = os_strchr(obj_path_only + dev_path_prefix_len, '/');
|
||||
if (next_sep != NULL) {
|
||||
const char *net_part = os_strstr(
|
||||
next_sep, WPAS_DBUS_NEW_NETWORKS_PART "/");
|
||||
const char *bssid_part = os_strstr(
|
||||
next_sep, WPAS_DBUS_NEW_BSSIDS_PART "/");
|
||||
|
||||
if (network && net_part) {
|
||||
/* Deal with a request for a configured network */
|
||||
const char *net_name = net_part +
|
||||
os_strlen(WPAS_DBUS_NEW_NETWORKS_PART "/");
|
||||
*network = NULL;
|
||||
if (os_strlen(net_name))
|
||||
*network = os_strdup(net_name);
|
||||
} else if (bssid && bssid_part) {
|
||||
/* Deal with a request for a scanned BSSID */
|
||||
const char *bssid_name = bssid_part +
|
||||
os_strlen(WPAS_DBUS_NEW_BSSIDS_PART "/");
|
||||
if (strlen(bssid_name))
|
||||
*bssid = os_strdup(bssid_name);
|
||||
else
|
||||
*bssid = NULL;
|
||||
}
|
||||
|
||||
/* Cut off interface object path before "/" */
|
||||
*next_sep = '\0';
|
||||
}
|
||||
|
||||
return obj_path_only;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* wpas_dbus_error_unknown_error - Return a new InvalidArgs error message
|
||||
* @message: Pointer to incoming dbus message this error refers to
|
||||
|
|
|
@ -884,3 +884,66 @@ void wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface,
|
|||
fill_dict_with_properties(dict_iter, obj_desc->properties,
|
||||
interface, obj_desc->user_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* wpas_dbus_new_decompose_object_path - Decompose an interface object path into parts
|
||||
* @path: The dbus object path
|
||||
* @network: (out) the configured network this object path refers to, if any
|
||||
* @bssid: (out) the scanned bssid this object path refers to, if any
|
||||
* Returns: The object path of the network interface this path refers to
|
||||
*
|
||||
* For a given object path, decomposes the object path into object id, network,
|
||||
* and BSSID parts, if those parts exist.
|
||||
*/
|
||||
char *wpas_dbus_new_decompose_object_path(const char *path,
|
||||
char **network,
|
||||
char **bssid)
|
||||
{
|
||||
const unsigned int dev_path_prefix_len =
|
||||
os_strlen(WPAS_DBUS_NEW_PATH_INTERFACES "/");
|
||||
char *obj_path_only;
|
||||
char *next_sep;
|
||||
|
||||
/* Be a bit paranoid about path */
|
||||
if (!path || os_strncmp(path, WPAS_DBUS_NEW_PATH_INTERFACES "/",
|
||||
dev_path_prefix_len))
|
||||
return NULL;
|
||||
|
||||
/* Ensure there's something at the end of the path */
|
||||
if ((path + dev_path_prefix_len)[0] == '\0')
|
||||
return NULL;
|
||||
|
||||
obj_path_only = os_strdup(path);
|
||||
if (obj_path_only == NULL)
|
||||
return NULL;
|
||||
|
||||
next_sep = os_strchr(obj_path_only + dev_path_prefix_len, '/');
|
||||
if (next_sep != NULL) {
|
||||
const char *net_part = os_strstr(
|
||||
next_sep, WPAS_DBUS_NEW_NETWORKS_PART "/");
|
||||
const char *bssid_part = os_strstr(
|
||||
next_sep, WPAS_DBUS_NEW_BSSIDS_PART "/");
|
||||
|
||||
if (network && net_part) {
|
||||
/* Deal with a request for a configured network */
|
||||
const char *net_name = net_part +
|
||||
os_strlen(WPAS_DBUS_NEW_NETWORKS_PART "/");
|
||||
*network = NULL;
|
||||
if (os_strlen(net_name))
|
||||
*network = os_strdup(net_name);
|
||||
} else if (bssid && bssid_part) {
|
||||
/* Deal with a request for a scanned BSSID */
|
||||
const char *bssid_name = bssid_part +
|
||||
os_strlen(WPAS_DBUS_NEW_BSSIDS_PART "/");
|
||||
if (os_strlen(bssid_name))
|
||||
*bssid = os_strdup(bssid_name);
|
||||
else
|
||||
*bssid = NULL;
|
||||
}
|
||||
|
||||
/* Cut off interface object path before "/" */
|
||||
*next_sep = '\0';
|
||||
}
|
||||
|
||||
return obj_path_only;
|
||||
}
|
||||
|
|
|
@ -145,4 +145,8 @@ void wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface,
|
|||
DBusMessage * wpa_dbus_introspect(DBusMessage *message,
|
||||
struct wpa_dbus_object_desc *obj_dsc);
|
||||
|
||||
char *wpas_dbus_new_decompose_object_path(const char *path,
|
||||
char **network,
|
||||
char **bssid);
|
||||
|
||||
#endif /* WPA_DBUS_CTRL_H */
|
||||
|
|
Loading…
Reference in a new issue