/***************************************************************************
*   Copyright (C) 2004 by Christoph Thielecke                             *
*   crissi99@gmx.de                                                       *
*                                                                         *
*   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.,                                       *
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
***************************************************************************/
#ifndef VPNACCOUNTDATA_H
#define VPNACCOUNTDATA_H

#include <qstring.h>
#include <qobject.h>
#include <qstringlist.h>

/**
* holds the data for a account
* @author Christoph Thielecke
*/
class VpnAccountData : public QObject
{
public:
	enum ConnectionType {cisco=0, racoon=1, freeswan=2, pptp=3,openvpn=4,l2tpd_racoon=5,l2tpd_freeswan=6,ciscoorig=7,vtun=8,other=99};
	enum AuthenticationType {cert=0, psk=1};

	/**
	 * Konstruktor
	 * @param ConnType Type (cisco, freeswan,racoon, etc)
	 * @param Name The name of the account
	 * @param Gateway The hostname/IP of the VPN gateway
	 * @return nothing
	 */
	VpnAccountData( ConnectionType ConnType, const QString &Name);

	/**
	* Destruktor
	*/
	~VpnAccountData();

	/*
	Copy constructor
	*/
	VpnAccountData(const VpnAccountData&);

	ConnectionType getConnectionType() const; //< returns Connection type
	QString getName() const; //< returns Name
	QString getGateway() const; //< returns Gateway
	QString getID() const; //< returns ID
	QString getUserName() const; //< returns UserName
	QString getUserPassword() const; //< returns UserPassword
	QString getIkeGroup() const; //< returns IkeGroup
	QString getEncryptionAlgorithm() const; //< returns EncryptionAlgorithm
	QString getAuthenticationAlgorithm() const; //< returns AuthenticationAlgorithm
	QString getPerfectForwardSecrety() const; //< returns PerfectForwardSecrecy
	QString getNtDomainName() const; //< returns NtDomainName
	QString getApplicationVersion() const; //< returns ApplicationVersion
	QString getRemoteNetAddr() const; //<returns remoteNetAddr
	QString getRemoteNetMask() const; //<returns remoteNetMask
	QString getPreSharedKey() const; // returns PreSharedKey
	QString getX509Certificate() const; //< returns x509 certificate
	QString getCaCertificate() const; //< returns x509 certificate (CA)
	QString getNetworkDevice() const; //< returns NetworkDevice
	QString getCertPath() const; //<returns CertPath
	QString getSpecialRemoteID() const; //< returns SpecialRemoteID;
	QString getSpecialLocalID() const; //< returns SpecialLocalID;
	QString getLocalIDType() const; //< return Local ID type for racoon
	QString getPingHostIP() const; //< returns last part of IP (host) for ping test
	QString getPrivateKeyPass() const; //< returns PrivateKeyPass
	QString getPrivateKey() const; //< returns PrivateKey
	QString getDnsServer() const;
	QString getLocalVirtualIP() const; //< returns LocalVirtualIP
	QString getRemoteVirtualIP() const; //< returns RemoteVirtualIP (tun at openvpn,pptp) or Netmask for (tap at openvpn)
	QString getPreSharedKeyFile() const;
	QString getCommandBeforeConnect() const;
	QString getCommandAfterConnect() const;
	QString getCommandBeforeDisconnect() const;
	QString getCommandAfterDisconnect() const;
	QString getSpecialServerCertificate() const;
	QString getHashAlgo() const;
	QString getTunnelDeviceType() const;
	QString getDescription() const;
	QString getNsCertType() const;
	QString getVirtualIP() const;
	QString getUserdefiniedCipher() const;
	QString getTlsAuthFile() const;
	QString getHttpProxy() const;
	QString getExchangeMode() const;
	QString getTlsRemoteHost() const;
	QString getRightNextHop() const;
	QString getLeftNextHop() const;
	QString getHttpProxyAuthType() const;
	QString getHttpProxyUser() const;
	QString getHttpProxyPass() const;
	QString getPkcs11Providers() const;
	QString getPkcs11SlotType() const;
	QString getPkcs11Slot() const;
	QString getPkcs11IdType() const;
	QString getPkcs11Id() const;
	QString getPkcs11SignMode() const;
	QString getAuthMethod() const;
	QString getSearchDomainInResolvConf() const;
	QString getAuthenticationDirection() const;
	QString getCiscoNatMode() const;
	QString getIpsecEsp() const;
	QString getIpsecIke() const;
	QString getVtunProfile() const;
	QString getIpsecVpnMode() const;

