mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-08 14:48:10 +02: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
2 changed files with 40 additions and 112 deletions
|
|
@ -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>
|
2004-07-19 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
* dispatcher-daemon/NetworkManagerDispatcher.c
|
* 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
|
* 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 != NULL);
|
||||||
g_return_if_fail (buf_len > 0);
|
g_return_if_fail (buf_len > 0);
|
||||||
memset (buf, 0, buf_len);
|
memset (buf, 0, buf_len);
|
||||||
|
|
||||||
g_return_if_fail (dev != NULL);
|
g_return_if_fail (dev != NULL);
|
||||||
g_return_if_fail (data != NULL);
|
|
||||||
|
|
||||||
/* Iterate over device list */
|
snprintf (buf, buf_len-1, "%s/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev));
|
||||||
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__);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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
|
* 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 ();
|
NMData *data = nm_get_global_data ();
|
||||||
NMDevice *dev = NULL;
|
NMDevice *dev = NULL;
|
||||||
|
|
||||||
*dev_index = -1;
|
|
||||||
|
|
||||||
g_return_val_if_fail (path != NULL, NULL);
|
g_return_val_if_fail (path != NULL, NULL);
|
||||||
g_return_val_if_fail (data != 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;
|
GSList *element = data->dev_list;
|
||||||
char compare_path[100];
|
char compare_path[100];
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while (element)
|
while (element)
|
||||||
{
|
{
|
||||||
snprintf (compare_path, 100, "%s/%d", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, i);
|
if ((dev = (NMDevice *)(element->data)))
|
||||||
|
|
||||||
/* Compare against our constructed path, but ignore any trailing elements */
|
|
||||||
dev = (NMDevice *)(element->data);
|
|
||||||
if (dev && (strncmp (path, compare_path, strlen (compare_path)) == 0))
|
|
||||||
{
|
{
|
||||||
*dev_index = i;
|
snprintf (compare_path, 100, "%s/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (dev));
|
||||||
break;
|
/* Compare against our constructed path, but ignore any trailing elements */
|
||||||
}
|
if (strncmp (path, compare_path, strlen (compare_path)) == 0)
|
||||||
else
|
break;
|
||||||
dev = NULL;
|
dev = NULL;
|
||||||
|
}
|
||||||
i++;
|
|
||||||
element = g_slist_next (element);
|
element = g_slist_next (element);
|
||||||
}
|
}
|
||||||
nm_unlock_mutex (data->dev_list_mutex, __FUNCTION__);
|
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
|
* 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;
|
NMAccessPoint *ap = NULL;
|
||||||
int i = 0;
|
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)
|
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)
|
if (strncmp (path, compare_path, strlen (compare_path)) == 0)
|
||||||
{
|
{
|
||||||
*ap_index = i;
|
*ap_index = i;
|
||||||
|
|
@ -200,70 +167,30 @@ static DBusMessage *nm_dbus_nm_get_active_device (DBusConnection *connection, DB
|
||||||
{
|
{
|
||||||
DBusMessage *reply_message = NULL;
|
DBusMessage *reply_message = NULL;
|
||||||
DBusMessageIter iter;
|
DBusMessageIter iter;
|
||||||
NMData *data;
|
NMData *data = nm_get_global_data ();
|
||||||
|
|
||||||
data = nm_get_global_data ();
|
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
/* If we can't get our global data, something is really wrong... */
|
/* 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",
|
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "NoGlobalData",
|
||||||
"NetworkManager couldn't get its global data.");
|
"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);
|
char *object_path = g_strdup_printf ("%s/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX, nm_device_get_iface (data->active_device));
|
||||||
dbus_message_iter_init (reply_message, &iter);
|
dbus_message_iter_append_string (&iter, object_path);
|
||||||
dbus_message_iter_append_string (&iter, "");
|
g_free (object_path);
|
||||||
|
|
||||||
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__);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
dbus_message_iter_append_string (&iter, "");
|
||||||
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "Retry",
|
|
||||||
"NetworkManager could not lock device list, try again.");
|
|
||||||
}
|
|
||||||
|
|
||||||
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__))
|
if (nm_try_acquire_mutex (data->dev_list_mutex, __FUNCTION__))
|
||||||
{
|
{
|
||||||
GSList *element = data->dev_list;
|
GSList *element = data->dev_list;
|
||||||
int i = 0;
|
|
||||||
gboolean appended = FALSE;
|
gboolean appended = FALSE;
|
||||||
|
|
||||||
reply_message = dbus_message_new_method_return (message);
|
reply_message = dbus_message_new_method_return (message);
|
||||||
|
|
@ -318,13 +244,11 @@ static DBusMessage *nm_dbus_nm_get_devices (DBusConnection *connection, DBusMess
|
||||||
|
|
||||||
if (dev)
|
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);
|
dbus_message_iter_append_string (&iter_array, object_path);
|
||||||
g_free (object_path);
|
g_free (object_path);
|
||||||
appended = TRUE;
|
appended = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
i++;
|
|
||||||
element = g_slist_next (element);
|
element = g_slist_next (element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -373,7 +297,7 @@ void nm_dbus_signal_device_no_longer_active (DBusConnection *connection, NMDevic
|
||||||
return;
|
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);
|
dbus_message_append_args (message, DBUS_TYPE_STRING, object_path, DBUS_TYPE_INVALID);
|
||||||
g_free (object_path);
|
g_free (object_path);
|
||||||
|
|
||||||
|
|
@ -402,7 +326,7 @@ void nm_dbus_signal_device_now_active (DBusConnection *connection, NMDevice *dev
|
||||||
return;
|
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);
|
dbus_message_append_args (message, DBUS_TYPE_STRING, object_path, DBUS_TYPE_INVALID);
|
||||||
g_free (object_path);
|
g_free (object_path);
|
||||||
|
|
||||||
|
|
@ -431,7 +355,7 @@ void nm_dbus_signal_device_ip4_address_change (DBusConnection *connection, NMDev
|
||||||
return;
|
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);
|
dbus_message_append_args (message, DBUS_TYPE_STRING, object_path, DBUS_TYPE_INVALID);
|
||||||
g_free (object_path);
|
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,
|
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;
|
NMAccessPoint *ap;
|
||||||
DBusMessage *reply_message = NULL;
|
DBusMessage *reply_message = NULL;
|
||||||
DBusMessageIter iter;
|
DBusMessageIter iter;
|
||||||
int ap_index;
|
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))
|
if (!ap || (ap_index == -1))
|
||||||
{
|
{
|
||||||
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "NetworkNotFound",
|
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;
|
NMDevice *dev;
|
||||||
DBusMessage *reply_message = NULL;
|
DBusMessage *reply_message = NULL;
|
||||||
DBusMessageIter iter;
|
DBusMessageIter iter;
|
||||||
int dev_index;
|
|
||||||
char *object_path;
|
char *object_path;
|
||||||
|
|
||||||
dev = nm_dbus_get_device_from_object_path (path, &dev_index);
|
if (!(dev = nm_dbus_get_device_from_object_path (path)))
|
||||||
if (!dev || (dev_index == -1))
|
|
||||||
{
|
{
|
||||||
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "DeviceNotFound",
|
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "DeviceNotFound",
|
||||||
"The requested network device does not exist.");
|
"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 */
|
/* 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)
|
if (strncmp (path, object_path, strlen (object_path)) == 0)
|
||||||
{
|
{
|
||||||
free (object_path);
|
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);
|
return (reply_message);
|
||||||
}
|
}
|
||||||
free (object_path);
|
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)
|
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);
|
dbus_message_iter_append_string (&iter, object_path);
|
||||||
g_free (object_path);
|
g_free (object_path);
|
||||||
break;
|
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)
|
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);
|
dbus_message_iter_append_string (&iter_array, object_path);
|
||||||
g_free (object_path);
|
g_free (object_path);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue