You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvpnc/src/kvpnc.h

550 lines
16 KiB

/***************************************************************************
* Copyright (C) 2004 by Christoph Thielecke *
* crissi99@gmx.de *
* *
* Contains parts of code from klcc project *
* (Peter Simonsson <psn@linux.se>). *
* *
* 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. *
***************************************************************************/
//BEGIN #includes
#ifndef __KVPNC_H__
#define __KVPNC_H__
#include <tqwidget.h>
#include <tqstrlist.h>
#include <tqpixmap.h>
#include <tqtimer.h>
#include <tqfile.h>
#include <tqdatetime.h>
#include <tqptrlist.h>
#include <tqlabel.h>
#include <tqtextstream.h>
#include <tqpixmap.h>
#include <tqpoint.h>
#include <tqsize.h>
#include <tqpopupmenu.h>
#include <kapp.h>
#include <tdemainwindow.h>
#include <tdeaction.h>
#include <kprocess.h>
#include <kwizard.h>
#include <kapp.h>
#include <kprocess.h>
#include <knotifyclient.h>
#include <knotifydialog.h>
#include <kfeedback.h>
#include <dcopobject.h>
#include "kvpnckicker.h"
#include "preferencesdialog.h"
#include "mainview.h"
#include "vpnaccountdata.h"
#include "networkinterface.h"
#include "kvpncconfig.h"
#include "toolinfo.h"
#include "openvpnmanagementhandler.h"
// ID for statusbar
#define ID_STATUS_MSG 1
#define ID_CONNECTION_MSG 2
#define ID_FLASH_MSG 3
//END #includes
/**
* main class of kvpnc
* @author Christoph Thielecke
*/
class KVpnc : public TDEMainWindow , DCOPObject
{
Q_OBJECT
K_DCOP
public:
/**
* Konstruktor
* @param parent Parent widget
* @param name Name of the Mainwindow
*/
KVpnc( TDEApplication *parent, TQWidget *qparent = 0, const char *name = 0 );
/**
* Destruktor
*/
~KVpnc();
protected:
/**
* init the actions
*/
void initAction();
/**
* init the main view
*/
void initView();
/**
* init the statusbar
*/
void initStatusbar();
/**
* init the kicker system tray icon
*/
void initDockWindow();
/**
* sets the gui status
* @param status The status that will be set
*/
void setGuiStatus( int status );
/**
* terminates the connection
* @param proc the connect process
*/
void terminateConnection ( TQProcess *proc );
/**
* called when quit requested
*/
virtual bool queryExit();
void saveProperties( TDEConfig* );
void readProperties( TDEConfig* );
public:
void restore(TDEConfig *config, int i);
void restore();
/**
* return the user id of the certificate
* @param Cert certificate from wich should be extracted
* @param user true if user id, false if issuer id
*/
TQString getX509CertificateID( TQString Cert, bool user );
void profileAddedOrDeleted();
bool setVirtualIP();
private:
// FIXME also declared at kvpncconfig -> made it only in one place
enum ConnectionStatus {disconnected=0, connecting=1, connected=2};
enum LogType {info=0, remote=1, error=2, success=3, debug=4};
TDEApplication *parent;
TQStringList *env;
KVpncConfig *GlobalConfig;
KVpncKicker* KVpncDock; //< kicker menu
TDEAction* ConnectAction; //< connect action
TDEAction* DisconnectAction; //< disconnect action
TDEAction *NewSessionAction;
TDEAction *SaveSessionAction;
TDEAction *DeleteSessionAction;
TDEAction *RenameSessionAction;
TDEAction *ImportSessionAction;
TDEAction *ImportOpenvpnProfileAction;
TDEAction *ExportOpenvpnProfileAction;
TDEAction *ImportFreeswanProfileAction;
TDEAction *ImportFritzboxProfileAction;
TDEAction *ImportKvpncSettingsAction;
TDEAction *ExportKvpncSettingsAction;
TDEAction *ImportCertAction;
TDEAction *SelectAction; //< line select action
TDEAction *ProfileManagerAction;
TDEAction *NewProfileWizardAction;
TDEAction *HelpAction;
TDEAction *PrefAction;
// TDEAction *DonateAction;
TDEAction *ReportBugAction;
TDEAction *SendFeedbackMailAction;
TDEAction *PreferencesAction; //< show preferences dialog
TDEAction *ManageCiscoCertAction; //< show cisco cert manager
TDEAction *CiscoCertEnrollmentAction; //< show cisco cert enrollment dialog
TDEToggleAction *ToolsInfoAction;
TDEToggleAction *VpnTypesInfoAction;
TDEToggleAction *LogViewerAction;
TDEToggleAction *ShowToolbarAction; //< toggle toolbar on/off
TDEToggleAction *ShowStatusbarAction; //< toggle statusbar on/off
TDEToggleAction *DebugconsoleAction; //< toggle debug console
TDEToggleAction *GenerateOpenvpnKeyAction; //< generate OpenVPN key
MainView* mw; //< Main gui
TQTimer timer;
TQTimer durationTimer; //< timer for counting connection time
TQTimer IpsecWhackStatusTimer; //< getting ipsec status periodically
TQTimer L2tpWaitForPppUpTimer; //< getting ppp device
int connectCounter; //< counter for connecting
int RacoonctlConnectCounter; //<< counter for waiting of adminsock
int sec, min, hour;
int racoon_tunnel_state; // 0 => no tunnel, 1 => first tunnel, 2 => second tunnel
int prevConnectionState; //< needed for setGuiStatus(), holds previous state before disconnect (connected, connecting)
bool cancelClicked;
bool deviceaddrstr2addr;
bool pingtest;
bool getUserID;
bool X509CertificateExtractRunning;
bool X509CertificateExtractUser;
bool setVirtualIPSuccess;
bool AuthRetry;
bool quitFromKicker;
bool shutdownIsCalled;
bool stopContinue; //< if something happens that causes to abort now
bool ciscoVpncRunning; //< true if vpnclient is started and cipsec0 is up
bool showProfilesOnly; //< if true only the profiles will shown in preferencesdialog
bool IpsecStartingInProgress;
bool IpsecGotError;
bool IpsecPhase1Up;
bool IpsecPhase2Up;
bool IpsecStatusCheck;
bool pppdHasReplacedefaultrouteSupport;
TQString OldDefaultroute;
TQString VpncConnectScript;
TQString VpncDisconnectScript;
TQString tmpPath;
TQString ProcessMsg_connect;
TQString ProcessMsg_disconnect;
TQString deviceaddrstr;
TQString deviceaddr;
TQString tmpInterface;
TQString LocalIP;
TQString VpncGateway;
TQString PptpGateway;
TQString VpncScript;
TQString issuerID; // for id extract
TQString userID; // for id extract
TQString TunnelInterfaceIP;
TQString TmpDns1;
TQString TmpDns2;
TQString VpncDevice;
TQString CiscoVpncDevice;
TQString L2tpPppDevice;
TQString PppdDevice;
TQString OpenvpnDevice;
TQString SshDevice;
TQString IpsecType; //< openswan, strongswan, freeswan
TQString Pkcs11PIN;
TQString PrettyTypeString;
TQString PrettyStatusMessage;
TQProcess *VpncProcess;
TDEProcess *IpsecConnectProcess;
TQProcess *DisconnectProcess;
TQProcess *CiscoVpncProcess; //< vpnclient
TQProcess *RacoonProcess; //< racoon
TQProcess *RacoonHelperProcess;
TQProcess *IpsecProcess; //< freeswan/openswan/strongswan
TQProcess *IpsecStartProcess;
TQProcess *IpsecWhackProcess; //< ipsec whack --initate
TQProcess *IpsecWhackStatusProcess; //< ipsec whack --status
TQProcess *IpsecWhackListenProcess; //< ipsec whack --listen
TQProcess *IpsecWhackDeleteProcess; //< ipsec whack --delete
TQProcess *PingProcess;
TQProcess *RacoonTailProcess;
TQProcess *RacoonctlProcess; //< racoonctl
TQProcess *X509CertificateExtractProcess;
TQProcess *PptpProcess;
TQProcess *OpenvpnProcess;
TQProcess *CmdBeforeConnectProcess;
TQProcess *CmdBeforeDisconnectProcess;
TQProcess *CmdAfterConnectProcess;
TQProcess *CmdAfterDisconnectProcess;
TQProcess *SetFirewallAfterConnectProcess;
TQProcess *SetFirewallBeforeDisconnectProcess;
TQProcess *RouteProcess;
TQProcess *SetVirtualIPProcess;
TQProcess *ReplaceDefaultRouteProcess;
TQProcess *ConnectionStatusCheckProcess;
TQProcess *TestCiscoVpncProcess;
TQProcess *IptablesProcess;
TQProcess *KillProcess;
TQProcess *PptpRouteProcess;
TQProcess *ChmodProcess;
TQProcess *pppdUpProcess;
TQProcess *pppdDelDefaultRouteProcess;
TQProcess *L2tpdProcess;
TQProcess *OpenL2tpProcess;
TQProcess *RemoveSetkeyProcess;
TQProcess *BugReportProcess;
// TQProcess *DonateProcess;
TQProcess *VtundProcess;
TQProcess *StartStopOpenl2tpProcess;
TDEProcess *SshProcess;
TQProcess *backupDefaultRouteProcess;
TQProcess *pptpdKillProcess;
TQProcess *SshDownProcess;
TQProcess *pppdDownProcess;
TQProcess *killracoonprocess;
TQProcess *killl2tpdprocess;
TQProcess *SshUpProcess;
int TimeOutProcess; //< for timeout
int ConnectingProcess; //< for killing process
TQPixmap connectedIcon;
TQPixmap disconnectedIcon;
TQPixmap connectingIcon;
TQPixmap *connectingStatusPixmap;
TQPixmap *disconnectedStatusPixmap;
TQPixmap *connectedStatusPixmap;
TQLabel *statusColorLabel;
TQPopupMenu *QuickConnectMenu;
OpenvpnManagementHandler *managementhandler ;
KFeedbackDialog *FeedbackDialog;
TQString L2tpdBufferStdoutString;
TQString L2tpdBufferStderrString;
PreferencesDialog *prefDlg;
public slots:
/** setup KVpnc */
void slotSettings();
/** show / hide toolbar */
void slotShowToolbar();
/** show / hide statusbar */
void slotShowStatusbar();
/** configure key bindings */
void slotKeyBindings();
/** configure toolbars */
void slotConfigToolbars();
void slotConfigNotifications();
/**
* Slot for status message
* @param text The text that will be set
* @param id What type its is
*/
void slotStatusMsg( const TQString &text, int id = ID_STATUS_MSG );
void connectClicked();
void disconnectClicked();
void saveSessionClicked();
void newSessionClicked();
void deleteSessionClicked();
void renameSessionClicked ();
void sessionToggled( const TQString& );
void helpClicked();
void toolsInfoClicked();
void vpnTypesInfoClicked();
// void donateClicked();
void reportBugClicked();
void saveGuiOptions();
void showNewProfileWizardClicked();
private slots:
/**
* called if close clicked
* @param e the event which happen
*/
void closeEvent( TQCloseEvent* e );
bool queryClose();
void shutdownCalled();
void slotCancelClicked();
void slotConnectTimedOut();
void slotDurationEvent();
void showDockTooltip();
void readOutputFrom_vpnc();
void readOutputFrom_ciscovpnc();
void wroteToStdin_vpncConfig();
void readFromStdout_disconnect();
void readFromStderr_disconnect();
void readFromStdout_racoon();
void readFromStderr_racoon();
void readFromStdout_racoon_helper();
void readFromStderr_racoon_helper();
void readFromStdout_ipsec();
void readFromStderr_ipsec();
void readFromStdout_ipsecwhack();
void readFromStderr_ipsecwhack();
void readFromStdout_ipsecwhacklisten();
void readFromStderr_ipsecwhacklisten();
void readFromStdout_ipsecwhackstatus();
void readFromStderr_ipsecwhackstatus();
void readFromStdout_ipsecwhackdelete();
void readFromStderr_ipsecwhackdelete();
void readFromStdout_pptp();
void readFromStderr_pptp();
void readFromStdout_l2tpd();
void readFromStderr_l2tpd();
void processStdout_l2tpd();
void processStderr_l2tpd();
void readFromStdout_openl2tp();
void readFromStderr_openl2tp();
void readFromStdout_startstopOpenl2tp();
void readFromStderr_startstopOpenl2tp();
void checkL2tpPppUp();
void readOutput_openvpn();
void readFromStdout_vtun();
void readFromStderr_vtun();
void readFromStdout_ssh(TDEProcess *proc, char *buffer, int buflen);
void readFromStderr_ssh(TDEProcess *proc, char *buffer, int buflen);
void readFromStdout_executeCommandBeforeConnect();
void readFromStderr_executeCommandBeforeConnect();
void readFromStdout_executeCommandAfterConnect();
void readFromStderr_executeCommandAfterConnect();
void readFromStdout_executeCommandBeforeDisconnect();
void readFromStderr_executeCommandBeforeDisconnect();
void readFromStdout_executeCommandAfterDisconnect();
void readFromStderr_executeCommandAfterDisconnect();
void readFromStdout_tail_racoon();
void readFromStderr_tail_racoon();
void readFromStdout_racoonctl();
void readFromStderr_racoonctl();
void readFromStdout_ping();
void readFromStderr_ping();
void readFromStdout_route();
void readFromStderr_route();
void readFromStdout_getX509CertificateID();
void readFromStderr_getX509CertificateID();
void readFromStdout_setVirtualIP();
void readFromStderr_setVirtualIP();
void readFromStdout_connectionStatusCheck();
void readFromStderr_connectionStatusCheck();
void readCiscoVpncTestProcessOutput();
void quitCalled();
void quitCalledKicker();
void pptpProcessExited();
void vtun_exited(); //< vtund has been exited
void openvpn_exited(); //< openvpn has been exited
void ipsecwhack_exited(); //< ipsec whack has been exited
void IpsecWhackStatusProcessExited();
void racoonctlExited();
void prepareL2tpd(); //< write l2tpd conf etc.
void start_ipsec_initiate();
void doAddRemoveVirtualIp(TQString action);
void importProfileClicked(); //< PCF import
void importIpsecProfileClicked();
void importFritzboxProfileClicked();
void importKvpncSettingsClicked();
void exportKvpncSettingsClicked();
void importOpenvpnProfileClicked(); //< OpenVPN config file import
void doRacoon();
void stopRacoon();
void doRoutePptp();
void addRouteIpsec();
void delRouteIpsec();
void doTailRacoonLog();
void doIptablesRacoon();
void doIptablesFreeswan();
void addRouteRacoon();
void delRouteRacoon();
void doPingKickupTunnel();
void removeIptablesRacoon();
void removeIptablesFreeswan();
void removeSetkey();
void connectionEnded();
void doPingTest();
void pingTestExited();
void sshExited();
void vpncStarted();
void ipsecStarted();
void ipsecPhase2Established();
void checkIpsecWhackStatus();
void addIpsecConnection();
void racoonStarted();
void pppdStarted();
void openvpnStarted();
void openSSLEnded();
void importCertClicked();
void manageCiscoCertClicked();
void enrollCiscoCertClicked();
void showProfileManagerClicked();
void executeCommandBeforeConnect();
void executeCommandAfterConnect();
void executeCommandBeforeDisconnect();
void executeCommandAfterDisconnect();
void setFirewallAfterConnect();
void setFirewallBeforeDisconnect();
void slotConnecting();
void toggleDebugConsole();
void addAdditionalNetworkRoutes();
void removeAdditionalNetworkRoutes();
void showLogViewer();
void doQuickConnect(int id);
void startConnectionStatusCheck();
void generateOpenvpnKey();
void preserveNetworkEnvironment(); //< save route and resolv.conf
void restoreNetworkEnvironment(); //< restore route and resolv.conf
void backupIpsecSystemConfig(); // backup ipsec.conf and ipsec.secrets
void backupDefaultRoute();
void exportOpenvpnProfileClicked();
void addFeatureList( KFeedbackQuestion * question );
void sendFeedbackMail();
void feedbackMailSent();
void start_l2tpd();
bool checkCiscoVpncStatus();
void startCiscoVpnc();
void startStopIpsec(bool stop=false, bool silent=false);
void startStopOpenl2tp(bool stop=false, bool silent=false);
signals:
void L2tpdStdoutRecieved();
void L2tpdStderrRecieved();
void newProfileCreated(TQString Name);
public:
void importOpenvpnProfileClicked(TQString file); //< OpenVPN config file import
void importProfileClicked(TQString file); //< PCF import
bool backupResolvConf();
bool restoreResolvConf();
public:
k_dcop:
TQString getVersion();
void doConnect();
void doDisconnect();
uint getConnectedTime();
TQString getStatus();
TQString getCurrentProfile();
void setProfile(TQString profilename);
void createNewProfile();
void createNewProfileWithWizard();
void deleteCurrentProfile();
void openPreferences();
void doImportCert();
void doImportPcf();
void doImportPcf(TQString file);
void doImportOpenvpnConfig();
void doImportOpenvpnConfig(TQString file);
TQStringList profiles();
TQStringList toolinfo();
void doQuit();
void doGenerateOpenvpnKey();
void doSendFeedbackMail();
TQStringList getProfileTypes();
};
#endif