static void nm_dhcp_manager_handle_event (DBusGProxy *proxy, GHashTable *options, gpointer user_data) { NMDHCPManager *manager; NMDHCPManagerPrivate *priv; NMDHCPClient *client; char *iface = NULL; char *pid_str = NULL; char *reason = NULL; unsigned long temp; manager = NM_DHCP_MANAGER (user_data); priv = NM_DHCP_MANAGER_GET_PRIVATE (manager); iface = get_option (options, "interface"); if (iface == NULL) { nm_log_warn (LOGD_DHCP, "DHCP event didn't have associated interface."); goto out; } pid_str = get_option (options, "pid"); if (pid_str == NULL) { nm_log_warn (LOGD_DHCP, "DHCP event didn't have associated PID."); goto out; } temp = strtoul (pid_str, NULL, 10); if ((temp == ULONG_MAX) && (errno == ERANGE)) { nm_log_warn (LOGD_DHCP, "couldn't convert PID"); goto out; } client = get_client_for_pid (manager, (GPid) temp); if (client == NULL) { nm_log_warn (LOGD_DHCP, "(pid %d) unhandled DHCP event for interface %s", temp, iface); goto out; } if (strcmp (iface, nm_dhcp_client_get_iface (client))) { nm_log_warn (LOGD_DHCP, "(pid %d) received DHCP event from unexpected interface '%s' (expected '%s')", temp, iface, nm_dhcp_client_get_iface (client)); goto out; } reason = get_option (options, "reason"); if (reason == NULL) { nm_log_warn (LOGD_DHCP, "(pid %d) DHCP event didn't have a reason", temp); goto out; } nm_dhcp_client_new_options (client, options, reason); out: g_free (iface); g_free (pid_str); g_free (reason); }
static void dispose (GObject *object) { NMDhcpManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (object); GList *values, *iter; if (priv->clients) { values = g_hash_table_get_values (priv->clients); for (iter = values; iter; iter = g_list_next (iter)) remove_client (NM_DHCP_MANAGER (object), NM_DHCP_CLIENT (iter->data)); g_list_free (values); } G_OBJECT_CLASS (nm_dhcp_manager_parent_class)->dispose (object); }