## NMVPNPlugin NMVPNPlugin |

## Synopsis

    #define             NM_VPN_PLUGIN_DBUS_SERVICE_NAME
    #define             NM_VPN_PLUGIN_STATE
    enum                NMVPNPluginError;
                        NMVPNPlugin;
                        NMVPNPluginClass;
    GQuark              nm_vpn_plugin_error_quark           (void);
    DBusGConnection *   nm_vpn_plugin_get_connection        (NMVPNPlugin *plugin);
    NMVPNServiceState   nm_vpn_plugin_get_state             (NMVPNPlugin *plugin);
    void                nm_vpn_plugin_set_state             (NMVPNPlugin *plugin,
                                                             NMVPNServiceState state);
    void                nm_vpn_plugin_secrets_required      (NMVPNPlugin *plugin,
                                                             const char *message,
                                                             const char **hints);
    void                nm_vpn_plugin_set_login_banner      (NMVPNPlugin *plugin,
                                                             const char *banner);
    void                nm_vpn_plugin_failure               (NMVPNPlugin *plugin,
                                                             NMVPNPluginFailure reason);
    void                nm_vpn_plugin_set_config            (NMVPNPlugin *plugin,
                                                             GHashTable *config);
    void                nm_vpn_plugin_set_ip4_config        (NMVPNPlugin *plugin,
                                                             GHashTable *ip4_config);
    void                nm_vpn_plugin_set_ip6_config        (NMVPNPlugin *plugin,
                                                             GHashTable *ip6_config);
    gboolean            nm_vpn_plugin_disconnect            (NMVPNPlugin *plugin,
                                                             GError **err);

## Description

## Details

### NM_VPN_PLUGIN_DBUS_SERVICE_NAME

    #define NM_VPN_PLUGIN_DBUS_SERVICE_NAME "service-name"

### NM_VPN_PLUGIN_STATE

    #define NM_VPN_PLUGIN_STATE             "state"

### enum NMVPNPluginError

    typedef enum {
    	NM_VPN_PLUGIN_ERROR_GENERAL,                   /*< nick=General >*/
    	NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS,      /*< nick=StartingInProgress >*/
    	NM_VPN_PLUGIN_ERROR_ALREADY_STARTED,           /*< nick=AlreadyStarted >*/
    	NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS,      /*< nick=StoppingInProgress >*/
    	NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED,           /*< nick=AlreadyStopped >*/
    	NM_VPN_PLUGIN_ERROR_WRONG_STATE,               /*< nick=WrongState >*/
    	NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,             /*< nick=BadArguments >*/
    	NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED,             /*< nick=LaunchFailed >*/
    	NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID,        /*< nick=ConnectionInvalid >*/
    	NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED  /*< nick=InteractiveNotSupported >*/
    } NMVPNPluginError;

Returned by the VPN service plugin to indicate errors.

`NM_VPN_PLUGIN_ERROR_GENERAL` | general failure
`NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS` | the plugin is already starting, and another connect request was received
`NM_VPN_PLUGIN_ERROR_ALREADY_STARTED` | the plugin is already connected, and another connect request was received
`NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS` | the plugin is already stopping, and another stop request was received
`NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED` | the plugin is already stopped, and another disconnect request was received
`NM_VPN_PLUGIN_ERROR_WRONG_STATE` | the operation could not be performed in this state
`NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS` | the operation could not be performed as the request contained malformed arguments, or arguments of unexpected type. Usually means that one of the VPN setting data items or secrets was not of the expected type (ie int, string, bool, etc).
`NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED` | a child process failed to launch
`NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID` | the operation could not be performed because the connection was invalid. Usually means that the connection's VPN setting was missing some required data item or secret.
`NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED` | the operation could not be performed as the plugin does not support interactive operations, such as `ConnectInteractive()` or `NewSecrets()`

### NMVPNPlugin

    typedef struct {
    	GObject parent;
    } NMVPNPlugin;

