From d08a0ede1d2cb15bb14b0ff75eacf5c682b1fa0a Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Tue, 6 Dec 2011 12:36:58 -0600 Subject: Initial import of year-and-a-half-old upstream version 0.9.6a --- src/kvpnc.h | 548 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 548 insertions(+) create mode 100644 src/kvpnc.h (limited to 'src/kvpnc.h') diff --git a/src/kvpnc.h b/src/kvpnc.h new file mode 100644 index 0000000..51e29fb --- /dev/null +++ b/src/kvpnc.h @@ -0,0 +1,548 @@ +/*************************************************************************** +* Copyright (C) 2004 by Christoph Thielecke * +* crissi99@gmx.de * +* * +* Contains parts of code from klcc project * +* (Peter Simonsson ). * +* * +* 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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 KMainWindow , DCOPObject +{ + Q_OBJECT + K_DCOP +public: + /** + * Konstruktor + * @param parent Parent widget + * @param name Name of the Mainwindow + */ + KVpnc( KApplication *parent, QWidget *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 ( QProcess *proc ); + /** + * called when quit requested + */ + virtual bool queryExit(); + + void saveProperties( KConfig* ); + void readProperties( KConfig* ); + +public: + void restore(KConfig *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 + */ + QString getX509CertificateID( QString 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}; + + KApplication *parent; + QStringList *env; + + KVpncConfig *GlobalConfig; + KVpncKicker* KVpncDock; //< kicker menu + KAction* ConnectAction; //< connect action + KAction* DisconnectAction; //< disconnect action + KAction *NewSessionAction; + KAction *SaveSessionAction; + KAction *DeleteSessionAction; + KAction *RenameSessionAction; + KAction *ImportSessionAction; + KAction *ImportOpenvpnProfileAction; + KAction *ExportOpenvpnProfileAction; + KAction *ImportFreeswanProfileAction; + KAction *ImportFritzboxProfileAction; + KAction *ImportKvpncSettingsAction; + KAction *ExportKvpncSettingsAction; + KAction *ImportCertAction; + KAction *SelectAction; //< line select action + KAction *ProfileManagerAction; + KAction *NewProfileWizardAction; + KAction *HelpAction; + KAction *PrefAction; + KAction *DonateAction; + KAction *ReportBugAction; + KAction *SendFeedbackMailAction; + KAction *PreferencesAction; //< show preferences dialog + KAction *ManageCiscoCertAction; //< show cisco cert manager + KAction *CiscoCertEnrollmentAction; //< show cisco cert enrollment dialog + KToggleAction *ToolsInfoAction; + KToggleAction *VpnTypesInfoAction; + KToggleAction *LogViewerAction; + KToggleAction *ShowToolbarAction; //< toggle toolbar on/off + KToggleAction *ShowStatusbarAction; //< toggle statusbar on/off + KToggleAction *DebugconsoleAction; //< toggle debug console + KToggleAction *GenerateOpenvpnKeyAction; //< generate OpenVPN key + MainView* mw; //< Main gui + QTimer timer; + QTimer durationTimer; //< timer for counting connection time + QTimer IpsecWhackStatusTimer; //< getting ipsec status periodically + QTimer 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; + + QString OldDefaultroute; + QString VpncConnectScript; + QString VpncDisconnectScript; + QString tmpPath; + QString ProcessMsg_connect; + QString ProcessMsg_disconnect; + QString deviceaddrstr; + QString deviceaddr; + QString tmpInterface; + QString LocalIP; + QString VpncGateway; + QString PptpGateway; + QString VpncScript; + QString issuerID; // for id extract + QString userID; // for id extract + QString TunnelInterfaceIP; + QString TmpDns1; + QString TmpDns2; + QString VpncDevice; + QString CiscoVpncDevice; + QString L2tpPppDevice; + QString PppdDevice; + QString OpenvpnDevice; + QString SshDevice; + QString IpsecType; //< openswan, strongswan, freeswan + QString Pkcs11PIN; + QString PrettyTypeString; + QString PrettyStatusMessage; + + QProcess *VpncProcess; + KProcess *IpsecConnectProcess; + QProcess *DisconnectProcess; + QProcess *CiscoVpncProcess; //< vpnclient + QProcess *RacoonProcess; //< racoon + QProcess *RacoonHelperProcess; + QProcess *IpsecProcess; //< freeswan/openswan/strongswan + QProcess *IpsecStartProcess; + QProcess *IpsecWhackProcess; //< ipsec whack --initate + QProcess *IpsecWhackStatusProcess; //< ipsec whack --status + QProcess *IpsecWhackListenProcess; //< ipsec whack --listen + QProcess *IpsecWhackDeleteProcess; //< ipsec whack --delete + QProcess *PingProcess; + QProcess *RacoonTailProcess; + QProcess *RacoonctlProcess; //< racoonctl + QProcess *X509CertificateExtractProcess; + QProcess *PptpProcess; + QProcess *OpenvpnProcess; + QProcess *CmdBeforeConnectProcess; + QProcess *CmdBeforeDisconnectProcess; + QProcess *CmdAfterConnectProcess; + QProcess *CmdAfterDisconnectProcess; + QProcess *SetFirewallAfterConnectProcess; + QProcess *SetFirewallBeforeDisconnectProcess; + QProcess *RouteProcess; + QProcess *SetVirtualIPProcess; + QProcess *ReplaceDefaultRouteProcess; + QProcess *ConnectionStatusCheckProcess; + QProcess *TestCiscoVpncProcess; + QProcess *IptablesProcess; + QProcess *KillProcess; + QProcess *PptpRouteProcess; + QProcess *ChmodProcess; + QProcess *pppdUpProcess; + QProcess *pppdDelDefaultRouteProcess; + QProcess *L2tpdProcess; + QProcess *OpenL2tpProcess; + QProcess *RemoveSetkeyProcess; + QProcess *BugReportProcess; + QProcess *DonateProcess; + QProcess *VtundProcess; + QProcess *StartStopOpenl2tpProcess; + KProcess *SshProcess; + QProcess *backupDefaultRouteProcess; + QProcess *pptpdKillProcess; + QProcess *SshDownProcess; + QProcess *pppdDownProcess; + QProcess *killracoonprocess; + QProcess *killl2tpdprocess; + QProcess *SshUpProcess; + + int TimeOutProcess; //< for timeout + int ConnectingProcess; //< for killing process + QPixmap connectedIcon; + QPixmap disconnectedIcon; + QPixmap connectingIcon; + QPixmap *connectingStatusPixmap; + QPixmap *disconnectedStatusPixmap; + QPixmap *connectedStatusPixmap; + + QLabel *statusColorLabel; + QPopupMenu *QuickConnectMenu; + + OpenvpnManagementHandler *managementhandler ; + KFeedbackDialog *FeedbackDialog; + + QString L2tpdBufferStdoutString; + QString 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 QString &text, int id = ID_STATUS_MSG ); + + void connectClicked(); + void disconnectClicked(); + void saveSessionClicked(); + void newSessionClicked(); + void deleteSessionClicked(); + void renameSessionClicked (); + void sessionToggled( const QString& ); + 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( QCloseEvent* 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(KProcess *proc, char *buffer, int buflen); + void readFromStderr_ssh(KProcess *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(QString 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(QString Name); + +public: + void importOpenvpnProfileClicked(QString file); //< OpenVPN config file import + void importProfileClicked(QString file); //< PCF import + + bool backupResolvConf(); + bool restoreResolvConf(); + +public: +k_dcop: + QString getVersion(); + void doConnect(); + void doDisconnect(); + uint getConnectedTime(); + QString getStatus(); + QString getCurrentProfile(); + void setProfile(QString profilename); + void createNewProfile(); + void createNewProfileWithWizard(); + void deleteCurrentProfile(); + void openPreferences(); + void doImportCert(); + void doImportPcf(); + void doImportPcf(QString file); + void doImportOpenvpnConfig(); + void doImportOpenvpnConfig(QString file); + QStringList profiles(); + QStringList toolinfo(); + void doQuit(); + void doGenerateOpenvpnKey(); + void doSendFeedbackMail(); + QStringList getProfileTypes(); + +}; + +#endif + -- cgit v1.2.3