/***************************************************************************
*   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 <tqstring.h>
#include <tqobject.h>
#include <tqstringlist.h>

/**
* holds the data for a account
* @author Christoph Thielecke
*/
class VpnAccountData : public TQObject
{
public:
	enum ConnectionType {cisco=0, racoon=1, freeswan=2, pptp=3,openvpn=4,l2tpd_racoon=5,l2tpd_freeswan=6,ciscoorig=7,vtun=8,ssh=9,other=99};
	enum AuthenticationType {cert=0, psk=1, hybrid=2, unknownauth=99};
	enum L2tpDaemonType  { l2tpd=0, openl2tp=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 TQString &Name);

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

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

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

	AuthenticationType getAuthType() const; //< returns AuthType
	TQStringList 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 getRefuse40BitEncryption() const;
	bool getRefuse128BitEncryption() const;
	bool getAllowStatefulMode() const;
	bool getRequireMppe() 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 getUseDomainInResolvConf() const;
	bool getDisableDataEncryption() const;
	bool getUseAuthenticationAlgorithm() const;
	bool getFixPathMtuDiscoveryProblem() const;
	bool getUseRemoteNetwork() const;
	bool getDisableHeaderCompression() const;
	bool getDisableMagicNumberNegotiation() const;
	bool getDisableIpx() const;
	bool getDisableProtocolFieldCompression() const;
	bool getDisableAdressControlCompression() const;
	bool getUseCustomIke() const;
	bool getUseCustomEsp() const;
	bool getVerifyCaCert() const;
	bool getUseDpdIdleTimeout() const;
	bool getHideGroupPasswordInAccountDataDialog() const;
	bool getUseLeftSourceIp() const;
	bool getUseRightSourceIp() const;
	bool getUseVirtualSubnetworks() const;
	bool getDisablePushFromServer () const;
	bool getDisableBind() const;
	bool getUseRenegSec() const;
	bool getUseTunnelPing() const;
	bool getUseTunnelPingRestart() const;
	bool getRequireEap() const;
	bool getUseSshConfigRemoteScript() const;
	bool getAskUserPasswordOnEachConnect() const;
	bool getUseCiscoCertStore() const;
	bool getUseNat() const;
	L2tpDaemonType getL2tpDaemon() 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 TQString &Name );

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

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

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

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

	/**
	 *   Sets the user password
	 * @param UserPassword The password
	 */
	void setUserPassword( const TQString &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 TQString &IkeGroup );
	void setEncryptionAlgorithm( const TQString &EncryptionAlgorithm );
	void setAuthenticationAlgorithm( const TQString &AuthenticationAlgorithm );

	void setPerfectForwardSecrety( const TQString &PerfectForwardSecrecy );
	void setNtDomainName( const TQString &Name );
	void setApplicationVersion( const TQString &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 TQString &RemoteNetAddr );
	void setRemoteNetMask( const TQString &RemoteNetMask );
	void setPreSharedKey( const TQString &PreSharedKey );
	void setX509Certificate( const TQString &x509Certificate );
	void setCaCertificate( const TQString &CaCertificate );
	void setNetworkDevice( const TQString &NetworkDevice );
	void setCertPath( const TQString &CertPath );
	void setAuthType( AuthenticationType authtype );
	void setDoPingIP( bool pingIP );
	void setPingHostIP( const TQString &pingHostIP );
	void setPrivateKeyPass( const TQString &PrivateKeyPass );
	void setPrivateKey( const TQString &PrivateKey );
	void setUseSpecialRemoteID( bool useSpecialRemoteID );
	void setUseSpecialLocalID( bool useSpecialLocalID );
	void setSpecialRemoteID( const TQString &SpecialRemoteID );
	void setSpecialLocalID( const TQString &SpecialLocalID );
	void setLocalIDType( const TQString &LocalIDType);
	void setRemoteIDType( const TQString &RemoteIDType);
	void setUseUdp( bool useUdp );
	void setUseUdpPort( bool useUdpPort);
	void setUdpPort( int UdpPort );
	void setUseDnsUpdate(bool useDnsUpdate );
	void setUseDnsServer(bool useDnsServer );
	void setDnsServer(const TQString &DnsServer );
	void setRefuse40BitEncryption(bool refuse40BitEncryption );
	void setRefuse128BitEncryption(bool refuse128BitEncryption );
	void setAllowStatefulMode(bool allowStatefulMode );
	void setRequireMppe(bool requireMppe );
	void setUseNoIpDefault (bool useNoIpDefault );
	void setDisableMPPEComp (bool disableMPPEComp );
	void setLocalVirtualIP( const TQString &LocalVirtualIP );
	void setRemoteVirtualIP( const TQString &RemoteVirtualIP );
	void setPreSharedKeyFile( const TQString &PreSharedKeyFile );
	void setExecuteCmdBeforeConnect(bool executeCmdBeforeConnect);
	void setExecuteCmdAfterConnect(bool executeCmdAfterConnect);
	void setExecuteCmdBeforeDisconnect(bool executeCmdBeforeDisonnect);
	void setExecuteCmdAfterDisconnect(bool executeCmdAfterDisonnect);
	void setCommandBeforeConnect(const TQString &CommandBeforeConnect);
	void setCommandAfterConnect(const TQString &CommandAfterConnect);
	void setCommandBeforeDisconnect(const TQString &CommandBeforeDisconnect);
	void setCommandAfterDisconnect(const TQString &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 TQString &VirtualIP );
	void setPskIsInFile(bool PskIsInFile );
	void setUseAdditionalNetworkRoutes( bool useAdditionalNetworkRoutes );
	void setAdditionalNetworkRoutes( TQStringList AdditionalNetworkRoutes );
	void setUseSpecialServerCertificate(bool useSpecialServerCertificate);
	void setSpecialServerCertificate(const TQString &SpecialServerCertificate);
	void setHashAlgo(const TQString &HashAlgo);
	void setTunnelDeviceType(const TQString &TunnelDeviceType);
	void setUseUserdefinedPort(bool useUserdefinedPort);
	void setUserdefinedPort(int UserdefinedPort);
	void setDescription( const TQString &Description );
	void setNsCertType( const TQString &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( TQString UserdefiniedCipher );
	void setUseRedirectGateway( bool useRedirectGateway );
	void setUseTlsAuth( bool useTlsAuth );
	void setTlsAuthFile( TQString TlsAuthFile );
	void setUseHttpProxy( bool useHttpProxy );
	void setHttpProxy( TQString HttpProxy );
	void setHttpProxyPort ( int HttpProxyPort );
	void setHttpProxyTimeout ( int HttpProxyTimeout );
	void setDontSaveUsername( bool dontSaveUsername );
	void setUseModeConfig( bool useModeConfig );
	void setExchangeMode( TQString ExchangeMode );
	void setUseReconnectDelay( bool useReconnectDelay );
	void setReconnectDelay( int ReconnectDelay );
	void setUseTlsRemoteHost( bool useTlsRemoteHost );
	void setTlsRemoteHost( TQString TlsRemoteHost );
	void setDisableOpportunisticEncryption( bool );
	void setRightNextHop( TQString RightNextHop );
	void setLeftNextHop( TQString 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(TQString HttpProxyAuthType );
	void setHttpProxyUser(TQString HttpProxyUser );
	void setHttpProxyPass(TQString HttpProxyPass );
	void setUseOnlyCaCertAndUserAuth(bool useOnlyCaCertAndUserAuth );
	void setUseMailAddressAsIdentifier(bool useMailAddressAsIdentifier );
	void setUseRightNextHop(bool useRightNextHop);
	void setUseLeftNextHop (bool useLeftNextHop);
	void setPkcs11Providers(TQString Pkcs11Providers);
	void setPkcs11SlotType(TQString Pkcs11SlotType);
	void setPkcs11Slot(TQString Pkcs11Slot);
	void setPkcs11IdType(TQString Pkcs11IdType);
	void setPkcs11Id(TQString Pkcs11Id);
	void setPkcs11SignMode(TQString Pkcs11SignMode);
	void setUsePkcs11Providers(bool usePkcs11Providers);
	void setAllowEmptyPrivateKeyPassword (bool allowEmptyPrivateKeyPassword );
	void setAllowIpAddressChangeOfPeer( bool allowIpAddressChangeOfPeer );
	void setAuthMethod( TQString AuthMethod );
	void setCommandAfterConnectDelayTime( int CommandAfterConnectDelayTime );
	void setUseSearchDomainInResolvConf( bool useSearchDomainInResolvConf );
	void setUseDomainInResolvConf( bool useDomainInResolvConf );
	void setSearchDomainInResolvConf(TQString SearchDomainInResolvConf );
	void setDomainInResolvConf(TQString DomainInResolvConf );
	void setAuthenticationDirection(TQString AuthenticationDirection );
	void setCiscoNatMode(TQString CiscoNatMode );
	void setIpsecEsp(TQString IpsecEsp);
	void setIpsecIke(TQString IpsecIke);
	void setVtunProfile(TQString VtunProfile);
	void setDisableDataEncryption(bool disableDataEncryption);
	void setUseAuthenticationAlgorithm(bool useAuthenticationAlgorithm);
	void setFixPathMtuDiscoveryProblem( bool fixPathMtuDiscoveryProblem);
	void setUseRemoteNetwork(bool useRemoteNetwork);
	void setIpsecVpnMode(TQString IpsecVpnMode);
	void setDisableHeaderCompression(bool disableHeaderCompression);
	void setDisableMagicNumberNegotiation(bool disableMagicNumberNegotiation);
	void setDisableIpx(bool disableIpx);
	void setDisableProtocolFieldCompression(bool disableProtocolFieldCompression);
	void setDisableAdressControlCompression(bool disableAdressControlCompression);
	void setUseCustomIke(bool useCustomIke );
	void setUseCustomEsp(bool useCustomEsp);
	void setVerifyCaCert(bool verifyCaCert);
	void setUseDpdIdleTimeout(bool useDpdIdleTimeout);
	void setDpdIdleTimeout(int DpdIdleTimeout);
	void setHideGroupPasswordInAccountDataDialog(bool hideGroupPasswordInAccountDataDialog);
	void setMaxConnectTries(int MaxConnectTries);
	void setL2tpDaemon(L2tpDaemonType L2tpDaemon );
	void setUseLeftSourceIp(bool useLeftSourceIp);
	void setUseRightSourceIp(bool useLeftRightIp);
	void setLeftSourceIp(TQString LeftSourceIp);
	void setRightSourceIp(TQString RightSourceIp);
	void setUseVirtualSubnetworks(bool useVirtualSubnetworks);
	void setVirtualSubnetworks(TQString VirtualSubnetworks);
	void setDisablePushFromServer( bool disablePushFromServer);
	void setDisableBind( bool disableBind );
	void setUseRenegSec(bool useRenegSec);
	void setRenegSec(int RenegSec);
	void setUseTunnelPing(bool useTunnelPing);
	void setTunnelPing(int TunnelPing);
	void setUseTunnelPingRestart(bool useTunnelPingRestart);
	void setTunnelPingRestart(int TunnelPingRestart);
	void setRequireEap(bool requireEap);
	void setUseSshConfigRemoteScript(bool useSshConfigRemoteScript);
	void setSshConfigRemoteScript( TQString SshConfigRemoteScript);
	void setAskUserPasswordOnEachConnect ( bool askUserPasswordOnEachConnect );
	void setUseCiscoCertStore(bool useCiscoCertStore);
	void setUseNat(bool useNat);

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

	TQStringList 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 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 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, xauth
	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 useDomainInResolvConf;
	bool disableDataEncryption;
	bool useAuthenticationAlgorithm;
	bool fixPathMtuDiscoveryProblem; //< see http://pptpclient.sourceforge.net/howto-diagnosis.phtml#connections_freeze
	bool useRemoteNetwork; //< specify a remote network
	bool disableHeaderCompression; //< Disable Van Jacobson style TCP/IP header compression in both the transmit and the receive direction.
	bool disableMagicNumberNegotiation; //< Disable magic number negotiation. With this option, pppd cannot detect a looped-back line. This option should only be needed if the peer is buggy.
	bool disableIpx; //< Disable the IPXCP and IPX protocols.
	bool disableProtocolFieldCompression; //< Disable protocol field compression negotiation in both the receive and the transmit direction. 
	bool disableAdressControlCompression; //< Disable Address/Control compression in both directions (send and receive).
	bool useCustomIke;
	bool useCustomEsp;
	bool verifyCaCert; //< verify ca cert of remote host on racoon
	bool useDpdIdleTimeout; //< dead peer detection idle timeout (vpnc)
	bool hideGroupPasswordInAccountDataDialog;
	bool useLeftSourceIp;
	bool useRightSourceIp;
	bool useVirtualSubnetworks;
	bool disablePushFromServer; //< openvpn, no pull mode
	bool disableBind; //< Do not bind to local address and port. The IP stack will allocate a dynamic port for returning packets. Since the value of the dynamic port could not be known in advance by a peer, this option is only suitable for peers which will be initiating connections by using the --remote option.
	bool useRenegSec;
	bool useTunnelPing;
	bool useTunnelPingRestart;
	bool requireEap;
	bool useSshConfigRemoteScript;
	bool askUserPasswordOnEachConnect; //< ask for user password on each connect
	bool useCiscoCertStore;
	bool useNat;
	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 MaxConnectTries;
	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
	int DpdIdleTimeout;
	int RenegSec;
	int TunnelPing;
	int TunnelPingRestart;

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

};

#endif