	int getLocalPort() const; //< returns LocalPort
	int getRemotePort() const; //< returns RemotePort
	int getUdpPort() const; //< returns UdpPort
	int getMtu() const;
	int getMru() const;
	int getUserdefinedPort() const;
	int getConnectionStatusCheckSuccessCount() const;
	int getConnectionStatusInterval() const;
	int getHttpProxyPort() const;
	int getHttpProxyTimeout() const;
	int getReconnectDelay() const;
	int getMssfix() const;
	int getFragment() const;
	int getPeerTimeout() const;
	int getCommandAfterConnectDelayTime() const;
	AuthenticationType getAuthType() const; //< returns AuthType
	QStringList getAdditionalNetworkRoutes() const;
	bool getSaveUserPassword() const; //< returns saveUserPassword
	bool getSavePsk() const; //< returns savePSK
	bool getUseSingleDes() const; //< returns useSingleDes
	bool getUseIkeGroup() const; //< returns useIkeGroup
	bool getUsePerfectForwardSecrety() const; //< returns usePerfectSecrecy
	bool getUseNtDomainName() const; //< returns useNtDomainName
	bool getUseApplicationVersion() const; //< returns useApplicationVersion
	bool getUseLocalPort() const; //< returns useLocalPort
	bool getUseRemotePort() const; //< returns useRemotePort
	bool getUseAdvancedSettings() const; //< returns useAdvancedSettings
	bool getUseGlobalIpsecSecret() const; //< returns useGlobalIpsecSecret
	bool getDoPingIP() const; //< returns doPingIP
	bool getUseSpecialRemoteID() const; //< returns useSpecialRemoteID
	bool getUseSpecialLocalID() const; //< returns useSpecialLocalID
	bool getUseUdp() const; //< returns useUdp
	bool getUseUdpPort() const; //< returns useUdpPort
	bool getUseDnsUpdate() const;
	bool getUseDnsServer() const;
	bool getUseGetDnsFromPeer() const;
	bool getRefuse40BitEncryption() const;
	bool getRefuse128BitEncryption() const;
	bool getAllowStatefulMode() const;
	bool getRequireMppe() const;
	bool getRefuseEap() const;
	bool getUseNoIpDefault() const;
	bool getDisableMPPEComp() const;
	bool getExecuteCmdBeforeConnect() const;
	bool getExecuteCmdAfterConnect() const;
	bool getExecuteCmdBeforeDisconnect() const;
	bool getExecuteCmdAfterDisconnect() const;
	bool getUseNoBsdComp() const;
	bool getUseNoDeflate() const;
	bool getReplaceDefaultRoute() const;
	bool getUseMtu() const;
	bool getUseMru() const;
	bool getUseVirtualIP() const;
	bool getPskIsInFile() const;
	bool getUseAdditionalNetworkRoutes() const;
	bool getUseSpecialServerCertificate() const;
	bool getUseUserdefinedPort() const;
	bool getUseNsCertType() const;
	bool getUseConnectionStatusCheck() const;
	bool getDoReconnectAfterConnectionLost() const;
	bool getDisableLzoCompression() const;
	bool getAuthWithUsernameAndPassword() const;
	bool getAllowEmptyGroupPassword() const;
	bool getUseUserdefiniedCipher() const;
	bool getUseRedirectGateway() const;
	bool getUseTlsAuth() const;
	bool getUseHttpProxy() const;
	bool getDontSaveUsername() const;
	bool getUseModeConfig() const;
	bool getUseReconnectDelay() const;//< if true kvpnc will wait ReconnectDelay before do reconnect instead of immediately reconnect
	bool getUseTlsRemoteHost() const;
	bool getDisableOpportunisticEncryption() const;
	bool getUseMssfix() const;
	bool getUseFragment() const;
	bool getDisableCcp() const;
	bool getUseSmartcard() const;
	bool getUseXauthInteractive() const;
	bool getSavePrivateKeyPassword() const;
	bool getUseHttpProxyAuth () const;
	bool getUseOnlyCaCertAndUserAuth() const;
	bool getUseMailAddressAsIdentifier() const;
	bool getUseRightNextHop() const;
	bool getUseLeftNextHop() const;
	bool getUsePkcs11Providers() const;
	bool getAllowEmptyPrivateKeyPassword() const;
	bool getAllowIpAddressChangeOfPeer() const;
	bool getUseSearchDomainInResolvConf() const;
	bool getDisableDataEncryption() const;
	bool getUseAuthenticationAlgorithm() const;
	bool getFixPathMtuDiscoveryProblem() const;
	bool getUseRemoteNetwork() const;