### NMVPNPluginClass

    typedef struct {
    	GObjectClass parent;

    	/* virtual methods */
    	gboolean (*connect)      (NMVPNPlugin   *plugin,
    	                          NMConnection  *connection,
    	                          GError       **err);

    	gboolean (*need_secrets) (NMVPNPlugin *plugin,
    	                          NMConnection *connection,
    	                          char **setting_name,
    	                          GError **error);

    	gboolean (*disconnect)   (NMVPNPlugin   *plugin,
    	                          GError       **err);

    	/* Signals */
    	void (*state_changed)  (NMVPNPlugin *plugin,
    	                        NMVPNServiceState state);

    	void (*ip4_config)     (NMVPNPlugin *plugin,
    	                        GHashTable  *ip4_config);

    	void (*login_banner)   (NMVPNPlugin *plugin,
    	                        const char *banner);

    	void (*failure)        (NMVPNPlugin *plugin,
    	                        NMVPNPluginFailure reason);

    	void (*quit)           (NMVPNPlugin *plugin);

    	void (*config)         (NMVPNPlugin *plugin,
    	                        GHashTable  *config);

    	void (*ip6_config)     (NMVPNPlugin *plugin,
    	                        GHashTable  *config);

    	/* more methods */
    	gboolean (*new_secrets)  (NMVPNPlugin *plugin,
    	                          NMConnection *connection,
    	                          GError **error);

    	gboolean (*connect_interactive) (NMVPNPlugin *plugin,
    	                                 NMConnection *connection,
    	                                 GHashTable *details,
    	                                 GError **error);

    	/* Padding for future expansion */
    	void (*_reserved1) (void);
    	void (*_reserved2) (void);
    } NMVPNPluginClass;

### nm_vpn_plugin_error_quark ()

    GQuark              nm_vpn_plugin_error_quark           (void);

### nm_vpn_plugin_get_connection ()

    DBusGConnection *   nm_vpn_plugin_get_connection        (NMVPNPlugin *plugin);

### nm_vpn_plugin_get_state ()

    NMVPNServiceState   nm_vpn_plugin_get_state             (NMVPNPlugin *plugin);

### nm_vpn_plugin_set_state ()

    void                nm_vpn_plugin_set_state             (NMVPNPlugin *plugin,
                                                             NMVPNServiceState state);

### nm_vpn_plugin_secrets_required ()

    void                nm_vpn_plugin_secrets_required      (NMVPNPlugin *plugin,
                                                             const char *message,
                                                             const char **hints);

Called by VPN plugin implementations to signal to NetworkManager that secrets are required during the connection process. This signal may be used to request new secrets when the secrets originally provided by NetworkManager are insufficient, or the VPN process indicates that it needs additional information to complete the request.

`plugin` : | the NMVPNPlugin
`message` : | an information message about why secrets are required, if any
`hints` : | VPN specific secret names for required new secrets

Since 0.9.10

### nm_vpn_plugin_set_login_banner ()

    void                nm_vpn_plugin_set_login_banner      (NMVPNPlugin *plugin,
                                                             const char *banner);

### nm_vpn_plugin_failure ()

    void                nm_vpn_plugin_failure               (NMVPNPlugin *plugin,
                                                             NMVPNPluginFailure reason);

### nm_vpn_plugin_set_config ()

    void                nm_vpn_plugin_set_config            (NMVPNPlugin *plugin,
                                                             GHashTable *config);

### nm_vpn_plugin_set_ip4_config ()

    void                nm_vpn_plugin_set_ip4_config        (NMVPNPlugin *plugin,
                                                             GHashTable *ip4_config);

### nm_vpn_plugin_set_ip6_config ()

    void                nm_vpn_plugin_set_ip6_config        (NMVPNPlugin *plugin,
                                                             GHashTable *ip6_config);

### nm_vpn_plugin_disconnect ()

    gboolean            nm_vpn_plugin_disconnect            (NMVPNPlugin *plugin,
                                                             GError **err);