2004-07-24 Dan Williams <dcbw@redhat.com>

* src/NetworkManager.[ch]
	  src/NetworkManagerDbus.[ch]
	  src/NetworkManagerDevice.[ch]
	  src/NetworkManagerPolicy.c
	  src/NetworkManagerWireless.[ch]
		- Add many more g_return_if_fail()/g_return_val_if_fail() checks
		- Pass the NMData application data structure through all calls
			that need it so we can get rid of nm_get_global_data()
		- Change deallocation of the allowed_ap_list GSList in preparation
			for not completely clearing it every time we get an update,
			but instead getting incremental updates via GConf/dbus


git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@20 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams 2004-07-25 02:40:19 +00:00
parent 846858e487
commit 8ae95bf594
10 changed files with 187 additions and 153 deletions

View file

@ -1,3 +1,17 @@
2004-07-24 Dan Williams <dcbw@redhat.com>
* src/NetworkManager.[ch]
src/NetworkManagerDbus.[ch]
src/NetworkManagerDevice.[ch]
src/NetworkManagerPolicy.c
src/NetworkManagerWireless.[ch]
- Add many more g_return_if_fail()/g_return_val_if_fail() checks
- Pass the NMData application data structure through all calls
that need it so we can get rid of nm_get_global_data()
- Change deallocation of the allowed_ap_list GSList in preparation
for not completely clearing it every time we get an update,
but instead getting incremental updates via GConf/dbus
2004-07-22 Dan Williams <dcbw@redhat.com>
* configure.in

View file