	/**
	 *   Sets the connection type
	 * @param type The type
	 */
	void setConnectionType( ConnectionType type );

	/**
	 *   Sets the name of the profile
	 * @param Name The new name
	 */
	void setName( const QString &Name );

	/**
	 *   Sets the IP/DNS name of the gateway
	 * @param Gateway the IP/DNS name
	 */
	void setGateway( const QString &Gateway );

	/**
	 *   Sets the remote ID (cisco)
	 * @param ID The ID
	 */
	void setID( const QString &ID );

	/**
	 *   Sets the group password (cisco)
	 * @param GroupPassword The password
	 */
	void setGroupPassword( const QString &GroupPassword );

	/**
	 *   Sets the username (cisco)
	 * @param Username The username
	 */
	void setUserName( const QString &Username );

	/**
	 *   Sets the user password
	 * @param UserPassword The password
	 */
	void setUserPassword( const QString &UserPassword );

	/**
	 *   Sets if user password should be stored or not
	 * @param saveUserPassword True if password should be stored
	 */
	void setSaveUserPassword( bool saveUserPassword );

	/**
	 *  Sets if group password should be stored or not
	 * @param saveGroupPassword True if password should be stored
	 */
	void setSavePsk( bool savePsk );

	/**
	 *   Sets the IKE group (cisco)
	 * @param IkeGroup The group
	 */
	void setIkeGroup( const QString &IkeGroup );
	void setEncryptionAlgorithm( const QString &EncryptionAlgorithm );
	void setAuthenticationAlgorithm( const QString &AuthenticationAlgorithm );

