2005-12-21 Dan Williams <dcbw@redhat.com>
* Consolidate the info-daemon's "updateNetworkInfo" and "addNetworkAddress" calls into just "updateNetworkInfo" git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1224 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2005-12-21 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
|
* Consolidate the info-daemon's "updateNetworkInfo" and
|
||||||
|
"addNetworkAddress" calls into just "updateNetworkInfo"
|
||||||
|
|
||||||
2005-12-21 Dan Williams <dcbw@redhat.com>
|
2005-12-21 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
* Make connection after key retrieval work again
|
* Make connection after key retrieval work again
|
||||||
|
@@ -834,6 +834,7 @@ static void
|
|||||||
nmi_save_network_info (NMWirelessApplet *applet,
|
nmi_save_network_info (NMWirelessApplet *applet,
|
||||||
const char *essid,
|
const char *essid,
|
||||||
gboolean automatic,
|
gboolean automatic,
|
||||||
|
const char *bssid,
|
||||||
NMGConfWSO * gconf_wso)
|
NMGConfWSO * gconf_wso)
|
||||||
{
|
{
|
||||||
GnomeKeyringAttributeList * attributes;
|
GnomeKeyringAttributeList * attributes;
|
||||||
@@ -897,6 +898,48 @@ nmi_save_network_info (NMWirelessApplet *applet,
|
|||||||
g_free (key);
|
g_free (key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bssid && (strlen (bssid) >= 11))
|
||||||
|
{
|
||||||
|
GConfValue * value;
|
||||||
|
GSList * new_bssid_list = NULL;
|
||||||
|
gboolean found = FALSE;
|
||||||
|
|
||||||
|
/* Get current list of access point BSSIDs for this AP from GConf */
|
||||||
|
key = g_strdup_printf ("%s/%s/bssids", GCONF_PATH_WIRELESS_NETWORKS, escaped_network);
|
||||||
|
if ((value = gconf_client_get (applet->gconf_client, key, NULL)))
|
||||||
|
{
|
||||||
|
if ((value->type == GCONF_VALUE_LIST) && (gconf_value_get_list_type (value) == GCONF_VALUE_STRING))
|
||||||
|
{
|
||||||
|
GSList * elt;
|
||||||
|
|
||||||
|
new_bssid_list = gconf_client_get_list (applet->gconf_client, key, GCONF_VALUE_STRING, NULL);
|
||||||
|
|
||||||
|
/* Ensure that the MAC isn't already in the list */
|
||||||
|
for (elt = new_bssid_list; elt; elt = g_slist_next (elt))
|
||||||
|
{
|
||||||
|
if (elt->data && !strcmp (bssid, elt->data))
|
||||||
|
{
|
||||||
|
found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gconf_value_free (value);
|
||||||
|
}
|
||||||
|
g_free (key);
|
||||||
|
|
||||||
|
/* Add the new MAC address to the end of the list */
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
new_bssid_list = g_slist_append (new_bssid_list, g_strdup (bssid));
|
||||||
|
gconf_client_set_list (applet->gconf_client, key, GCONF_VALUE_STRING, new_bssid_list, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free the list, since gconf_client_set_list deep-copies it */
|
||||||
|
g_slist_foreach (new_bssid_list, (GFunc) g_free, NULL);
|
||||||
|
g_slist_free (new_bssid_list);
|
||||||
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
g_free (escaped_network);
|
g_free (escaped_network);
|
||||||
}
|
}
|
||||||
@@ -920,6 +963,7 @@ nmi_dbus_update_network_info (DBusConnection *connection,
|
|||||||
dbus_bool_t args_good;
|
dbus_bool_t args_good;
|
||||||
NMGConfWSO * gconf_wso = NULL;
|
NMGConfWSO * gconf_wso = NULL;
|
||||||
DBusMessageIter iter;
|
DBusMessageIter iter;
|
||||||
|
char * bssid;
|
||||||
|
|
||||||
g_return_val_if_fail (applet != NULL, NULL);
|
g_return_val_if_fail (applet != NULL, NULL);
|
||||||
g_return_val_if_fail (message != NULL, NULL);
|
g_return_val_if_fail (message != NULL, NULL);
|
||||||
@@ -947,6 +991,14 @@ nmi_dbus_update_network_info (DBusConnection *connection,
|
|||||||
}
|
}
|
||||||
dbus_message_iter_get_basic (&iter, &automatic);
|
dbus_message_iter_get_basic (&iter, &automatic);
|
||||||
|
|
||||||
|
/* Third argument: Access point's BSSID */
|
||||||
|
if (!dbus_message_iter_next (&iter) || (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING))
|
||||||
|
{
|
||||||
|
nm_warning ("%s:%d (%s): message argument 'bssid' was invalid.", __FILE__, __LINE__, __func__);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
dbus_message_iter_get_basic (&iter, &bssid);
|
||||||
|
|
||||||
/* Deserialize the sercurity option out of the message */
|
/* Deserialize the sercurity option out of the message */
|
||||||
if (!dbus_message_iter_next (&iter))
|
if (!dbus_message_iter_next (&iter))
|
||||||
goto out;
|
goto out;
|
||||||
@@ -957,106 +1009,13 @@ nmi_dbus_update_network_info (DBusConnection *connection,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
nmi_save_network_info (applet, essid, automatic, gconf_wso);
|
nmi_save_network_info (applet, essid, automatic, bssid, gconf_wso);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nmi_dbus_add_network_address
|
|
||||||
*
|
|
||||||
* Add an AP's MAC address to a wireless network entry in gconf
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static DBusMessage *
|
|
||||||
nmi_dbus_add_network_address (DBusConnection *connection,
|
|
||||||
DBusMessage *message,
|
|
||||||
void *user_data)
|
|
||||||
{
|
|
||||||
NMWirelessApplet * applet = (NMWirelessApplet *) user_data;
|
|
||||||
DBusMessage * reply_message = NULL;
|
|
||||||
char * network = NULL;
|
|
||||||
NMNetworkType type;
|
|
||||||
char * addr;
|
|
||||||
char * key;
|
|
||||||
GConfValue * value;
|
|
||||||
char * escaped_network;
|
|
||||||
GSList * new_mac_list = NULL;
|
|
||||||
gboolean found = FALSE;
|
|
||||||
|
|
||||||
g_return_val_if_fail (applet != NULL, NULL);
|
|
||||||
g_return_val_if_fail (message != NULL, NULL);
|
|
||||||
|
|
||||||
if (!dbus_message_get_args (message, NULL,
|
|
||||||
DBUS_TYPE_STRING, &network,
|
|
||||||
DBUS_TYPE_INT32, &type,
|
|
||||||
DBUS_TYPE_STRING, &addr,
|
|
||||||
DBUS_TYPE_INVALID))
|
|
||||||
return new_invalid_args_error (message, __func__);
|
|
||||||
|
|
||||||
if (!nmi_network_type_valid (type) || (strlen (network) <= 0) || !addr || (strlen (addr) < 11))
|
|
||||||
return new_invalid_args_error (message, __func__);
|
|
||||||
|
|
||||||
/* Force-set the essid too so that we have a semi-complete network entry */
|
|
||||||
escaped_network = gconf_escape_key (network, strlen (network));
|
|
||||||
key = g_strdup_printf ("%s/%s/essid", GCONF_PATH_WIRELESS_NETWORKS, escaped_network);
|
|
||||||
value = gconf_client_get (applet->gconf_client, key, NULL);
|
|
||||||
|
|
||||||
/* If the network doesn't already exist in GConf, add it and set its timestamp to now. */
|
|
||||||
if (!value || (!value && (value->type == GCONF_VALUE_STRING)))
|
|
||||||
{
|
|
||||||
/* Set the essid of the network. */
|
|
||||||
gconf_client_set_string (applet->gconf_client, key, network, NULL);
|
|
||||||
g_free (key);
|
|
||||||
|
|
||||||
/* Update timestamp on network */
|
|
||||||
key = g_strdup_printf ("%s/%s/timestamp", GCONF_PATH_WIRELESS_NETWORKS, escaped_network);
|
|
||||||
gconf_client_set_int (applet->gconf_client, key, time (NULL), NULL);
|
|
||||||
}
|
|
||||||
g_free (key);
|
|
||||||
|
|
||||||
/* Get current list of access point MAC addresses for this AP from GConf */
|
|
||||||
key = g_strdup_printf ("%s/%s/addresses", GCONF_PATH_WIRELESS_NETWORKS, escaped_network);
|
|
||||||
if ((value = gconf_client_get (applet->gconf_client, key, NULL)))
|
|
||||||
{
|
|
||||||
if ((value->type == GCONF_VALUE_LIST) && (gconf_value_get_list_type (value) == GCONF_VALUE_STRING))
|
|
||||||
{
|
|
||||||
GSList * elt;
|
|
||||||
|
|
||||||
new_mac_list = gconf_client_get_list (applet->gconf_client, key, GCONF_VALUE_STRING, NULL);
|
|
||||||
|
|
||||||
/* Ensure that the MAC isn't already in the list */
|
|
||||||
for (elt = new_mac_list; elt; elt = g_slist_next (elt))
|
|
||||||
{
|
|
||||||
if (elt->data && !strcmp (addr, elt->data))
|
|
||||||
{
|
|
||||||
found = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gconf_value_free (value);
|
|
||||||
}
|
|
||||||
g_free (escaped_network);
|
|
||||||
g_free (key);
|
|
||||||
|
|
||||||
/* Add the new MAC address to the end of the list */
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
new_mac_list = g_slist_append (new_mac_list, g_strdup (addr));
|
|
||||||
gconf_client_set_list (applet->gconf_client, key, GCONF_VALUE_STRING, new_mac_list, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free the list, since gconf_client_set_list deep-copies it */
|
|
||||||
g_slist_foreach (new_mac_list, (GFunc)g_free, NULL);
|
|
||||||
g_slist_free (new_mac_list);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nmi_dbus_info_message_handler
|
* nmi_dbus_info_message_handler
|
||||||
*
|
*
|
||||||
@@ -1120,7 +1079,6 @@ DBusMethodDispatcher *nmi_dbus_nmi_methods_setup (void)
|
|||||||
dbus_method_dispatcher_register_method (dispatcher, "getNetworks", nmi_dbus_get_networks);
|
dbus_method_dispatcher_register_method (dispatcher, "getNetworks", nmi_dbus_get_networks);
|
||||||
dbus_method_dispatcher_register_method (dispatcher, "getNetworkProperties", nmi_dbus_get_network_properties);
|
dbus_method_dispatcher_register_method (dispatcher, "getNetworkProperties", nmi_dbus_get_network_properties);
|
||||||
dbus_method_dispatcher_register_method (dispatcher, "updateNetworkInfo", nmi_dbus_update_network_info);
|
dbus_method_dispatcher_register_method (dispatcher, "updateNetworkInfo", nmi_dbus_update_network_info);
|
||||||
dbus_method_dispatcher_register_method (dispatcher, "addNetworkAddress", nmi_dbus_add_network_address);
|
|
||||||
dbus_method_dispatcher_register_method (dispatcher, "getVPNConnections", nmi_dbus_get_vpn_connections);
|
dbus_method_dispatcher_register_method (dispatcher, "getVPNConnections", nmi_dbus_get_vpn_connections);
|
||||||
dbus_method_dispatcher_register_method (dispatcher, "getVPNConnectionProperties",nmi_dbus_get_vpn_connection_properties);
|
dbus_method_dispatcher_register_method (dispatcher, "getVPNConnectionProperties",nmi_dbus_get_vpn_connection_properties);
|
||||||
dbus_method_dispatcher_register_method (dispatcher, "getVPNConnectionVPNData", nmi_dbus_get_vpn_connection_vpn_data);
|
dbus_method_dispatcher_register_method (dispatcher, "getVPNConnectionVPNData", nmi_dbus_get_vpn_connection_vpn_data);
|
||||||
|
@@ -68,15 +68,12 @@ static gboolean nm_policy_activation_finish (NMActRequest *req)
|
|||||||
|
|
||||||
/* Cache details in the info-daemon since the connect was successful */
|
/* Cache details in the info-daemon since the connect was successful */
|
||||||
automatic = !nm_act_request_get_user_requested (req);
|
automatic = !nm_act_request_get_user_requested (req);
|
||||||
nm_dbus_update_network_info (data->dbus_connection, ap, automatic);
|
|
||||||
|
|
||||||
nm_device_get_ap_address (dev, &addr);
|
nm_device_get_ap_address (dev, &addr);
|
||||||
if (!nm_ap_get_address (ap) || !nm_ethernet_address_is_valid (nm_ap_get_address (ap)))
|
if (!nm_ap_get_address (ap) || !nm_ethernet_address_is_valid (nm_ap_get_address (ap)))
|
||||||
nm_ap_set_address (ap, &addr);
|
nm_ap_set_address (ap, &addr);
|
||||||
|
|
||||||
/* Don't store MAC addresses for non-infrastructure networks */
|
nm_dbus_update_network_info (data->dbus_connection, ap, automatic);
|
||||||
if ((nm_ap_get_mode (ap) == IW_MODE_INFRA) && nm_ethernet_address_is_valid (&addr))
|
|
||||||
nm_dbus_add_network_address (data->dbus_connection, NETWORK_TYPE_ALLOWED, nm_ap_get_essid (ap), &addr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nm_info ("Activation (%s) successful, device activated.", nm_device_get_iface (dev));
|
nm_info ("Activation (%s) successful, device activated.", nm_device_get_iface (dev));
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
#include "nm-activation-request.h"
|
#include "nm-activation-request.h"
|
||||||
#include "NetworkManagerAPList.h"
|
#include "NetworkManagerAPList.h"
|
||||||
#include "NetworkManagerPolicy.h"
|
#include "NetworkManagerPolicy.h"
|
||||||
|
#include "NetworkManagerUtils.h"
|
||||||
#include "nm-dbus-nmi.h"
|
#include "nm-dbus-nmi.h"
|
||||||
#include "nm-utils.h"
|
#include "nm-utils.h"
|
||||||
|
|
||||||
@@ -221,7 +222,9 @@ gboolean nm_dbus_update_network_info (DBusConnection *connection, NMAccessPoint
|
|||||||
DBusMessage * message;
|
DBusMessage * message;
|
||||||
gboolean success = FALSE;
|
gboolean success = FALSE;
|
||||||
const char * essid;
|
const char * essid;
|
||||||
|
gchar * char_bssid;
|
||||||
NMAPSecurity * security;
|
NMAPSecurity * security;
|
||||||
|
const struct ether_addr *addr;
|
||||||
DBusMessageIter iter;
|
DBusMessageIter iter;
|
||||||
|
|
||||||
g_return_val_if_fail (connection != NULL, FALSE);
|
g_return_val_if_fail (connection != NULL, FALSE);
|
||||||
@@ -243,6 +246,25 @@ gboolean nm_dbus_update_network_info (DBusConnection *connection, NMAccessPoint
|
|||||||
/* Second argument: Automatic (BOOLEAN) */
|
/* Second argument: Automatic (BOOLEAN) */
|
||||||
dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &automatic);
|
dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &automatic);
|
||||||
|
|
||||||
|
/* Third argument: Access point's BSSID */
|
||||||
|
addr = nm_ap_get_address (ap);
|
||||||
|
if ((nm_ap_get_mode (ap) == IW_MODE_INFRA) && nm_ethernet_address_is_valid (addr))
|
||||||
|
{
|
||||||
|
char_bssid = g_new0 (gchar, 20);
|
||||||
|
iw_ether_ntop (addr, char_bssid);
|
||||||
|
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &char_bssid);
|
||||||
|
g_free (char_bssid);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Use an invalid BSSID for non-infrastructure networks, since
|
||||||
|
* the BSSID is usually randomly constructed by the driver and
|
||||||
|
* changed every time you activate the network.
|
||||||
|
*/
|
||||||
|
char_bssid = " ";
|
||||||
|
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &char_bssid);
|
||||||
|
}
|
||||||
|
|
||||||
/* Serialize the AP's security info into the message */
|
/* Serialize the AP's security info into the message */
|
||||||
security = nm_ap_get_security (ap);
|
security = nm_ap_get_security (ap);
|
||||||
g_assert (security);
|
g_assert (security);
|
||||||
@@ -262,51 +284,6 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nm_dbus_add_network_address
|
|
||||||
*
|
|
||||||
* Tell NetworkManagerInfo the MAC address of an AP
|
|
||||||
*
|
|
||||||
* Returns: FALSE on error
|
|
||||||
* TRUE on success
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
gboolean nm_dbus_add_network_address (DBusConnection *connection, NMNetworkType type, const char *network, struct ether_addr *addr)
|
|
||||||
{
|
|
||||||
DBusMessage * message;
|
|
||||||
gboolean success = FALSE;
|
|
||||||
gchar * char_addr;
|
|
||||||
dbus_int32_t type_as_int32 = (dbus_int32_t) type;
|
|
||||||
|
|
||||||
g_return_val_if_fail (connection != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (network != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (type != NETWORK_TYPE_UNKNOWN, FALSE);
|
|
||||||
g_return_val_if_fail (addr != NULL, FALSE);
|
|
||||||
|
|
||||||
if (!(message = dbus_message_new_method_call (NMI_DBUS_SERVICE, NMI_DBUS_PATH, NMI_DBUS_INTERFACE, "addNetworkAddress")))
|
|
||||||
{
|
|
||||||
nm_warning ("nm_dbus_add_network_ap_mac_address(): Couldn't allocate the dbus message");
|
|
||||||
return (FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
char_addr = g_new0 (gchar, 20);
|
|
||||||
iw_ether_ntop (addr, char_addr);
|
|
||||||
dbus_message_append_args (message, DBUS_TYPE_STRING, &network,
|
|
||||||
DBUS_TYPE_INT32, &type_as_int32,
|
|
||||||
DBUS_TYPE_STRING, &char_addr,
|
|
||||||
DBUS_TYPE_INVALID);
|
|
||||||
g_free (char_addr);
|
|
||||||
|
|
||||||
if (!dbus_connection_send (connection, message, NULL))
|
|
||||||
nm_warning ("nm_dbus_add_network_ap_mac_address(): failed to send dbus message.");
|
|
||||||
else
|
|
||||||
success = TRUE;
|
|
||||||
|
|
||||||
dbus_message_unref (message);
|
|
||||||
return (success);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct GetOneNetworkCBData
|
typedef struct GetOneNetworkCBData
|
||||||
{
|
{
|
||||||
NMData * data;
|
NMData * data;
|
||||||
|
@@ -31,8 +31,6 @@ void nm_dbus_cancel_get_user_key_for_network (DBusConnection *connection, NMAc
|
|||||||
|
|
||||||
NMAccessPoint *nm_dbus_get_network_object (DBusConnection *connection, NMNetworkType type, const char *network);
|
NMAccessPoint *nm_dbus_get_network_object (DBusConnection *connection, NMNetworkType type, const char *network);
|
||||||
|
|
||||||
gboolean nm_dbus_add_network_address (DBusConnection *connection, NMNetworkType type, const char *network, struct ether_addr *addr);
|
|
||||||
|
|
||||||
gboolean nm_dbus_update_network_info (DBusConnection *connection, NMAccessPoint *ap, const gboolean user_requested);
|
gboolean nm_dbus_update_network_info (DBusConnection *connection, NMAccessPoint *ap, const gboolean user_requested);
|
||||||
|
|
||||||
void nm_dbus_update_one_allowed_network (DBusConnection *connection, const char *network, NMData *data);
|
void nm_dbus_update_one_allowed_network (DBusConnection *connection, const char *network, NMData *data);
|
||||||
|
Reference in New Issue
Block a user