@ -78,7 +78,7 @@ NMDevice * nm_create_device_and_add_to_list (NMData *data, const char *udi)
return (NULL);
}
dev = nm_device_new (iface_name);
dev = nm_device_new (iface_name, data);
if (dev)
{
@ -287,7 +287,7 @@ static void nm_add_current_devices (NMData *data)
gboolean nm_link_state_monitor (gpointer user_data)
{
NMData *data = (NMData *)user_data;
GSList *element;
GSList *element;
g_return_val_if_fail (data != NULL, TRUE);
@ -349,38 +349,6 @@ gboolean nm_link_state_monitor (gpointer user_data)
}
/*
* nm_data_allowed_ap_list_free
*
* Frees the allowed access point list
*
*/
void nm_data_allowed_ap_list_free (NMData *data)
{
GSList *element;
g_return_if_fail (data != NULL);
if (!data->allowed_ap_list)
return;
element = data->allowed_ap_list;
while (element)
{
if (element->data)
{
nm_ap_unref (element->data);
element->data = NULL;
}
element = g_slist_next (element);
}
g_slist_free (data->allowed_ap_list);
data->allowed_ap_list = NULL;
}
/*
* libhal callback function structure
*/
@ -446,6 +414,19 @@ static NMData *nm_data_new (void)
}
/*
* nm_data_allowed_ap_list_element_free
*
* Frees each member of the allowed access point list before the list is
* disposed of.
*
*/
static void nm_data_allowed_ap_list_element_free (void *element, void *user_data)
{
nm_ap_unref (element);
}
/*
* nm_data_dev_list_element_free
*
@ -469,27 +450,19 @@ static void nm_data_free (NMData *data)
{
g_return_if_fail (data != NULL);
g_slist_foreach (data->dev_list, nm_data_dev_list_element_free, NULL);
g_slist_free (data->dev_list);
g_mutex_free (data->dev_list_mutex);
nm_device_unref (data->active_device);
nm_device_unref (data->pending_device);
nm_data_allowed_ap_list_free (data);
g_slist_foreach (data->dev_list, nm_data_dev_list_element_free, NULL);
g_slist_free (data->dev_list);
g_mutex_free (data->dev_list_mutex);
g_slist_foreach (data->allowed_ap_list, nm_data_allowed_ap_list_element_free, NULL);
g_slist_free (data->allowed_ap_list);
g_mutex_free (data->allowed_ap_list_mutex);
}
/*
* nm_get_global_data
*
* Return the global data structure
*
*/
NMData * nm_get_global_data (void)
{
return (nm_data);
}
/*
* nm_data_set_state_modified
*
@ -645,7 +618,7 @@ int main( int argc, char *argv[] )
allowed_ap_thread = g_thread_create (nm_policy_allowed_ap_refresh_worker, nm_data, FALSE, NULL);
/* Create our dbus service */
nm_data->dbus_connection = nm_dbus_init ();
nm_data->dbus_connection = nm_dbus_init (nm_data);
if (nm_data->dbus_connection)
{
/* Create a watch function that monitors cards for link status (hal doesn't do

View file

@ -45,8 +45,4 @@ typedef struct NMData NMData;
void nm_data_set_state_modified (NMData *data, gboolean modified);
void nm_data_allowed_ap_list_free (NMData *data);
NMData *nm_get_global_data (void);
#endif

View file

@ -83,9 +83,8 @@ 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)
NMDevice *nm_dbus_get_device_from_object_path (NMData *data, const char *path)
{
NMData *data = nm_get_global_data ();
NMDevice *dev = NULL;
g_return_val_if_fail (path != NULL, NULL);
@ -136,6 +135,7 @@ NMAccessPoint *nm_dbus_get_network_from_object_path (const char *path, NMDevice
char compare_path[100];
g_return_val_if_fail (path != NULL, NULL);
g_return_val_if_fail (dev != NULL, NULL);
while ((ap = nm_device_ap_list_get_ap_by_index (dev, i)) != NULL)
{
@ -157,21 +157,19 @@ NMAccessPoint *nm_dbus_get_network_from_object_path (const char *path, NMDevice
* Returns the object path of the currently active device
*
*/
static DBusMessage *nm_dbus_nm_get_active_device (DBusConnection *connection, DBusMessage *message)
static DBusMessage *nm_dbus_nm_get_active_device (DBusConnection *connection, DBusMessage *message, NMData *data)
{
DBusMessage *reply_message = NULL;
DBusMessageIter iter;
NMData *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.");
return (reply_message);
}
g_return_val_if_fail (data != NULL, NULL);
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (message != NULL, NULL);
reply_message = dbus_message_new_method_return (message);
if (!reply_message)
return (NULL);
dbus_message_iter_init (reply_message, &iter);
/* Construct object path of "active" device and return it */
@ -195,30 +193,27 @@ static DBusMessage *nm_dbus_nm_get_active_device (DBusConnection *connection, DB
* devices in the device list.
*
*/
static DBusMessage *nm_dbus_nm_get_devices (DBusConnection *connection, DBusMessage *message)
static DBusMessage *nm_dbus_nm_get_devices (DBusConnection *connection, DBusMessage *message, NMData *data)
{
DBusMessage *reply_message = NULL;
DBusMessageIter iter;
DBusMessageIter iter_array;
NMData *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;
}
g_return_val_if_fail (data != NULL, NULL);
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (message != NULL, NULL);
reply_message = dbus_message_new_method_return (message);
if (!reply_message)
return (NULL);
dbus_message_iter_init (reply_message, &iter);
dbus_message_iter_append_array (&iter, &iter_array, DBUS_TYPE_STRING);
/* Check for no devices */
if (!data->dev_list)
{
reply_message = dbus_message_new_method_return (message);
dbus_message_iter_init (reply_message, &iter);
dbus_message_iter_append_array (&iter, &iter_array, DBUS_TYPE_STRING);
dbus_message_iter_append_string (&iter_array, "");
goto end;
}
@ -228,10 +223,6 @@ static DBusMessage *nm_dbus_nm_get_devices (DBusConnection *connection, DBusMess
GSList *element = data->dev_list;
gboolean appended = FALSE;
reply_message = dbus_message_new_method_return (message);
dbus_message_iter_init (reply_message, &iter);
dbus_message_iter_append_array (&iter, &iter_array, DBUS_TYPE_STRING);
while (element)
{
NMDevice *dev = (NMDevice *)(element->data);
@ -282,6 +273,8 @@ void nm_dbus_signal_device_no_longer_active (DBusConnection *connection, NMDevic
DBusMessage *message;
unsigned char *object_path = g_new0 (unsigned char, 100);
g_return_if_fail (connection != NULL);
g_return_if_fail (dev != NULL);
g_return_if_fail (object_path != NULL);
message = dbus_message_new_signal (NM_DBUS_NM_OBJECT_PATH_PREFIX, NM_DBUS_NM_NAMESPACE, "DeviceNoLongerActive");
@ -313,6 +306,9 @@ void nm_dbus_signal_device_now_active (DBusConnection *connection, NMDevice *dev
DBusMessage *message;
unsigned char *object_path = g_new0 (unsigned char, 100);
g_return_if_fail (connection != NULL);
g_return_if_fail (dev != NULL);
message = dbus_message_new_signal (NM_DBUS_NM_OBJECT_PATH_PREFIX, NM_DBUS_NM_NAMESPACE, "DeviceNowActive");
if (!message)
{
@ -342,6 +338,9 @@ void nm_dbus_signal_device_ip4_address_change (DBusConnection *connection, NMDev
DBusMessage *message;
unsigned char *object_path = g_new0 (unsigned char, 100);
g_return_if_fail (connection != NULL);
g_return_if_fail (dev != NULL);
message = dbus_message_new_signal (NM_DBUS_NM_OBJECT_PATH_PREFIX, NM_DBUS_NM_NAMESPACE, "DeviceIP4AddressChange");
if (!message)
{
@ -415,6 +414,7 @@ void nm_dbus_get_user_key_for_network (DBusConnection *connection, NMDevice *dev
DBusMessage *message;
DBusMessageIter iter;
g_return_if_fail (connection != NULL);
g_return_if_fail (dev != NULL);
g_return_if_fail (ap != NULL);
g_return_if_fail (nm_ap_get_essid (ap) != NULL);
@ -463,7 +463,7 @@ void nm_dbus_get_user_key_for_network (DBusConnection *connection, NMDevice *dev
* for a particular wireless AP/network
*
*/
static void nm_dbus_set_user_key_for_network (DBusConnection *connection, DBusMessage *message)
static void nm_dbus_set_user_key_for_network (DBusConnection *connection, DBusMessage *message, NMData *data)
{
DBusMessageIter iter;
char *device;
@ -471,6 +471,10 @@ static void nm_dbus_set_user_key_for_network (DBusConnection *connection, DBusMe
char *passphrase;
char *dbus_string;
g_return_if_fail (data != NULL);
g_return_if_fail (connection != NULL);
g_return_if_fail (message != NULL);
dbus_message_iter_init (message, &iter);
/* Grab device */
@ -490,10 +494,8 @@ static void nm_dbus_set_user_key_for_network (DBusConnection *connection, DBusMe
if (device && network && passphrase)
{
NMData *data = nm_get_global_data();
NMDevice *dev = nm_get_device_by_iface (data, device);
if (dev)
NMDevice *dev;
if ((dev = nm_get_device_by_iface (data, device)))
nm_device_pending_action_set_user_key (dev, passphrase);
}
@ -512,6 +514,8 @@ void nm_dbus_cancel_get_user_key_for_network (DBusConnection *connection)
{
DBusMessage *message;
g_return_if_fail (connection != NULL);
message = dbus_message_new_method_call ("org.freedesktop.NetworkManagerInfo",
"/org/freedesktop/NetworkManagerInfo",
"org.freedesktop.NetworkManagerInfo",
@ -529,6 +533,24 @@ void nm_dbus_cancel_get_user_key_for_network (DBusConnection *connection)
}
/*
* nm_dbus_nmi_filter
*
* Respond to NetworkManagerInfo signals about changing Allowed Networks
*
*/
static DBusHandlerResult nm_dbus_nmi_filter (DBusConnection *connection, DBusMessage *message, void *user_data)
{
NMData *data = (NMData *)user_data;
g_return_val_if_fail (data != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
return (DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
}
/*
* nm_dbus_devices_handle_networks_request
*
@ -536,14 +558,20 @@ 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)
NMData *data, const char *path, const char *request, NMDevice *dev)
{
NMAccessPoint *ap;
DBusMessage *reply_message = NULL;
DBusMessageIter iter;
ap = nm_dbus_get_network_from_object_path (path, dev);
if (!ap)
g_return_val_if_fail (data != NULL, NULL);
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (message != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
g_return_val_if_fail (request != NULL, NULL);
g_return_val_if_fail (dev != NULL, NULL);
if (!(ap = nm_dbus_get_network_from_object_path (path, dev)))
{
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "NetworkNotFound",
"The requested network does not exist for this device.");
@ -551,6 +579,8 @@ static DBusMessage *nm_dbus_devices_handle_networks_request (DBusConnection *con
}
reply_message = dbus_message_new_method_return (message);
if (!reply_message)
return (NULL);
dbus_message_iter_init (reply_message, &iter);
if (strcmp ("getName", request) == 0)
@ -590,14 +620,21 @@ static DBusMessage *nm_dbus_devices_handle_networks_request (DBusConnection *con
* Converts a property request into a dbus message.
*
*/
static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection, DBusMessage *message, const char *path, const char *request)
static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection, NMData *data, DBusMessage *message,
const char *path, const char *request)
{
NMDevice *dev;
DBusMessage *reply_message = NULL;
DBusMessageIter iter;
char *object_path;
if (!(dev = nm_dbus_get_device_from_object_path (path)))
g_return_val_if_fail (data != NULL, NULL);
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (message != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
g_return_val_if_fail (request != NULL, NULL);
if (!(dev = nm_dbus_get_device_from_object_path (data, path)))
{
reply_message = nm_dbus_create_error_message (message, NM_DBUS_NM_NAMESPACE, "DeviceNotFound",
"The requested network device does not exist.");
@ -609,12 +646,14 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection,
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);
reply_message = nm_dbus_devices_handle_networks_request (connection, message, data, path, request, dev);
return (reply_message);
}
free (object_path);
reply_message = dbus_message_new_method_return (message);
if (!reply_message)
return (NULL);
dbus_message_iter_init (reply_message, &iter);
if (strcmp ("getName", request) == 0)
@ -625,9 +664,8 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection,
dbus_message_iter_append_uint32 (&iter, nm_device_get_ip4_address (dev));
else if (strcmp ("getActiveNetwork", request) == 0)
{
NMAccessPoint *ap = nm_device_ap_list_get_ap_by_essid (dev, nm_device_get_essid (dev));
if (ap)
NMAccessPoint *ap;
if ((ap = nm_device_ap_list_get_ap_by_essid (dev, nm_device_get_essid (dev))))
{
object_path = g_strdup_printf ("%s/%s/Networks/%s", NM_DBUS_DEVICES_OBJECT_PATH_PREFIX,
nm_device_get_iface (dev), nm_ap_get_essid (ap));
@ -673,22 +711,27 @@ static DBusMessage *nm_dbus_devices_handle_request (DBusConnection *connection,
*/
static DBusHandlerResult nm_dbus_nm_message_handler (DBusConnection *connection, DBusMessage *message, void *user_data)
{
NMData *data = (NMData *)user_data;
const char *method;
const char *path;
DBusMessage *reply_message = NULL;
gboolean handled = TRUE;
g_return_val_if_fail (data != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
method = dbus_message_get_member (message);
path = dbus_message_get_path (message);
NM_DEBUG_PRINT_2 ("nm_dbus_nm_message_handler() got method %s for path %s\n", method, path);
if (strcmp ("getActiveDevice", method) == 0)
reply_message = nm_dbus_nm_get_active_device (connection, message);
reply_message = nm_dbus_nm_get_active_device (connection, message, data);
else if (strcmp ("getDevices", method) == 0)
reply_message = nm_dbus_nm_get_devices (connection, message);
reply_message = nm_dbus_nm_get_devices (connection, message, data);
else if (strcmp ("setKeyForNetwork", method) == 0)
nm_dbus_set_user_key_for_network (connection, message);
nm_dbus_set_user_key_for_network (connection, message, data);
else
handled = FALSE;
@ -722,21 +765,27 @@ void nm_dbus_nm_unregister_handler (DBusConnection *connection, void *user_data)
*/
static DBusHandlerResult nm_dbus_devices_message_handler (DBusConnection *connection, DBusMessage *message, void *user_data)
{
NMData *data = (NMData *)user_data;
gboolean handled = FALSE;
const char *method;
const char *path;
DBusMessage *reply_message = NULL;
g_return_val_if_fail (data != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
method = dbus_message_get_member (message);
path = dbus_message_get_path (message);
if ((reply_message = nm_dbus_devices_handle_request (connection, message, path, method)))
if ((reply_message = nm_dbus_devices_handle_request (connection, data, message, path, method)))
{
dbus_connection_send (connection, reply_message, NULL);
dbus_message_unref (reply_message);
return (DBUS_HANDLER_RESULT_HANDLED);
handled = TRUE;
}
return (DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
return (handled ? DBUS_HANDLER_RESULT_HANDLED : DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
}
@ -758,11 +807,11 @@ void nm_dbus_devices_unregister_handler (DBusConnection *connection, void *user_
* Connect to the system messagebus and register ourselves as a service.
*
*/
DBusConnection *nm_dbus_init (void)
DBusConnection *nm_dbus_init (NMData *data)
{
DBusError dbus_error;
dbus_bool_t success;
DBusConnection *dbus_connection;
DBusConnection *connection;
DBusObjectPathVTable nm_vtable = { &nm_dbus_nm_unregister_handler, &nm_dbus_nm_message_handler, NULL, NULL, NULL, NULL };
const char *nm_path[] = { "org", "freedesktop", "NetworkManager", NULL };
DBusObjectPathVTable devices_vtable = { &nm_dbus_devices_unregister_handler, &nm_dbus_devices_message_handler, NULL, NULL, NULL, NULL };
@ -771,35 +820,44 @@ DBusConnection *nm_dbus_init (void)
dbus_connection_set_change_sigpipe (TRUE);
dbus_error_init (&dbus_error);
dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &dbus_error);
if (dbus_connection == NULL)
connection = dbus_bus_get (DBUS_BUS_SYSTEM, &dbus_error);
if (connection == NULL)
{
NM_DEBUG_PRINT ("nm_dbus_init() could not get the system bus. Make sure the message bus daemon is running?\n");
return (NULL);
}
dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
dbus_connection_setup_with_g_main (dbus_connection, NULL);
dbus_bus_acquire_service (dbus_connection, NM_DBUS_NM_NAMESPACE, 0, &dbus_error);
dbus_connection_set_exit_on_disconnect (connection, FALSE);
dbus_connection_setup_with_g_main (connection, NULL);
dbus_bus_acquire_service (connection, NM_DBUS_NM_NAMESPACE, 0, &dbus_error);
if (dbus_error_is_set (&dbus_error))
{
NM_DEBUG_PRINT_1 ("nm_dbus_init() could not acquire its service. dbus_bus_acquire_service() says: '%s'\n", dbus_error.message);
return (NULL);
}
success = dbus_connection_register_object_path (dbus_connection, nm_path, &nm_vtable, NULL);
success = dbus_connection_register_object_path (connection, nm_path, &nm_vtable, data);
if (!success)
{
NM_DEBUG_PRINT ("nm_dbus_init() could not register a handler for NetworkManager. Not enough memory?\n");
return (NULL);
}
success = dbus_connection_register_fallback (dbus_connection, devices_path, &devices_vtable, NULL);
success = dbus_connection_register_fallback (connection, devices_path, &devices_vtable, data);
if (!success)
{
NM_DEBUG_PRINT ("nm_dbus_init() could not register a handler for NetworkManager devices. Not enough memory?\n");
return (NULL);
}
return (dbus_connection);
if (!dbus_connection_add_filter (connection, nm_dbus_nmi_filter, data, NULL))
return (NULL);
dbus_bus_add_match (connection,
"type='signal',"
"interface='org.freedesktop.NetworkManagerInfo',"
"sender='org.freedesktop.NetworkManagerInfo',"
"path='/org/freedesktop/NetworkManagerInfo'", &dbus_error);
return (connection);
}

View file

@ -32,7 +32,7 @@
#define NM_DBUS_DEVICES_NAMESPACE "org.freedesktop.NetworkManager.Devices"
DBusConnection * nm_dbus_init (void);
DBusConnection * nm_dbus_init (NMData *data);
void nm_dbus_signal_device_no_longer_active (DBusConnection *connection, NMDevice *dev);

View file

@ -211,6 +211,7 @@ struct NMDevice
NMPendingAction pending_action;
NMPendingActionOptions pending_action_options;
guint32 ip4_address;
NMData *app_data;
/* FIXME: ipv6 address too */
NMDeviceOptions dev_options;
};
@ -222,7 +223,7 @@ struct NMDevice
* Creates and initializes the structure representation of an NLM device.
*
*/
NMDevice *nm_device_new (const char *iface)
NMDevice *nm_device_new (const char *iface, NMData *app_data)
{
NMDevice *dev;
@ -236,6 +237,7 @@ NMDevice *nm_device_new (const char *iface)
}
dev->refcount = 1;
dev->app_data = app_data;
dev->iface = g_strdup (iface);
dev->iface_type = nm_device_test_wireless_extensions (dev) ?
NM_IFACE_TYPE_WIRELESS_ETHERNET : NM_IFACE_TYPE_WIRED_ETHERNET;
@ -397,6 +399,7 @@ void nm_device_update_link_active (NMDevice *dev, gboolean check_mii)
gboolean link_active = FALSE;
g_return_if_fail (dev != NULL);
g_return_if_fail (dev->app_data != NULL);
/* FIXME
* For wireless cards, the best indicator of a "link" at this time
@ -428,8 +431,8 @@ void nm_device_update_link_active (NMDevice *dev, gboolean check_mii)
if (check_mii)
link_active = mii_get_link (dev);
else
if (hal_device_property_exists (nm_get_global_data()->hal_ctx, nm_device_get_udi (dev), "net.ethernet.link"))
link_active = hal_device_get_property_bool (nm_get_global_data()->hal_ctx, nm_device_get_udi (dev), "net.ethernet.link");
if (hal_device_property_exists (dev->app_data->hal_ctx, nm_device_get_udi (dev), "net.ethernet.link"))
link_active = hal_device_get_property_bool (dev->app_data->hal_ctx, nm_device_get_udi (dev), "net.ethernet.link");
break;
}
@ -442,7 +445,7 @@ void nm_device_update_link_active (NMDevice *dev, gboolean check_mii)
if (link_active != nm_device_get_link_active (dev))
{
nm_device_set_link_active (dev, link_active);
nm_data_set_state_modified (nm_get_global_data(), TRUE);
nm_data_set_state_modified (dev->app_data, TRUE);
}
}
@ -634,13 +637,12 @@ guint32 nm_device_get_ip4_address(NMDevice *dev)
void nm_device_update_ip4_address (NMDevice *dev)
{
NMData *data = nm_get_global_data ();
guint32 new_address;
struct ifreq req;
int socket;
g_return_if_fail (data != NULL);
g_return_if_fail (dev != NULL);
g_return_if_fail (dev->app_data != NULL);
g_return_if_fail (nm_device_get_iface (dev) != NULL);
socket = nm_get_network_control_socket ();
@ -656,7 +658,7 @@ void nm_device_update_ip4_address (NMDevice *dev)
/* If the new address is different, send an IP4AddressChanged signal on the bus */
if (new_address != nm_device_get_ip4_address (dev))
{
nm_dbus_signal_device_ip4_address_change (data->dbus_connection, dev);
nm_dbus_signal_device_ip4_address_change (dev->app_data->dbus_connection, dev);
dev->ip4_address = new_address;
}
}
@ -775,12 +777,11 @@ gboolean nm_device_activate (NMDevice *dev)
unsigned char *iface;
unsigned char hostname[100] = "\0";
int host_err;
NMData *data = nm_get_global_data ();
int dhclient_err;
FILE *pidfile;
g_return_val_if_fail (dev != NULL, FALSE);
g_return_val_if_fail (data != NULL, FALSE);
g_return_val_if_fail (dev->app_data != NULL, FALSE);
/* If its a wireless device, set the ESSID and WEP key */
if (nm_device_is_wireless (dev))
@ -901,7 +902,7 @@ gboolean nm_device_activate (NMDevice *dev)
system (buf);
}
nm_dbus_signal_device_now_active (data->dbus_connection, dev);
nm_dbus_signal_device_now_active (dev->app_data->dbus_connection, dev);
nm_device_update_ip4_address (dev);
return (success);
@ -919,10 +920,9 @@ gboolean nm_device_deactivate (NMDevice *dev, gboolean just_added)
unsigned char buf[500];
unsigned char *iface;
gboolean success = FALSE;
NMData *data = nm_get_global_data ();
g_return_val_if_fail (dev != NULL, FALSE);
g_return_val_if_fail (data != NULL, FALSE);
g_return_val_if_fail (dev->app_data != NULL, FALSE);
iface = nm_device_get_iface (dev);
@ -946,7 +946,7 @@ gboolean nm_device_deactivate (NMDevice *dev, gboolean just_added)
}
if (!just_added)
nm_dbus_signal_device_no_longer_active (data->dbus_connection, dev);
nm_dbus_signal_device_no_longer_active (dev->app_data->dbus_connection, dev);
/* Clean up stuff, don't leave the card associated or up */
if (nm_device_is_wireless (dev))
@ -983,10 +983,8 @@ gboolean nm_device_pending_action (NMDevice *dev)
*/
void nm_device_pending_action_get_user_key (NMDevice *dev, NMAccessPoint *ap)
{
NMData *data = nm_get_global_data ();
g_return_if_fail (data != NULL);
g_return_if_fail (dev != NULL);
g_return_if_fail (dev->app_data != NULL);
g_return_if_fail (nm_device_is_wireless (dev));
g_return_if_fail (ap != NULL);
g_return_if_fail (nm_ap_get_essid (ap) != NULL);
@ -996,7 +994,7 @@ void nm_device_pending_action_get_user_key (NMDevice *dev, NMAccessPoint *ap)
dev->pending_action = NM_PENDING_ACTION_GET_USER_KEY;
dev->pending_action_options.user_key.essid = g_strdup (nm_ap_get_essid (ap));
nm_dbus_get_user_key_for_network (data->dbus_connection, dev, ap, &(dev->pending_action_options.user_key.pending_call));
nm_dbus_get_user_key_for_network (dev->app_data->dbus_connection, dev, ap, &(dev->pending_action_options.user_key.pending_call));
}
@ -1043,10 +1041,8 @@ void nm_device_pending_action_set_user_key (NMDevice *dev, unsigned char *key)
*/
void nm_device_pending_action_cancel (NMDevice *dev)
{
NMData *data = nm_get_global_data ();
g_return_if_fail (dev != NULL);
g_return_if_fail (data != NULL);
g_return_if_fail (dev->app_data != NULL);
if (dev->pending_action == NM_PENDING_ACTION_GET_USER_KEY)
{
@ -1059,7 +1055,7 @@ void nm_device_pending_action_cancel (NMDevice *dev)
g_free (dev->pending_action_options.user_key.essid);
dev->pending_action_options.user_key.essid = NULL;
nm_dbus_cancel_get_user_key_for_network (data->dbus_connection);
nm_dbus_cancel_get_user_key_for_network (dev->app_data->dbus_connection);
}
dev->pending_action = NM_PENDING_ACTION_NONE;
@ -1253,6 +1249,7 @@ static void nm_device_do_normal_scan (NMDevice *dev)
int iwlib_socket;
g_return_if_fail (dev != NULL);
g_return_if_fail (dev->app_data != NULL);
/* Device must be up before we can scan */
if (!nm_device_is_up (dev))
@ -1316,7 +1313,7 @@ static void nm_device_do_normal_scan (NMDevice *dev)
/* Add the AP to the device's AP list, no matter if its allowed or not */
nm_device_ap_list_add (dev, nm_ap);
if (nm_wireless_is_most_prefered_ap (nm_ap, &highest_priority))
if (nm_wireless_is_most_prefered_ap (dev->app_data, nm_ap, &highest_priority))
{
if (highest_priority_ap)
nm_ap_unref (highest_priority_ap);
@ -1337,7 +1334,7 @@ static void nm_device_do_normal_scan (NMDevice *dev)
&& (!nm_device_get_best_ap (dev) || (nm_null_safe_strcmp (nm_device_get_essid (dev), nm_ap_get_essid (highest_priority_ap)) != 0)))
{
nm_device_set_best_ap (dev, highest_priority_ap);
nm_data_set_state_modified (nm_get_global_data (), TRUE);
nm_data_set_state_modified (dev->app_data, TRUE);
nm_ap_unref (highest_priority_ap);
}
@ -1360,17 +1357,15 @@ static void nm_device_do_normal_scan (NMDevice *dev)
*/
static void nm_device_do_pseudo_scan (NMDevice *dev)
{
NMData *data = nm_get_global_data ();
g_return_if_fail (data != NULL);
g_return_if_fail (dev != NULL);
g_return_if_fail (dev->app_data != NULL);
nm_device_ref (dev);
/* Acquire allowed AP list mutex, silently fail if we cannot */
if (nm_try_acquire_mutex (data->allowed_ap_list_mutex, __FUNCTION__))
if (nm_try_acquire_mutex (dev->app_data->allowed_ap_list_mutex, __FUNCTION__))
{
GSList *element = data->allowed_ap_list;
GSList *element = dev->app_data->allowed_ap_list;
/* Turn off the essid so we can tell if its changed when
* we set it below.
@ -1424,14 +1419,14 @@ static void nm_device_do_pseudo_scan (NMDevice *dev)
NM_DEBUG_PRINT_1 ("AP %s looks good, setting to desired\n", nm_ap_get_essid (ap));
nm_device_set_best_ap (dev, ap);
nm_data_set_state_modified (nm_get_global_data (), TRUE);
nm_data_set_state_modified (dev->app_data, TRUE);
break;
}
}
element = g_slist_next (element);
}
nm_unlock_mutex (data->allowed_ap_list_mutex, __FUNCTION__);
nm_unlock_mutex (dev->app_data->allowed_ap_list_mutex, __FUNCTION__);
}
nm_device_unref (dev);
@ -1446,9 +1441,6 @@ static void nm_device_do_pseudo_scan (NMDevice *dev)
*/
void nm_device_do_wireless_scan (NMDevice *dev)
{
NMData *data = nm_get_global_data ();
g_return_if_fail (data != NULL);
g_return_if_fail (dev != NULL);
g_return_if_fail (nm_device_is_wireless (dev));
@ -1464,7 +1456,7 @@ void nm_device_do_wireless_scan (NMDevice *dev)
*/
nm_device_get_ap_address (dev, &ap_addr);
if ( !nm_ethernet_address_is_valid (&ap_addr)
|| !nm_policy_essid_is_allowed (data, nm_device_get_essid (dev))
|| !nm_policy_essid_is_allowed (dev->app_data, nm_device_get_essid (dev))
|| !nm_device_get_best_ap (dev))
{
nm_device_do_pseudo_scan (dev);

View file

@ -39,7 +39,7 @@ typedef struct NMDevice NMDevice;
typedef enum NMIfaceType NMIfaceType;
NMDevice * nm_device_new (const char *iface);
NMDevice * nm_device_new (const char *iface, NMData *app_data);
void nm_device_ref (NMDevice *dev);
void nm_device_unref (NMDevice *dev);

View file

@ -302,7 +302,7 @@ void nm_policy_update_allowed_access_points (NMData *data)
gchar wep_key[ 50 ];
/* Free the old list of allowed access points */
nm_data_allowed_ap_list_free (data);
// nm_data_allowed_ap_list_free (data);
while (fgets (line, 499, ap_file))
{

View file

@ -37,13 +37,14 @@ extern gboolean debug;
* both allowed _and_ has a better priority than highest_priority.
*
*/
gboolean nm_wireless_is_most_prefered_ap (NMAccessPoint *ap, int *highest_priority)
gboolean nm_wireless_is_most_prefered_ap (NMData *data, NMAccessPoint *ap, int *highest_priority)
{
NMData *data = nm_get_global_data ();
GSList *element;
gboolean is_most_preferred = FALSE;
g_return_val_if_fail (data != NULL, FALSE);
g_return_val_if_fail (ap != NULL, FALSE);
g_return_val_if_fail (highest_priority != NULL, FALSE);
/* Attempt to acquire mutex for device list iteration.
* If the acquire fails, just ignore the scan completely.

View file

@ -26,7 +26,7 @@
#include "NetworkManagerDevice.h"
gboolean nm_wireless_is_most_prefered_ap (NMAccessPoint *ap, int *highest_priority);
gboolean nm_wireless_is_most_prefered_ap (NMData *data, NMAccessPoint *ap, int *highest_priority);
gboolean nm_wireless_scan_monitor (gpointer user_data);