	void setPerfectForwardSecrety( const QString &PerfectForwardSecrecy );
	void setNtDomainName( const QString &Name );
	void setApplicationVersion( const QString &version );
	void setUseSingleDes( bool useSingleDes );
	void setLocalPort( int port );
	void setRemotePort( int port );
	void setUseIkeGroup( bool useIkeGroup );
	void setUsePerfectForwardSecrety( bool usePerfectForwardSecrety );
	void setUseNtDomainName( bool useNtDomainName );
	void setUseApplicationVersion( bool useApplicationVersion );
	void setUseLocalPort( bool useLocalPort );
	void setUseRemotePort( bool useRemotePort );
	void setUseAdvancedSettings( bool useAdvancedSettings );
	void setUseGlobalIpsecSecret( bool useGlobalIpsecSecret );
	void setRemoteNetAddr( const QString &RemoteNetAddr );
	void setRemoteNetMask( const QString &RemoteNetMask );
	void setPreSharedKey( const QString &PreSharedKey );
	void setX509Certificate( const QString &x509Certificate );
	void setCaCertificate( const QString &CaCertificate );
	void setNetworkDevice( const QString &NetworkDevice );
	void setCertPath( const QString &CertPath );
	void setAuthType( AuthenticationType authtype );
	void setDoPingIP( bool pingIP );
	void setPingHostIP( const QString &pingHostIP );
	void setPrivateKeyPass( const QString &PrivateKeyPass );
	void setPrivateKey( const QString &PrivateKey );
	void setUseSpecialRemoteID( bool useSpecialRemoteID );
	void setUseSpecialLocalID( bool useSpecialLocalID );
	void setSpecialRemoteID( const QString &SpecialRemoteID );
	void setSpecialLocalID( const QString &SpecialLocalID );
	void setLocalIDType( const QString &LocalIDType);
	void setUseUdp( bool useUdp );
	void setUseUdpPort( bool useUdpPort);
	void setUdpPort( int UdpPort );
	void setUseDnsUpdate(bool useDnsUpdate );
	void setUseDnsServer(bool useDnsServer );
	void setDnsServer(const QString &DnsServer );
	void setUseGetDnsFromPeer(bool useGetDnsFromPeer );
	void setRefuse40BitEncryption(bool refuse40BitEncryption );
	void setRefuse128BitEncryption(bool refuse128BitEncryption );
	void setAllowStatefulMode(bool allowStatefulMode );
	void setRequireMppe(bool requireMppe );
	void setRefuseEap(bool refuseEap );
	void setUseNoIpDefault (bool useNoIpDefault );
	void setDisableMPPEComp (bool disableMPPEComp );
	void setLocalVirtualIP( const QString &LocalVirtualIP );
	void setRemoteVirtualIP( const QString &RemoteVirtualIP );
	void setPreSharedKeyFile( const QString &PreSharedKeyFile );
	void setExecuteCmdBeforeConnect(bool executeCmdBeforeConnect);
	void setExecuteCmdAfterConnect(bool executeCmdAfterConnect);
	void setExecuteCmdBeforeDisconnect(bool executeCmdBeforeDisonnect);
	void setExecuteCmdAfterDisconnect(bool executeCmdAfterDisonnect);
	void setCommandBeforeConnect(const QString &CommandBeforeConnect);
	void setCommandAfterConnect(const QString &CommandAfterConnect);
	void setCommandBeforeDisconnect(const QString &CommandBeforeDisconnect);
	void setCommandAfterDisconnect(const QString &CommandAfterDisconnect);
	void setUseNoBsdComp(bool useNoBsdComp);
	void setUseNoDeflate(bool useNoDeflate);
	void setReplaceDefaultRoute(bool setReplaceDefaultRoute);
	void setUseMtu(bool useMtu);
	void setUseMru(bool useMru);
	void setMtu (int Mtu);
	void setMru (int Mru);
	void setUseVirtualIP (bool useVirtualIP);
	void setVirtualIP( const QString &VirtualIP );
	void setPskIsInFile(bool PskIsInFile );
	void setUseAdditionalNetworkRoutes( bool useAdditionalNetworkRoutes );
	void setAdditionalNetworkRoutes( QStringList AdditionalNetworkRoutes );
	void setUseSpecialServerCertificate(bool useSpecialServerCertificate);
	void setSpecialServerCertificate(const QString &SpecialServerCertificate);
	void setHashAlgo(const QString &HashAlgo);
	void setTunnelDeviceType(const QString &TunnelDeviceType);
	void setUseUserdefinedPort(bool useUserdefinedPort);
	void setUserdefinedPort(int UserdefinedPort);
	void setDescription( const QString &Description );
	void setNsCertType( const QString &NsCertType );
	void setUseNsCertType ( bool useNsCertType );
	void setUseConnectionStatusCheck ( bool useConnectionStatusCheck );
	void setConnectionStatusCheckSuccessCount ( int connectionStatusCheckSuccessCount );
	void setConnectionStatusInterval ( int connectionStatusInterval );
	void setDoReconnectAfterConnectionLost( bool doReconnectAfterConnectionLost );
	void setDisableLzoCompression( bool disableLzoCompression);
	void setAuthWithUsernameAndPassword( bool authWithUsernameAndPassword );
	void setAllowEmptyGroupPassword( bool allowEmptyGroupPassword );
	void setUseUserdefiniedCipher( bool useUserdefiniedCipher );
	void setUserdefiniedCipher( QString UserdefiniedCipher );
	void setUseRedirectGateway( bool useRedirectGateway );
	void setUseTlsAuth( bool useTlsAuth );
	void setTlsAuthFile( QString TlsAuthFile );
	void setUseHttpProxy( bool useHttpProxy );
	void setHttpProxy( QString HttpProxy );
	void setHttpProxyPort ( int HttpProxyPort );
	void setHttpProxyTimeout ( int HttpProxyTimeout );
	void setDontSaveUsername( bool dontSaveUsername );
	void setUseModeConfig( bool useModeConfig );
	void setExchangeMode( QString ExchangeMode );
	void setUseReconnectDelay( bool useReconnectDelay );
	void setReconnectDelay( int ReconnectDelay );
	void setUseTlsRemoteHost( bool useTlsRemoteHost );
	void setTlsRemoteHost( QString TlsRemoteHost );
	void setDisableOpportunisticEncryption( bool );
	void setRightNextHop( QString RightNextHop );
	void setLeftNextHop( QString LeftNextHop );
	void setUseMssfix( bool useMssfix );
	void setUseFragment( bool useFragment);
	void setMssfix( int Mssfix );
	void setFragment( int Fragment );
	void setPeerTimeout( int PeerTimeout );
	void setDisableCcp( bool disableCcp );
	void setUseSmartcard( bool useSmartcard );
	void setUseXauthInteractive( bool useXauthInteractive );
	void setSavePrivateKeyPassword ( bool savePrivateKeyPassword );
	void setUseHttpProxyAuth (bool useHttpProxyAuth );
	void setHttpProxyAuthType(QString HttpProxyAuthType );
	void setHttpProxyUser(QString HttpProxyUser );
	void setHttpProxyPass(QString HttpProxyPass );
	void setUseOnlyCaCertAndUserAuth(bool useOnlyCaCertAndUserAuth );
	void setUseMailAddressAsIdentifier(bool useMailAddressAsIdentifier );
	void setUseRightNextHop(bool useRightNextHop);
	void setUseLeftNextHop (bool useLeftNextHop);
	void setPkcs11Providers(QString Pkcs11Providers);
	void setPkcs11SlotType(QString Pkcs11SlotType);
	void setPkcs11Slot(QString Pkcs11Slot);
	void setPkcs11IdType(QString Pkcs11IdType);
	void setPkcs11Id(QString Pkcs11Id);
	void setPkcs11SignMode(QString Pkcs11SignMode);
	void setUsePkcs11Providers(bool usePkcs11Providers);
	void setAllowEmptyPrivateKeyPassword (bool allowEmptyPrivateKeyPassword );
	void setAllowIpAddressChangeOfPeer( bool allowIpAddressChangeOfPeer );
	void setAuthMethod( QString AuthMethod );
	void setCommandAfterConnectDelayTime( int CommandAfterConnectDelayTime );
	void setUseSearchDomainInResolvConf( bool useSearchDomainInResolvConf );
	void setSearchDomainInResolvConf(QString SearchDomainInResolvConf );
	void setAuthenticationDirection(QString AuthenticationDirection );
	void setCiscoNatMode(QString CiscoNatMode );
	void setIpsecEsp(QString IpsecEsp);
	void setIpsecIke(QString IpsecIke);
	void setVtunProfile(QString VtunProfile);
	void setDisableDataEncryption(bool disableDataEncryption);
	void setUseAuthenticationAlgorithm(bool useAuthenticationAlgorithm);
	void setFixPathMtuDiscoveryProblem( bool fixPathMtuDiscoveryProblem);
	void setUseRemoteNetwork(bool useRemoteNetwork);
	void setIpsecVpnMode(QString IpsecVpnMode);

protected:
	QString Name; //< Name of the profile
	QString Gateway; //< IP/DNS name of the gateway
	QString ID; //< ID of remote gateway
	QString Username; //< Username (cisco)
	QString UserPassword; //< User password (cisco)
	QString IkeGroup; //< DH group for PFS (cisco,racoon)
	QString PerfectForwardSecrecy; //< Type of PFS (cisco, racoon)
	QString EncryptionAlgorithm; // phase 2 (ipsec)
	QString AuthenticationAlgorithm; // phase 2 (ipsec)
	QString NtDomainName; //< NT domain name for authentication (cisco/pptp)
	QString ApplicationVersion; //< userdefined application version (cisco)
	QString RemoteNetAddr; //< Remote network addr of VPN
	QString RemoteNetMask; //< Remote network mask of VPN
	QString PreSharedKey; //< Pre shared key (freeswan/racoon)
	QString x509Certificate; //< Path to X.509 certificate file
	QString CaCertificate; //< Path to CA certificate file
	QString NetworkDevice; //< Network device
	QString PrivateKeyPass; //< Password for private key
	QString PrivateKey; //< Path to private key file
	QString CertPath; //< Global certificate path
	QString AuthType; //< Authentication type (cert/psk)
	QString pingHostIP; //< IP of the host which should be pinged
	QString SpecialRemoteID; //< userdefined ID of remote gateway
	QString SpecialLocalID; //< userdefined ID of remote gateway
	QString LocalIDType; //< type of the local ID for racoon
	QString LocalVirtualIP; //< Local virtual IP for tunnel (openvpn)
	QString RemoteVirtualIP; //< Remote virtual IP for tunnel (openvpn)
	QString PreSharedKeyFile; //< for openvpn
	QString HashAlgo; // Hash algorithm for racoon
	QString UseUserdefiniedCipher; //< Cipher for OpenVPN
	QString DnsServer; //< userdefined DNS server for pptp
	QString CommandBeforeConnect;
	QString CommandAfterConnect;
	QString CommandBeforeDisconnect;
	QString CommandAfterDisconnect;
	QString Description; //< Description of the profile
	QString SpecialServerCertificate;
	QString VirtualIP; //< Virtual IP for freeswan/racoon
	QString TunnelDeviceType; //< Type of tunnel device which should be used e.g. tun or tap  for openvpn
	QString NsCertType; //< openvpn
	QString UserdefiniedCipher; //< Ciphers for OpenVPN
	QString TlsAuthFile;
	QString HttpProxy;
	QString ExchangeMode; //< IKE exchange mode
	QString TlsRemoteHost;
	QString RightNextHop; // freeswan
	QString LeftNextHop; // freeswan
	QString HttpProxyAuthType;
	QString HttpProxyUser;
	QString HttpProxyPass;
	QString Pkcs11Providers;
	QString Pkcs11SlotType;
	QString Pkcs11Slot;
	QString Pkcs11IdType;
	QString Pkcs11Id;
	QString Pkcs11SignMode;
	QString AuthMethod; //< authorization method for pptp (chap/pap)
	QString SearchDomainInResolvConf;
	QString AuthenticationDirection; //< openvpn key and tls-auth direction (none,0,1)
	QString CiscoNatMode;
	QString IpsecEsp; // IPsec ESP mode
	QString IpsecIke; //< IPsec IKE mode
	QString VtunProfile;
	QString IpsecVpnMode; //< IPSec tunnel type (transport | tunnel)

