## 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_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 >*/
    } 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.

### 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);

    	/* Padding for future expansion */
    	void (*_reserved1) (void);
    	void (*_reserved2) (void);
    	void (*_reserved3) (void);
    	void (*_reserved4) (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_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);