#ifndef VPNADVANCEDPAGE_H #define VPNADVANCEDPAGE_H #include #include #include #include #include #include #include #include #include #include #include #include "kylable.h" #include "kwidget.h" #include "kpasswordedit.h" #include "vpnconfigpage.h" #include "kyvpnconnectoperation.h" using namespace kdk; enum TlsMode { NONE = 0, TLS_CERT, TLS_ENCRYPTION }; enum ProxyType { NO = 0, HTTP, SOCKS }; class VpnAdvancedPage : public QFrame { Q_OBJECT public: VpnAdvancedPage(QWidget *parent = nullptr); ~VpnAdvancedPage() = default; //Adia: Advanced void setL2tpOrPptpAdiaInfo(const KyVpnConfig &vpnInfo); void setOpenVpnAdiaInfo(const KyVpnConfig &vpnInfo); void setStrongSwanAdiaInfo(const KyVpnConfig &vpnInfo); bool checkIsChanged(const KyVpnConfig &vpnInfo, VpnType &vpnType); bool checkL2tpIsChanged(const KyVpnConfig &vpnInfo); bool checkPptpIsChanged(const KyVpnConfig &vpnInfo); bool checkOpenVpnIsChanged(const KyVpnConfig &vpnInfo); bool checkStrongSwanIsChanged(const KyVpnConfig &vpnInfo); void updateL2tpOrPptpAdiaInfo(KyVpnConfig &vpnInfo); void updateOpenVpnAdiaInfo(KyVpnConfig &vpnInfo); void updateStrongSwanAdiaInfo(KyVpnConfig &vpnInfo); protected: void paintEvent(QPaintEvent *event); private: bool m_isOpenVpn; QFrame *m_defaultAdiaFrame; QFrame *m_mruFrame; QFrame *m_openVpnAdiaFrame; QFrame *m_sSwanAdiaFrame; //L2TP PPTP Encryption(E) QCheckBox *m_mppeECheckbox = nullptr; QCheckBox *m_useStatefulECheckbox = nullptr; QCheckBox *m_sendPppEchoPkgCheckbox = nullptr; QLabel *m_authModeLabel; QLabel *m_compModeLabel; QLabel *m_mruLabel; QLabel *m_mtuLabel; QLineEdit *m_mruEdit; QLineEdit *m_mtuEdit; QComboBox *m_mppeECombox = nullptr; //认证方式 QListWidget *m_authModeListWidget = nullptr; QCheckBox *m_papAuthCheckbox = nullptr; QCheckBox *m_chapAuthCheckbox = nullptr; QCheckBox *m_mschapAuthCheckbox = nullptr; QCheckBox *m_mschap2AuthCheckbox = nullptr; QCheckBox *m_eapAuthCheckbox = nullptr; //压缩方式 QListWidget *m_compModeListWidget = nullptr; QCheckBox *m_bsdCompModeCheckbox = nullptr; QCheckBox *m_defaultCompModeCheckbox = nullptr; QCheckBox *m_tcpCompModeCheckbox = nullptr; QCheckBox *m_protocolCompModeCheckbox = nullptr; QCheckBox *m_addressCompModeCheckbox = nullptr; //Open VPN //general QCheckBox *m_customGatewayPortCheckbox = nullptr; QCheckBox *m_customRenegotiaInrCheckbox = nullptr; QCheckBox *m_compressionCheckbox = nullptr; QCheckBox *m_tcpConnCheckbox = nullptr; QCheckBox *m_setVDevTypeCheckbox = nullptr; QCheckBox *m_setVDevNameCheckbox = nullptr; QCheckBox *m_customMtuCheckbox = nullptr; QCheckBox *m_customUdpFragSizeCheckbox = nullptr; QCheckBox *m_tcpMssCheckbox = nullptr; QCheckBox *m_randomRemoteHostCheckbox = nullptr; QCheckBox *m_ipv6TunLinkCheckbox = nullptr; QCheckBox *m_specPingInrCheckbox = nullptr; QCheckBox *m_specExitPingCheckbox = nullptr; QCheckBox *m_acceptAuthedPaksCheckbox = nullptr; QCheckBox *m_specMaxRouteCheckbox = nullptr; QLineEdit *m_gatewayPortEdit; QLineEdit *m_renogotiaInrEdit; QLineEdit *m_setVDevNameEdit; QLineEdit *m_customMtuEdit; QLineEdit *m_customUdpFragSizeEdit; QLineEdit *m_specPingInrEdit; QLineEdit *m_specExRePingEdit; QLineEdit *m_specMaxRouteEdit; QComboBox *m_compressionCombox = nullptr; QComboBox *m_setVDevTypeCombox = nullptr; QComboBox *m_specExitRestarCombox = nullptr; FixLabel *m_customRenoInrLabel; FixLabel *m_customMtuLabel; FixLabel *m_customUdpLabel; FixLabel *m_acceptAuthedPaksLabel; //TLS settings QLabel *m_subjectMatchLabel; QLabel *m_keyPathLabel; QLabel *m_keyDirectionLabel; QLineEdit *m_subjectMatchEdit; QLineEdit *m_keyPathEdit; QPushButton *m_keyPathChooseBtn; QCheckBox *m_usePreviousCertCheckbox = nullptr; QCheckBox *m_verifyPeerCertCheckbox = nullptr; QComboBox *m_serverCertCheckCombox = nullptr; QComboBox *m_usePreviousCertCombox = nullptr; QComboBox *m_verifyPeerCertCombox = nullptr; QComboBox *m_tlsModeCombox = nullptr; QComboBox *m_keyDirectionCombox = nullptr; //proxies QLabel *m_proxyServerAddLabel; QLabel *m_proxyPortLabel; QLabel *m_proxyUsernameLabel; QLabel *m_proxyPwdLabel; QComboBox *m_proxyTypeCombox = nullptr; QCheckBox *m_infiniteRetryCheckbox = nullptr; QLineEdit *m_proxyServerAddEdit; QLineEdit *m_proxyPortEdit; QLineEdit *m_proxyUsernameEdit; KPasswordEdit *m_proxyPwdEdit; //security QCheckBox *m_customKeySizeCheckbox = nullptr; QLineEdit *m_customKeySizeEdit; QComboBox *m_hmacAuthCombox = nullptr; //strongswan QListWidget *m_optionsListWidget = nullptr; QCheckBox *m_requestInIPCheckbox = nullptr; QCheckBox *m_udpEncapCheckbox = nullptr; QCheckBox *m_ipCompCheckbox = nullptr; QCheckBox *m_enablCustomCheckbox = nullptr; QFrame *m_ikeEspFrame; QLineEdit *m_ikeEdit; QLineEdit *m_espEdit; void initUi(); void initConnect(); void initDefaultAdiaFrame(); //L2TP PPTP void initOpenVpnAdiaFrame(); //Open VPN void initSSwanAdiaFrame(); //strong-swan void initDefalutCheckState(); void addListItem(QListWidget *listWidget, QWidget *widget); void initCheckWidget(QCheckBox *checkBox, FixLabel *label, QWidget *widget); void showL2tpAdiaPage(); void showPptpAdiaPage(); void showOpenVpnAdiaPage(); void showSSwanAdiaPage(); bool checkConfirmBtnIsEnabled(); bool getTextEditState(QString text); private Q_SLOTS: void onProxyTypeComboxIndexChanged(); void onTlsModeComboxIndexChanged(); void setEnableOfConfirmBtn(); void onKeyPathButtonClicked(); public Q_SLOTS: void setVpnAdvancedPage(const VpnType &type); Q_SIGNALS: void setAdvancedPageState(bool); }; #endif // VPNADVANCEDPAGE_H