	QStringList AdditionalNetworkRoutes;

	bool saveUserPassword; //< True if the user password should be stored (cisco)
	bool savePsk; //< True if the PSK should be stored
	bool useAdvancedSettings; //< True if advanced settings should be used (cisco)
	bool useIkeGroup; //< True if userdefined IKE group should be used
	bool usePerfectForwardSecrety; //< True if userdefined PFS should be used
	bool useNtDomainName; //< True if NT domain name should eb used for authentication
	bool useApplicationVersion; //< True if userdefined application version should be used
	bool useLocalPort; //< True if userdefined local port should be used
	bool useRemotePort; //< True if userdefined remote port should be used
	bool useSingleDes; //< True if DES instead of 3DES should be used
	bool useGlobalIpsecSecret; //< True if global group password from /etc/vpnc.conf should be used
	bool doPingIP; //< True if pingHostIP should be pinged after connection is established
	bool useSpecialRemoteID; //< True if userdefined ID of remote gateway instead of certificate issuer should be used
	bool useSpecialLocalID; //< True if userdefined ID of local instead of certificate client should be used
	bool useUdp; //< True if NAT-T should be used
	bool useUdpPort; //< True if userdefined UDP port should be used
	bool useDnsUpdate; //< False if we don't update resolv.conf
	bool useDnsServer; //< True if userdefined DNS server should be used
	bool useGetDnsFromPeer; //< True if DNS servers should be retrieved from peer (pptp)bool
	bool refuse40BitEncryption; //< True if 40 bit encryption is refused (pptp)
	bool refuse128BitEncryption; //< True if 128 bit encryption is refused (pptp)
	bool allowStatefulMode;
	bool requireMppe; //< True if MPPE is required (pptp)
	bool refuseEap; //< True if EAP is refused (pptp)
	bool useNoIpDefault;
	bool disableMPPEComp;
	bool executeCmdBeforeConnect;
	bool executeCmdAfterConnect;
	bool executeCmdBeforeDisconnect;
	bool executeCmdAfterDisconnect;
	bool useNoBsdComp;
	bool useNoDeflate;
	bool replaceDefaultRoute; //< for PPTP
	bool useMtu;
	bool useMru;
	bool useVirtualIP; //< freeswan/racoon
	bool PskIsInFile; //< Read PSK from file
	bool useAdditionalNetworkRoutes;
	bool useSpecialServerCertificate;
	bool useUserdefinedPort;
	bool useNsCertType; // <openvpn
	bool useConnectionStatusCheck; //< if true it checks if the gateway is alive within a given time
	bool doReconnectAfterConnectionLost;
	bool disableLzoCompression;
	bool authWithUsernameAndPassword; //< openvpn
	bool allowEmptyGroupPassword; //< allows empty group password for vpnc
	bool useUserdefiniedCipher;
	bool useRedirectGateway;//< redirect gateway for openvpn
	bool useTlsAuth; //< Add an additional layer of HMAC authentication on top of the TLS control channel to protect against DoS attacks (openvpn)
	bool useHttpProxy;
	bool dontSaveUsername;
	bool useModeConfig;
	bool useReconnectDelay;
	bool useTlsRemoteHost;
	bool disableOpportunisticEncryption;
	bool useMssfix;
	bool useFragment;
	bool disableCcp;
	bool useSmartcard;
	bool useXauthInteractive;
	bool savePrivateKeyPassword;
	bool useHttpProxyAuth;
	bool useOnlyCaCertAndUserAuth; //< use only a CA certificate and authentication with username and password (openvpn)
	bool useMailAddressAsIdentifier; //< x509 cert
	bool useRightNextHop;
	bool useLeftNextHop;
	bool usePkcs11Providers;
	bool allowEmptyPrivateKeyPassword;
	bool allowIpAddressChangeOfPeer;
	bool useSearchDomainInResolvConf;
	bool disableDataEncryption;
	bool useAuthenticationAlgorithm;
	bool fixPathMtuDiscoveryProblem; //< see http://pptpclient.sourceforge.net/howto-diagnosis.phtml#connections_freeze
	bool useRemoteNetwork;
	int Mtu;
	int Mru;
	int UdpPort; //< Port number of UDP port
	int LocalPort; //< userdefined local port
	int RemotePort; //< userdefined remote port
	int UserdefinedPort;
	int connectionStatusCheckSuccessCount; //< in which count a check must be successful
	int connectionStatusInterval; //< interval which is used for check
	int HttpProxyPort;
	int HttpProxyTimeout;
	int ReconnectDelay;
	int Mssfix;
	int Fragment;
	int PeerTimeout; // timeout given from peer (cisco for example gives that)
	int CommandAfterConnectDelayTime; //< time which is wait after connect before the cmd after connect should be executed

public:
	ConnectionType connectiontype; //< Type of the connection (cisco, freeswan, racoon, etc.)
	AuthenticationType authtype; //< Type of authentication (cert, psk)

};

#endif
