
Instead of having the call_id of type guint32, make it an (opaque) pointer type. This has the advantage of strong typing and avoids the possiblity of reusing an invalid integer (or overflow of the call-id counter). OTOH, it has the disadvantage, that after a call_id is disposed, it might be reused for future invocations (because malloc might reuse the memory). In fact, it is always an error to use a call_id that is already completed. This commit also adds assertions to the cancel() calls that the provided call_id is a pending call. Hence, such a bug will be uncovered by assertions (that only might not tigger in certain unlikely cases where a call-id got reused). Note that for NMAgentManager, save_secrets() and delete_secrets() both returned a call_id. But they didn't also provide a callback when the operation completes. So the user trying to cancel such a call, cannot know whether the operation is still in process and he cannot avoid triggering an assertion. Fix that by not returning a call-id for these operations. No caller cared about it anyway. For NMSettingsConnection, also track the internally scheduled requests for so that we can cancel them on dispose.
84 lines
3.5 KiB
C
84 lines
3.5 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
|
/* NetworkManager -- Network link manager
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* (C) Copyright 2005 - 2012 Red Hat, Inc.
|
|
*/
|
|
|
|
#ifndef __NETWORKMANAGER_ACTIVATION_REQUEST_H__
|
|
#define __NETWORKMANAGER_ACTIVATION_REQUEST_H__
|
|
|
|
|
|
#include "nm-default.h"
|
|
#include "nm-connection.h"
|
|
#include "nm-active-connection.h"
|
|
|
|
#define NM_TYPE_ACT_REQUEST (nm_act_request_get_type ())
|
|
#define NM_ACT_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ACT_REQUEST, NMActRequest))
|
|
#define NM_ACT_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_ACT_REQUEST, NMActRequestClass))
|
|
#define NM_IS_ACT_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_ACT_REQUEST))
|
|
#define NM_IS_ACT_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_ACT_REQUEST))
|
|
#define NM_ACT_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACT_REQUEST, NMActRequestClass))
|
|
|
|
struct _NMActRequestGetSecretsCallId;
|
|
typedef struct _NMActRequestGetSecretsCallId *NMActRequestGetSecretsCallId;
|
|
|
|
struct _NMActRequest {
|
|
NMActiveConnection parent;
|
|
};
|
|
|
|
typedef struct {
|
|
NMActiveConnectionClass parent;
|
|
|
|
} NMActRequestClass;
|
|
|
|
GType nm_act_request_get_type (void);
|
|
|
|
NMActRequest *nm_act_request_new (NMConnection *connection,
|
|
const char *specific_object,
|
|
NMAuthSubject *subject,
|
|
NMDevice *device);
|
|
|
|
NMConnection *nm_act_request_get_connection (NMActRequest *req);
|
|
|
|
gboolean nm_act_request_get_shared (NMActRequest *req);
|
|
|
|
void nm_act_request_set_shared (NMActRequest *req, gboolean shared);
|
|
|
|
void nm_act_request_add_share_rule (NMActRequest *req,
|
|
const char *table,
|
|
const char *rule);
|
|
|
|
/* Secrets handling */
|
|
|
|
typedef void (*NMActRequestSecretsFunc) (NMActRequest *req,
|
|
NMActRequestGetSecretsCallId call_id,
|
|
NMConnection *connection,
|
|
GError *error,
|
|
gpointer user_data);
|
|
|
|
NMActRequestGetSecretsCallId nm_act_request_get_secrets (NMActRequest *req,
|
|
const char *setting_name,
|
|
NMSecretAgentGetSecretsFlags flags,
|
|
const char *hint,
|
|
NMActRequestSecretsFunc callback,
|
|
gpointer callback_data);
|
|
|
|
void nm_act_request_cancel_secrets (NMActRequest *req, NMActRequestGetSecretsCallId call_id);
|
|
|
|
#endif /* __NETWORKMANAGER_ACTIVATION_REQUEST_H__ */
|
|
|