diff --git a/ChangeLog b/ChangeLog index a53b38dddb..2f69b21588 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2007-03-26 Tambet Ingo + + * src/vpn-manager/nm-dbus-vpn.c (dbus_message_handler): Implement DBUS message + handler for VPN. + + * src/vpn-manager/nm-vpn-manager.c (nm_vpn_manager_new): Register VPN interface + on DBUS again. + +2007-03-26 Dan Williams + + * src/NetworkManagerAPList.c + * src/nm-device-802-11-wireless.c + * src/NetworkManagerAP.c: + - Store last seen as glong instead of GTimeVal. + - Fix the upper bound of capabilities, it's a bitfield. + 2007-03-16 Tambet Ingo * libnm-glib/nm-device.c (nm_device_get_description): Implement. diff --git a/src/NetworkManagerAP.c b/src/NetworkManagerAP.c index 6459cf1992..1e563f516d 100644 --- a/src/NetworkManagerAP.c +++ b/src/NetworkManagerAP.c @@ -68,7 +68,7 @@ typedef struct * implies Ad-Hoc, but not necessarily * the other way around. */ - GTimeVal last_seen; /* Last time the AP was seen in a scan */ + glong last_seen; /* Last time the AP was seen in a scan in seconds */ /* Things from user prefs/NetworkManagerInfo */ gboolean fallback; @@ -224,6 +224,7 @@ static void nm_ap_class_init (NMAccessPointClass *ap_class) { GObjectClass *object_class = G_OBJECT_CLASS (ap_class); + guint32 all_caps; g_type_class_add_private (ap_class, sizeof (NMAccessPointPrivate)); @@ -234,12 +235,30 @@ nm_ap_class_init (NMAccessPointClass *ap_class) /* properties */ + all_caps = NM_802_11_CAP_NONE + | NM_802_11_CAP_PROTO_NONE + | NM_802_11_CAP_PROTO_WEP + | NM_802_11_CAP_PROTO_WPA + | NM_802_11_CAP_PROTO_WPA2 + | NM_802_11_CAP_RESERVED1 + | NM_802_11_CAP_RESERVED2 + | NM_802_11_CAP_KEY_MGMT_PSK + | NM_802_11_CAP_KEY_MGMT_802_1X + | NM_802_11_CAP_RESERVED3 + | NM_802_11_CAP_RESERVED4 + | NM_802_11_CAP_RESERVED5 + | NM_802_11_CAP_RESERVED6 + | NM_802_11_CAP_CIPHER_WEP40 + | NM_802_11_CAP_CIPHER_WEP104 + | NM_802_11_CAP_CIPHER_TKIP + | NM_802_11_CAP_CIPHER_CCMP; + g_object_class_install_property (object_class, PROP_CAPABILITIES, g_param_spec_uint (NM_AP_CAPABILITIES, "Capabilities", "Capabilities", - NM_802_11_CAP_NONE, NM_802_11_CAP_CIPHER_CCMP, NM_802_11_CAP_PROTO_NONE, + NM_802_11_CAP_NONE, all_caps, NM_802_11_CAP_PROTO_NONE, G_PARAM_READWRITE)); g_object_class_install_property @@ -469,7 +488,7 @@ nm_ap_new_from_properties (GHashTable *properties) g_hash_table_foreach (properties, foreach_property_cb, ap); g_get_current_time (&cur_time); - nm_ap_set_last_seen (ap, &cur_time); + nm_ap_set_last_seen (ap, cur_time.tv_sec); if (!nm_ap_get_essid (ap)) nm_ap_set_broadcast (ap, FALSE); @@ -814,18 +833,18 @@ void nm_ap_set_broadcast (NMAccessPoint *ap, gboolean broadcast) * APs older than a certain date are dropped from the list. * */ -const GTimeVal *nm_ap_get_last_seen (const NMAccessPoint *ap) +glong nm_ap_get_last_seen (const NMAccessPoint *ap) { g_return_val_if_fail (NM_IS_AP (ap), FALSE); - return &NM_AP_GET_PRIVATE (ap)->last_seen; + return NM_AP_GET_PRIVATE (ap)->last_seen; } -void nm_ap_set_last_seen (NMAccessPoint *ap, const GTimeVal *last_seen) +void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen) { g_return_if_fail (NM_IS_AP (ap)); - NM_AP_GET_PRIVATE (ap)->last_seen = *last_seen; + NM_AP_GET_PRIVATE (ap)->last_seen = last_seen; } diff --git a/src/NetworkManagerAP.h b/src/NetworkManagerAP.h index e9cd16811f..a89af93575 100644 --- a/src/NetworkManagerAP.h +++ b/src/NetworkManagerAP.h @@ -107,8 +107,8 @@ void nm_ap_set_artificial (NMAccessPoint *ap, gboolean artificial); gboolean nm_ap_get_broadcast (NMAccessPoint *ap); void nm_ap_set_broadcast (NMAccessPoint *ap, gboolean broadcast); -const GTimeVal * nm_ap_get_last_seen (const NMAccessPoint *ap); -void nm_ap_set_last_seen (NMAccessPoint *ap, const GTimeVal *last_seen); +glong nm_ap_get_last_seen (const NMAccessPoint *ap); +void nm_ap_set_last_seen (NMAccessPoint *ap, const glong last_seen); gboolean nm_ap_get_user_created (const NMAccessPoint *ap); void nm_ap_set_user_created (NMAccessPoint *ap, gboolean user_created); diff --git a/src/NetworkManagerAPList.c b/src/NetworkManagerAPList.c index eb7e9ab16e..55803a51d7 100644 --- a/src/NetworkManagerAPList.c +++ b/src/NetworkManagerAPList.c @@ -526,7 +526,7 @@ void nm_ap_list_print_members (NMAccessPointList *list, const char *name) nm_info ("AP_LIST_PRINT: printing members of '%s'", name); while ((ap = nm_ap_list_iter_next (iter))) { const GTimeVal * timestamp = nm_ap_get_timestamp (ap); - const GTimeVal * seen = nm_ap_get_last_seen (ap); + const glong seen = nm_ap_get_last_seen (ap); NMAPSecurity * security = nm_ap_get_security (ap); const char * key = ""; const struct ether_addr * eth_addr = nm_ap_get_address (ap); @@ -552,7 +552,7 @@ void nm_ap_list_print_members (NMAccessPointList *list, const char *name) nm_ap_get_rate (ap), nm_ap_get_invalid (ap), nm_ap_get_mode (ap), - seen->tv_sec); + seen); i++; } nm_info ("AP_LIST_PRINT: done"); diff --git a/src/nm-device-802-11-wireless.c b/src/nm-device-802-11-wireless.c index 39b60fb871..a0dd4956c3 100644 --- a/src/nm-device-802-11-wireless.c +++ b/src/nm-device-802-11-wireless.c @@ -1943,9 +1943,9 @@ merge_scanned_ap (NMDevice80211Wireless *dev, * be from a previous scan so the time_last_seen's are not equal. Update * encryption, authentication method, strength, and the time_last_seen. */ - const char * devlist_essid = nm_ap_get_essid (list_ap); - const char * merge_essid = nm_ap_get_essid (merge_ap); - const GTimeVal *merge_ap_seen = nm_ap_get_last_seen (merge_ap); + const char *devlist_essid = nm_ap_get_essid (list_ap); + const char *merge_essid = nm_ap_get_essid (merge_ap); + const glong merge_ap_seen = nm_ap_get_last_seen (merge_ap); /* Did the AP's name change? */ if (!devlist_essid || !merge_essid || nm_null_safe_strcmp (devlist_essid, merge_essid)) { @@ -1985,13 +1985,13 @@ merge_scanned_ap (NMDevice80211Wireless *dev, * equal, the merge AP and the list AP come from the same scan. * Update the time_last_seen. */ - const GTimeVal * merge_ap_seen = nm_ap_get_last_seen (merge_ap); - const GTimeVal * list_ap_seen = nm_ap_get_last_seen (list_ap); - const int merge_ap_strength = nm_ap_get_strength (merge_ap); + const glong merge_ap_seen = nm_ap_get_last_seen (merge_ap); + const glong list_ap_seen = nm_ap_get_last_seen (list_ap); + const int merge_ap_strength = nm_ap_get_strength (merge_ap); nm_ap_set_capabilities (list_ap, nm_ap_get_capabilities (merge_ap)); - if (!((list_ap_seen->tv_sec == merge_ap_seen->tv_sec) + if (!((list_ap_seen == merge_ap_seen) && (nm_ap_get_strength (list_ap) >= merge_ap_strength))) { nm_ap_set_strength (list_ap, merge_ap_strength); @@ -2038,10 +2038,10 @@ cull_scan_list (NMDevice80211Wireless * self) * thrice the inactive scan interval. */ while ((outdated_ap = nm_ap_list_iter_next (iter))) { - const GTimeVal * ap_time = nm_ap_get_last_seen (outdated_ap); - gboolean keep_around = FALSE; - guint prune_interval_s; - const char * ssid; + const glong ap_time = nm_ap_get_last_seen (outdated_ap); + gboolean keep_around = FALSE; + guint prune_interval_s; + const char * ssid; /* Don't ever prune the AP we're currently associated with */ ssid = nm_ap_get_essid (outdated_ap); @@ -2052,7 +2052,7 @@ cull_scan_list (NMDevice80211Wireless * self) prune_interval_s = SCAN_INTERVAL_MAX * 3; - if (!keep_around && (ap_time->tv_sec + prune_interval_s < cur_time.tv_sec)) + if (!keep_around && (ap_time + prune_interval_s < cur_time.tv_sec)) outdated_list = g_slist_append (outdated_list, outdated_ap); } nm_ap_list_iter_free (iter); diff --git a/src/vpn-manager/nm-dbus-vpn.c b/src/vpn-manager/nm-dbus-vpn.c index 89ee6842dc..414c335f12 100644 --- a/src/vpn-manager/nm-dbus-vpn.c +++ b/src/vpn-manager/nm-dbus-vpn.c @@ -901,6 +901,32 @@ nm_dbus_vpn_deactivate_connection (DBusConnection *connection, } +static DBusHandlerResult +dbus_message_handler (DBusConnection *con, DBusMessage *message, void *user_data) +{ + DBusMessage *reply = NULL; + DBusHandlerResult result = DBUS_HANDLER_RESULT_HANDLED; + + if (dbus_message_has_member (message, "getVPNConnections")) + reply = nm_dbus_vpn_get_vpn_connections (con, message, user_data); + else if (dbus_message_has_member (message, "getVPNConnectionProperties")) + reply = nm_dbus_vpn_get_vpn_connection_properties (con, message, user_data); + else if (dbus_message_has_member (message, "activateVPNConnection")) + reply = nm_dbus_vpn_activate_connection (con, message, user_data); + else if (dbus_message_has_member (message, "deactivateVPNConnection")) + reply = nm_dbus_vpn_deactivate_connection (con, message, user_data); + else + result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + + if (reply) { + dbus_connection_send (con, reply, NULL); + dbus_message_unref (reply); + } + + return result; +} + + /* * nm_dbus_vpn_methods_setup * @@ -908,20 +934,20 @@ nm_dbus_vpn_deactivate_connection (DBusConnection *connection, * org.freedesktop.NetworkManager.VPNConnections object. * */ -NMDbusMethodList *nm_dbus_vpn_methods_setup (NMVPNManager *mgr) +gboolean +nm_dbus_vpn_methods_setup (NMVPNManager *mgr) { - NMDbusMethodList * list; + NMDBusManager *dbus_mgr; + gboolean success; + DBusObjectPathVTable vtable = { NULL, &dbus_message_handler, NULL, NULL, NULL, NULL }; - list = nm_dbus_method_list_new (NM_DBUS_PATH_VPN, FALSE, mgr, NULL); - - nm_dbus_method_list_add_method (list, "getVPNConnections", - nm_dbus_vpn_get_vpn_connections); - nm_dbus_method_list_add_method (list, "getVPNConnectionProperties", - nm_dbus_vpn_get_vpn_connection_properties); - nm_dbus_method_list_add_method (list, "activateVPNConnection", - nm_dbus_vpn_activate_connection); - nm_dbus_method_list_add_method (list, "deactivateVPNConnection", - nm_dbus_vpn_deactivate_connection); + dbus_mgr = nm_dbus_manager_get (); + success = dbus_connection_register_object_path (nm_dbus_manager_get_dbus_connection (dbus_mgr), + NM_DBUS_PATH_VPN, &vtable, mgr); + if (!success) + nm_warning ("Could not register a dbus handler for VPN. Not enough memory?"); - return list; + g_object_unref (dbus_mgr); + + return success; } diff --git a/src/vpn-manager/nm-dbus-vpn.h b/src/vpn-manager/nm-dbus-vpn.h index 227a163245..02bc4a91ab 100644 --- a/src/vpn-manager/nm-dbus-vpn.h +++ b/src/vpn-manager/nm-dbus-vpn.h @@ -38,6 +38,6 @@ void nm_dbus_vpn_signal_vpn_connection_state_change (DBusConnection *con, NMV char ** nm_dbus_vpn_get_routes (DBusConnection *connection, NMVPNConnection *vpn, int *num_items); -NMDbusMethodList * nm_dbus_vpn_methods_setup (NMVPNManager *mgr); +gboolean nm_dbus_vpn_methods_setup (NMVPNManager *mgr); #endif diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c index c5353f17f8..afbfedadb0 100644 --- a/src/vpn-manager/nm-vpn-manager.c +++ b/src/vpn-manager/nm-vpn-manager.c @@ -44,7 +44,6 @@ struct NMVPNManager GSList * connections; NMVPNActRequest * act_req; - NMDbusMethodList * dbus_methods; gulong device_signal_id; }; @@ -122,7 +121,11 @@ NMVPNManager *nm_vpn_manager_new (NMManager *nm_manager, NMData *app_data) (GDestroyNotify) nm_vpn_service_unref); load_services (manager, manager->service_table); - manager->dbus_methods = nm_dbus_vpn_methods_setup (manager); + if (!nm_dbus_vpn_methods_setup (manager)) { + nm_vpn_manager_dispose (manager); + return NULL; + } + dbus_mgr = nm_dbus_manager_get (); g_signal_connect (dbus_mgr, @@ -139,8 +142,6 @@ NMVPNManager *nm_vpn_manager_new (NMManager *nm_manager, NMData *app_data) if (nm_dbus_manager_name_has_owner (dbus_mgr, NMI_DBUS_SERVICE)) nm_dbus_vpn_schedule_vpn_connections_update (manager); - /* FIXME */ -/* nm_dbus_manager_register_method_list (dbus_mgr, manager->dbus_methods); */ g_object_unref (dbus_mgr); return manager; @@ -165,7 +166,6 @@ void nm_vpn_manager_dispose (NMVPNManager *manager) g_hash_table_destroy (manager->service_table); - nm_dbus_method_list_unref (manager->dbus_methods); g_object_unref (manager->nm_manager); memset (manager, 0, sizeof (NMVPNManager));