mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-23 19:24:38 +00:00
2004-07-19 Dan Williams <dcbw@redhat.com>
* src/NetworkManagerDbus.c - Switch from indexed device paths to names. Less code, more efficient. ie "/org/freedesktop/NetworkManager/0" -> "/org/freedesktop/NetworkManager/eth0" git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@18 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
parent
32587b0ba4
commit
1e4fbdcd95
|
@ -1,3 +1,9 @@
|
|||
2004-07-19 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* src/NetworkManagerDbus.c
|
||||
- Switch from indexed device paths to names. Less code, more efficient.
|
||||
ie "/org/freedesktop/NetworkManager/0" -> "/org/freedesktop/NetworkManager/eth0"
|
||||
|
||||
2004-07-19 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* dispatcher-daemon/NetworkManagerDispatcher.c
|
||||
|
|
|
@ -65,40 +65,15 @@ static DBusMessage *nm_dbus_create_error_message (DBusMessage *message, const ch
|
|||
* Copies the object path for a device object into a provided buffer
|
||||
*
|
||||
*/
|
||||
void nm_dbus_get_object_path_from_device (NMDevice *dev, unsigned char *buf, unsigned int buf_len, gboolean lock_dev_list)
|
||||
void nm_dbus_get_object_path_from_device (NMDevice *dev, unsigned char *buf, unsigned int buf_len)
|
||||
{
|
||||
NMData *data = nm_get_global_data ();
|
||||
|
||||
g_return_if_fail (buf != NULL);
|
||||
g_return_if_fail (buf_len > 0);
|
||||
memset (buf, 0, buf_len);
|
||||
|
||||
g_return_if_fail (dev != NULL);
|
||||
g_return_if_fail (data != NULL);
|
||||
|
||||
/* Iterate over device list */
|
||||
if (!lock_dev_list || nm_try_acquire_mutex (data->dev_list_mutex, __FUNCTION__))
|
||||
{
|
||||
NMDevice *list_dev = NULL;
|
||||
GSList *element = data->dev_list;
|
||||
int i = 0;
|
||||
|
||||
while (element)
|
||||
{
|
||||
list_dev = (NMDevice *)(element->data);
|
||||
if (dev == list_dev)
|
||||
{
|
||||
snprintf (buf, buf_len-1, "%s/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, i);
|
||||
break;
|
||||
}
|
||||
|
||||
i++;
|
||||
element = g_slist_next (element);
|
||||
}
|
||||
|
||||
if (lock_dev_list)
|
||||
nm_unlock_mutex (data->dev_list_mutex, __FUNCTION__);
|
||||
}
|
||||
snprintf (buf, buf_len-1, "%s/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev));
|
||||
}
|
||||
|
||||
|
||||
|
@ -108,13 +83,11 @@ void nm_dbus_get_object_path_from_device (NMDevice *dev, unsigned char *buf, uns
|
|||
* Returns the device associated with a dbus object path
|
||||
*
|
||||
*/
|
||||
NMDevice *nm_dbus_get_device_from_object_path (const char *path, int *dev_index)
|
||||
NMDevice *nm_dbus_get_device_from_object_path (const char *path)
|
||||
{
|
||||
NMData *data = nm_get_global_data ();
|
||||
NMDevice *dev = NULL;
|
||||
|
||||
*dev_index = -1;
|
||||
|
||||
g_return_val_if_fail (path != NULL, NULL);
|
||||
g_return_val_if_fail (data != NULL, NULL);
|
||||
|
||||
|
@ -130,23 +103,17 @@ NMDevice *nm_dbus_get_device_from_object_path (const char *path, int *dev_index)
|
|||
{
|
||||
GSList *element = data->dev_list;
|
||||
char compare_path[100];
|
||||
int i = 0;
|
||||
|
||||
while (element)
|
||||
{
|
||||
snprintf (compare_path, 100, "%s/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, i);
|
||||
|
||||
/* Compare against our constructed path, but ignore any trailing elements */
|
||||
dev = (NMDevice *)(element->data);
|
||||
if (dev && (strncmp (path, compare_path, strlen (compare_path)) == 0))
|
||||
if ((dev = (NMDevice *)(element->data)))
|
||||
{
|
||||
*dev_index = i;
|
||||
break;
|
||||
}
|
||||
else
|
||||
snprintf (compare_path, 100, "%s/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev));
|
||||
/* Compare against our constructed path, but ignore any trailing elements */
|
||||
if (strncmp (path, compare_path, strlen (compare_path)) == 0)
|
||||
break;
|
||||
dev = NULL;
|
||||
|
||||
i++;
|
||||
}
|
||||
element = g_slist_next (element);
|
||||
}
|
||||
nm_unlock_mutex (data->dev_list_mutex, __FUNCTION__);
|
||||
|
@ -162,7 +129,7 @@ NMDevice *nm_dbus_get_device_from_object_path (const char *path, int *dev_index)
|
|||
* Returns the network (ap) associated with a dbus object path
|
||||
*
|
||||
*/
|
||||
NMAccessPoint *nm_dbus_get_network_from_object_path (const char *path, NMDevice *dev, int dev_index, int *ap_index)
|
||||
NMAccessPoint *nm_dbus_get_network_from_object_path (const char *path, NMDevice *dev, int *ap_index)
|
||||
{
|
||||
NMAccessPoint *ap = NULL;
|
||||
int i = 0;
|
||||
|
@ -174,7 +141,7 @@ NMAccessPoint *nm_dbus_get_network_from_object_path (const char *path, NMDevice
|
|||
|
||||
while ((ap = nm_device_ap_list_get_ap_by_index (dev, i)) != NULL)
|
||||
{
|
||||
snprintf (compare_path, 100, "%s/%d/Networks/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, dev_index, i);
|
||||
snprintf (compare_path, 100, "%s/%s/Networks/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev), i);
|
||||
if (strncmp (path, compare_path, strlen (compare_path)) == 0)
|
||||
{
|
||||
*ap_index = i;
|
||||
|
@ -200,70 +167,30 @@ static DBusMessage *nm_dbus_nm_get_active_device (DBusConnection *connection, DB
|
|||
{
|
||||
DBusMessage *reply_message = NULL;
|
||||
DBusMessageIter iter;
|
||||
NMData *data;
|
||||
NMData *data = nm_get_global_data ();
|
||||
|
||||
data = nm_get_global_data ();
|
||||
if (!data)
|
||||
{
|
||||
/* If we can't get our global data, something is really wrong... */
|
||||
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "NoGlobalData",
|
||||
"NetworkManager couldn't get its global data.");
|
||||
goto end;
|
||||
return (reply_message);
|
||||
}
|
||||
|
||||
if (!data->active_device)
|
||||
reply_message = dbus_message_new_method_return (message);
|
||||
dbus_message_iter_init (reply_message, &iter);
|
||||
|
||||
/* Construct object path of "active" device and return it */
|
||||
if (data->active_device)
|
||||
{
|
||||
reply_message = dbus_message_new_method_return (message);
|
||||
dbus_message_iter_init (reply_message, &iter);
|
||||
dbus_message_iter_append_string (&iter, "");
|
||||
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Iterate over device list and grab index of "active device" */
|
||||
if (nm_try_acquire_mutex (data->dev_list_mutex, __FUNCTION__))
|
||||
{
|
||||
GSList *element = data->dev_list;
|
||||
int i = 0;
|
||||
|
||||
while (element)
|
||||
{
|
||||
NMDevice *dev = (NMDevice *)(element->data);
|
||||
|
||||
if (dev && (dev == data->active_device))
|
||||
{
|
||||
char *object_path = g_strdup_printf ("%s/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, i);
|
||||
|
||||
reply_message = dbus_message_new_method_return (message);
|
||||
dbus_message_iter_init (reply_message, &iter);
|
||||
dbus_message_iter_append_string (&iter, object_path);
|
||||
g_free (object_path);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
i++;
|
||||
element = g_slist_next (element);
|
||||
}
|
||||
|
||||
if (!reply_message)
|
||||
{
|
||||
/* If the active device wasn't in the list, its been removed. */
|
||||
reply_message = dbus_message_new_method_return (message);
|
||||
dbus_message_iter_init (reply_message, &iter);
|
||||
dbus_message_iter_append_string (&iter, "");
|
||||
}
|
||||
|
||||
nm_unlock_mutex (data->dev_list_mutex, __FUNCTION__);
|
||||
char *object_path = g_strdup_printf ("%s/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (data->active_device));
|
||||
dbus_message_iter_append_string (&iter, object_path);
|
||||
g_free (object_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "Retry",
|
||||
"NetworkManager could not lock device list, try again.");
|
||||
}
|
||||
dbus_message_iter_append_string (&iter, "");
|
||||
|
||||
end:
|
||||
return (reply_message);
|
||||
return (reply_message);
|
||||
}
|
||||
|
||||
|
||||
|
@ -305,7 +232,6 @@ static DBusMessage *nm_dbus_nm_get_devices (DBusConnection *connection, DBusMess
|
|||
if (nm_try_acquire_mutex (data->dev_list_mutex, __FUNCTION__))
|
||||
{
|
||||
GSList *element = data->dev_list;
|
||||
int i = 0;
|
||||
gboolean appended = FALSE;
|
||||
|
||||
reply_message = dbus_message_new_method_return (message);
|
||||
|
@ -318,13 +244,11 @@ static DBusMessage *nm_dbus_nm_get_devices (DBusConnection *connection, DBusMess
|
|||
|
||||
if (dev)
|
||||
{
|
||||
char *object_path = g_strdup_printf ("%s/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, i);
|
||||
char *object_path = g_strdup_printf ("%s/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev));
|
||||
dbus_message_iter_append_string (&iter_array, object_path);
|
||||
g_free (object_path);
|
||||
appended = TRUE;
|
||||
}
|
||||
|
||||
i++;
|
||||
element = g_slist_next (element);
|
||||
}
|
||||
|
||||
|
@ -373,7 +297,7 @@ void nm_dbus_signal_device_no_longer_active (DBusConnection *connection, NMDevic
|
|||
return;
|
||||
}
|
||||
|
||||
nm_dbus_get_object_path_from_device (dev, object_path, 100, FALSE);
|
||||
nm_dbus_get_object_path_from_device (dev, object_path, 100);
|
||||
dbus_message_append_args (message, DBUS_TYPE_STRING, object_path, DBUS_TYPE_INVALID);
|
||||
g_free (object_path);
|
||||
|
||||
|
@ -402,7 +326,7 @@ void nm_dbus_signal_device_now_active (DBusConnection *connection, NMDevice *dev
|
|||
return;
|
||||
}
|
||||
|
||||
nm_dbus_get_object_path_from_device (dev, object_path, 100, FALSE);
|
||||
nm_dbus_get_object_path_from_device (dev, object_path, 100);
|
||||
dbus_message_append_args (message, DBUS_TYPE_STRING, object_path, DBUS_TYPE_INVALID);
|
||||
g_free (object_path);
|
||||
|
||||
|
@ -431,7 +355,7 @@ void nm_dbus_signal_device_ip4_address_change (DBusConnection *connection, NMDev
|
|||
return;
|
||||
}
|
||||
|
||||
nm_dbus_get_object_path_from_device (dev, object_path, 100, FALSE);
|
||||
nm_dbus_get_object_path_from_device (dev, object_path, 100);
|
||||
dbus_message_append_args (message, DBUS_TYPE_STRING, object_path, DBUS_TYPE_INVALID);
|
||||
g_free (object_path);
|
||||
|
||||
|
@ -618,14 +542,14 @@ void nm_dbus_cancel_get_user_key_for_network (DBusConnection *connection)
|
|||
*
|
||||
*/
|
||||
static DBusMessage *nm_dbus_devices_handle_networks_request (DBusConnection *connection, DBusMessage *message,
|
||||
const char *path, const char *request, NMDevice *dev, int dev_index)
|
||||
const char *path, const char *request, NMDevice *dev)
|
||||
{
|
||||
NMAccessPoint *ap;
|
||||
DBusMessage *reply_message = NULL;
|
||||
DBusMessageIter iter;
|
||||
int ap_index;
|
||||
|
||||
ap = nm_dbus_get_network_from_object_path (path, dev, dev_index, &ap_index);
|
||||
ap = nm_dbus_get_network_from_object_path (path, dev, &ap_index);
|
||||
if (!ap || (ap_index == -1))
|
||||
{
|
||||
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "NetworkNotFound",
|
||||
|
@ -678,11 +602,9 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection,
|
|||
NMDevice *dev;
|
||||
DBusMessage *reply_message = NULL;
|
||||
DBusMessageIter iter;
|
||||
int dev_index;
|
||||
char *object_path;
|
||||
|
||||
dev = nm_dbus_get_device_from_object_path (path, &dev_index);
|
||||
if (!dev || (dev_index == -1))
|
||||
if (!(dev = nm_dbus_get_device_from_object_path (path)))
|
||||
{
|
||||
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "DeviceNotFound",
|
||||
"The requested network device does not exist.");
|
||||
|
@ -690,11 +612,11 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection,
|
|||
}
|
||||
|
||||
/* Test whether or not the _networks_ of a device were queried instead of the device itself */
|
||||
object_path = g_strdup_printf ("%s/%d/Networks/", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, dev_index);
|
||||
object_path = g_strdup_printf ("%s/%s/Networks/", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev));
|
||||
if (strncmp (path, object_path, strlen (object_path)) == 0)
|
||||
{
|
||||
free (object_path);
|
||||
reply_message = nm_dbus_devices_handle_networks_request (connection, message, path, request, dev, dev_index);
|
||||
reply_message = nm_dbus_devices_handle_networks_request (connection, message, path, request, dev);
|
||||
return (reply_message);
|
||||
}
|
||||
free (object_path);
|
||||
|
@ -717,7 +639,7 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection,
|
|||
{
|
||||
if (nm_null_safe_strcmp (nm_ap_get_essid (ap), nm_device_get_essid (dev)) == 0)
|
||||
{
|
||||
object_path = g_strdup_printf ("%s/%d/Networks/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, dev_index, i);
|
||||
object_path = g_strdup_printf ("%s/%s/Networks/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev), i);
|
||||
dbus_message_iter_append_string (&iter, object_path);
|
||||
g_free (object_path);
|
||||
break;
|
||||
|
@ -740,7 +662,7 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection,
|
|||
|
||||
while ((ap = nm_device_ap_list_get_ap_by_index (dev, i)) != NULL)
|
||||
{
|
||||
object_path = g_strdup_printf ("%s/%d/Networks/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, dev_index, i);
|
||||
object_path = g_strdup_printf ("%s/%s/Networks/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev), i);
|
||||
dbus_message_iter_append_string (&iter_array, object_path);
|
||||
g_free (object_path);
|
||||
|
||||
|
|
Loading…
Reference in a new issue