mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-21 02:01:03 +07:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f1ec9c5c75 | |||
| f2a9940147 | |||
| 4f17085c99 | |||
| fdd2c12647 | |||
| 066b74887e | |||
| eb95ec7cbf | |||
| e2492abb77 | |||
| e0ecfc12a9 | |||
| b1b503b7c6 | |||
| 3d573d5977 | |||
| fc99da1432 | |||
| 20e4ea2d4a | |||
| f0b3c16880 | |||
| 2ac62027e8 | |||
| 43c3518f9e | |||
| 8b86c482d2 | |||
| b4efae8edd | |||
| 03bc7d6293 | |||
| 8390a270ca | |||
| faa832b152 | |||
| ed228643cf | |||
| ef901c2149 | |||
| 16d92ddb7c |
@@ -53,14 +53,16 @@ AmneziaApplication::~AmneziaApplication()
|
|||||||
{
|
{
|
||||||
if (m_vpnConnection) {
|
if (m_vpnConnection) {
|
||||||
QMetaObject::invokeMethod(m_vpnConnection.get(), "disconnectFromVpn", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(m_vpnConnection.get(), "disconnectFromVpn", Qt::QueuedConnection);
|
||||||
QMetaObject::invokeMethod(m_vpnConnection.get(), "deleteLater", Qt::QueuedConnection);
|
QThread::msleep(2000);
|
||||||
|
QMetaObject::invokeMethod(m_vpnConnection.get(), "disconnectSlots", Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_vpnConnectionThread.requestInterruption();
|
||||||
m_vpnConnectionThread.quit();
|
m_vpnConnectionThread.quit();
|
||||||
|
|
||||||
if (!m_vpnConnectionThread.wait(5000)) {
|
if (!m_vpnConnectionThread.wait(3000)) {
|
||||||
m_vpnConnectionThread.terminate();
|
m_vpnConnectionThread.terminate();
|
||||||
m_vpnConnectionThread.wait();
|
m_vpnConnectionThread.wait(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_engine) {
|
if (m_engine) {
|
||||||
|
|||||||
@@ -85,8 +85,9 @@ bool IpcClient::init(IpcClient *instance)
|
|||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "IpcClient::init succeed";
|
qDebug() << "IpcClient::init succeed";
|
||||||
|
instance->m_isSocketConnected = (Instance()->m_ipcClient->isReplicaValid() && Instance()->m_Tun2SocksClient->isReplicaValid());
|
||||||
|
|
||||||
return (Instance()->m_ipcClient->isReplicaValid() && Instance()->m_Tun2SocksClient->isReplicaValid());
|
return Instance()->isSocketConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
QSharedPointer<PrivilegedProcess> IpcClient::CreatePrivilegedProcess()
|
QSharedPointer<PrivilegedProcess> IpcClient::CreatePrivilegedProcess()
|
||||||
|
|||||||
@@ -56,7 +56,8 @@ void OpenVpnProtocol::stop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
|
#if defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
|
||||||
IpcClient::Interface()->disableKillSwitch();
|
QRemoteObjectPendingReply<bool> disableKillSwitchResp = IpcClient::Interface()->disableKillSwitch();
|
||||||
|
disableKillSwitchResp.waitForFinished(1000);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setConnectionState(Vpn::ConnectionState::Disconnected);
|
setConnectionState(Vpn::ConnectionState::Disconnected);
|
||||||
|
|||||||
@@ -167,8 +167,10 @@ ErrorCode XrayProtocol::startTun2Sock()
|
|||||||
void XrayProtocol::stop()
|
void XrayProtocol::stop()
|
||||||
{
|
{
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
|
#if defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
|
||||||
IpcClient::Interface()->disableKillSwitch();
|
QRemoteObjectPendingReply<bool> disableKillSwitchResp = IpcClient::Interface()->disableKillSwitch();
|
||||||
IpcClient::Interface()->StartRoutingIpv6();
|
disableKillSwitchResp.waitForFinished(1000);
|
||||||
|
QRemoteObjectPendingReply<bool> StartRoutingIpv6Resp = IpcClient::Interface()->StartRoutingIpv6();
|
||||||
|
StartRoutingIpv6Resp.waitForFinished(1000);
|
||||||
#endif
|
#endif
|
||||||
qDebug() << "XrayProtocol::stop()";
|
qDebug() << "XrayProtocol::stop()";
|
||||||
m_xrayProcess.disconnect();
|
m_xrayProcess.disconnect();
|
||||||
@@ -176,6 +178,7 @@ void XrayProtocol::stop()
|
|||||||
m_xrayProcess.waitForFinished(3000);
|
m_xrayProcess.waitForFinished(3000);
|
||||||
if (m_t2sProcess) {
|
if (m_t2sProcess) {
|
||||||
m_t2sProcess->stop();
|
m_t2sProcess->stop();
|
||||||
|
QThread::msleep(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
setConnectionState(Vpn::ConnectionState::Disconnected);
|
setConnectionState(Vpn::ConnectionState::Disconnected);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ PageType {
|
|||||||
ListViewType {
|
ListViewType {
|
||||||
id: listView
|
id: listView
|
||||||
|
|
||||||
anchors.top: backButtonLayout.bottom
|
anchors.top: backButton.bottom
|
||||||
anchors.bottom: saveButton.top
|
anchors.bottom: saveButton.top
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ PageType {
|
|||||||
ListViewType {
|
ListViewType {
|
||||||
id: listView
|
id: listView
|
||||||
|
|
||||||
anchors.top: backButtonLayout.bottom
|
anchors.top: backButton.bottom
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
|
|||||||
@@ -17,85 +17,65 @@ import "../Components"
|
|||||||
PageType {
|
PageType {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
id: backButtonLayout
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
|
|
||||||
anchors.topMargin: 20
|
|
||||||
|
|
||||||
BackButtonType {
|
BackButtonType {
|
||||||
id: backButton
|
id: backButton
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FlickableType {
|
|
||||||
id: fl
|
|
||||||
anchors.top: backButtonLayout.bottom
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
contentHeight: content.implicitHeight
|
|
||||||
|
|
||||||
Column {
|
|
||||||
id: content
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
|
anchors.topMargin: 20
|
||||||
|
|
||||||
|
onActiveFocusChanged: {
|
||||||
|
if(backButton.enabled && backButton.activeFocus) {
|
||||||
|
listView.positionViewAtBeginning()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ListViewType {
|
||||||
|
id: listView
|
||||||
|
|
||||||
|
anchors.top: backButton.bottom
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.left: parent.left
|
||||||
|
|
||||||
enabled: ServersModel.isProcessedServerHasWriteAccess()
|
enabled: ServersModel.isProcessedServerHasWriteAccess()
|
||||||
|
|
||||||
ListView {
|
header: ColumnLayout {
|
||||||
id: listview
|
width: listView.width
|
||||||
|
|
||||||
width: parent.width
|
BaseHeaderType {
|
||||||
height: listview.contentItem.height
|
id: header
|
||||||
|
|
||||||
clip: true
|
Layout.fillWidth: true
|
||||||
interactive: false
|
Layout.rightMargin: 16
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
|
||||||
|
headerText: qsTr("OpenVPN Settings")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
model: OpenVpnConfigModel
|
model: OpenVpnConfigModel
|
||||||
|
|
||||||
delegate: Item {
|
delegate: ColumnLayout {
|
||||||
id: delegateItem
|
width: listView.width
|
||||||
|
|
||||||
property alias vpnAddressSubnetTextField: vpnAddressSubnetTextField
|
|
||||||
property bool isEnabled: ServersModel.isProcessedServerHasWriteAccess()
|
|
||||||
|
|
||||||
implicitWidth: listview.width
|
|
||||||
implicitHeight: col.implicitHeight
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
id: col
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
|
|
||||||
anchors.leftMargin: 16
|
|
||||||
anchors.rightMargin: 16
|
|
||||||
|
|
||||||
spacing: 0
|
spacing: 0
|
||||||
|
|
||||||
BaseHeaderType {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
headerText: qsTr("OpenVPN settings")
|
|
||||||
}
|
|
||||||
|
|
||||||
TextFieldWithHeaderType {
|
TextFieldWithHeaderType {
|
||||||
id: vpnAddressSubnetTextField
|
id: vpnAddressSubnetTextField
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 32
|
Layout.topMargin: 32
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
enabled: delegateItem.isEnabled
|
enabled: listView.enabled
|
||||||
|
|
||||||
headerText: qsTr("VPN address subnet")
|
headerText: qsTr("VPN address subnet")
|
||||||
textField.text: subnetAddress
|
textField.text: subnetAddress
|
||||||
|
|
||||||
parentFlickable: fl
|
|
||||||
|
|
||||||
textField.onEditingFinished: {
|
textField.onEditingFinished: {
|
||||||
if (textField.text !== subnetAddress) {
|
if (textField.text !== subnetAddress) {
|
||||||
subnetAddress = textField.text
|
subnetAddress = textField.text
|
||||||
@@ -108,6 +88,8 @@ PageType {
|
|||||||
ParagraphTextType {
|
ParagraphTextType {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 32
|
Layout.topMargin: 32
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
text: qsTr("Network protocol")
|
text: qsTr("Network protocol")
|
||||||
}
|
}
|
||||||
@@ -116,6 +98,9 @@ PageType {
|
|||||||
id: transportProtoSelector
|
id: transportProtoSelector
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 16
|
Layout.topMargin: 16
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
rootWidth: root.width
|
rootWidth: root.width
|
||||||
|
|
||||||
enabled: isTransportProtoEditable
|
enabled: isTransportProtoEditable
|
||||||
@@ -138,9 +123,10 @@ PageType {
|
|||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 40
|
Layout.topMargin: 40
|
||||||
parentFlickable: fl
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
enabled: delegateItem.isEnabled
|
enabled: listView.enabled
|
||||||
|
|
||||||
headerText: qsTr("Port")
|
headerText: qsTr("Port")
|
||||||
textField.text: port
|
textField.text: port
|
||||||
@@ -161,7 +147,8 @@ PageType {
|
|||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 24
|
Layout.topMargin: 24
|
||||||
parentFlickable: fl
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
text: qsTr("Auto-negotiate encryption")
|
text: qsTr("Auto-negotiate encryption")
|
||||||
checked: autoNegotiateEncryprion
|
checked: autoNegotiateEncryprion
|
||||||
@@ -177,6 +164,8 @@ PageType {
|
|||||||
id: hashDropDown
|
id: hashDropDown
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
enabled: !autoNegotiateEncryprionSwitcher.checked
|
enabled: !autoNegotiateEncryprionSwitcher.checked
|
||||||
|
|
||||||
@@ -225,6 +214,8 @@ PageType {
|
|||||||
id: cipherDropDown
|
id: cipherDropDown
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 16
|
Layout.topMargin: 16
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
enabled: !autoNegotiateEncryprionSwitcher.checked
|
enabled: !autoNegotiateEncryprionSwitcher.checked
|
||||||
|
|
||||||
@@ -273,25 +264,18 @@ PageType {
|
|||||||
id: contentRect
|
id: contentRect
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 32
|
Layout.topMargin: 32
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
Layout.preferredHeight: checkboxLayout.implicitHeight
|
Layout.preferredHeight: checkboxLayout.implicitHeight
|
||||||
color: AmneziaStyle.color.onyxBlack
|
color: AmneziaStyle.color.onyxBlack
|
||||||
radius: 16
|
radius: 16
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: tlsAuthCheckBox
|
|
||||||
enabled: !GC.isMobile()
|
|
||||||
|
|
||||||
function onFocusChanged() {
|
|
||||||
if (tlsAuthCheckBox.activeFocus) {
|
|
||||||
fl.ensureVisible(contentRect)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: checkboxLayout
|
id: checkboxLayout
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
CheckBoxType {
|
CheckBoxType {
|
||||||
id: tlsAuthCheckBox
|
id: tlsAuthCheckBox
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -329,7 +313,8 @@ PageType {
|
|||||||
id: additionalClientCommandsSwitcher
|
id: additionalClientCommandsSwitcher
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 32
|
Layout.topMargin: 32
|
||||||
parentFlickable: fl
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
checked: additionalClientCommands !== ""
|
checked: additionalClientCommands !== ""
|
||||||
|
|
||||||
@@ -346,11 +331,11 @@ PageType {
|
|||||||
id: additionalClientCommandsTextArea
|
id: additionalClientCommandsTextArea
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 16
|
Layout.topMargin: 16
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
visible: additionalClientCommandsSwitcher.checked
|
visible: additionalClientCommandsSwitcher.checked
|
||||||
|
|
||||||
parentFlickable: fl
|
|
||||||
|
|
||||||
textAreaText: additionalClientCommands
|
textAreaText: additionalClientCommands
|
||||||
placeholderText: qsTr("Commands:")
|
placeholderText: qsTr("Commands:")
|
||||||
|
|
||||||
@@ -365,7 +350,8 @@ PageType {
|
|||||||
id: additionalServerCommandsSwitcher
|
id: additionalServerCommandsSwitcher
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 16
|
Layout.topMargin: 16
|
||||||
parentFlickable: fl
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
checked: additionalServerCommands !== ""
|
checked: additionalServerCommands !== ""
|
||||||
|
|
||||||
@@ -382,12 +368,14 @@ PageType {
|
|||||||
id: additionalServerCommandsTextArea
|
id: additionalServerCommandsTextArea
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 16
|
Layout.topMargin: 16
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
visible: additionalServerCommandsSwitcher.checked
|
visible: additionalServerCommandsSwitcher.checked
|
||||||
|
|
||||||
textAreaText: additionalServerCommands
|
textAreaText: additionalServerCommands
|
||||||
placeholderText: qsTr("Commands:")
|
placeholderText: qsTr("Commands:")
|
||||||
parentFlickable: fl
|
|
||||||
textArea.onEditingFinished: {
|
textArea.onEditingFinished: {
|
||||||
if (additionalServerCommands !== textAreaText) {
|
if (additionalServerCommands !== textAreaText) {
|
||||||
additionalServerCommands = textAreaText
|
additionalServerCommands = textAreaText
|
||||||
@@ -401,12 +389,13 @@ PageType {
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 24
|
Layout.topMargin: 24
|
||||||
Layout.bottomMargin: 24
|
Layout.bottomMargin: 24
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
enabled: vpnAddressSubnetTextField.errorText === "" &&
|
enabled: vpnAddressSubnetTextField.errorText === "" &&
|
||||||
portTextField.errorText === ""
|
portTextField.errorText === ""
|
||||||
|
|
||||||
text: qsTr("Save")
|
text: qsTr("Save")
|
||||||
parentFlickable: fl
|
|
||||||
|
|
||||||
onClicked: function() {
|
onClicked: function() {
|
||||||
forceActiveFocus()
|
forceActiveFocus()
|
||||||
@@ -438,7 +427,4 @@ PageType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,8 +66,6 @@ PageType {
|
|||||||
Layout.leftMargin: 16
|
Layout.leftMargin: 16
|
||||||
Layout.rightMargin: 16
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
enabled: delegateItem.isEnabled
|
|
||||||
|
|
||||||
headerText: qsTr("VPN address subnet")
|
headerText: qsTr("VPN address subnet")
|
||||||
textField.text: subnetAddress
|
textField.text: subnetAddress
|
||||||
|
|
||||||
@@ -87,8 +85,6 @@ PageType {
|
|||||||
Layout.leftMargin: 16
|
Layout.leftMargin: 16
|
||||||
Layout.rightMargin: 16
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
enabled: delegateItem.isEnabled
|
|
||||||
|
|
||||||
headerText: qsTr("Port")
|
headerText: qsTr("Port")
|
||||||
textField.text: port
|
textField.text: port
|
||||||
textField.maximumLength: 5
|
textField.maximumLength: 5
|
||||||
|
|||||||
@@ -43,8 +43,6 @@ PageType {
|
|||||||
|
|
||||||
LabelWithButtonType {
|
LabelWithButtonType {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.leftMargin: 16
|
|
||||||
Layout.rightMargin: 16
|
|
||||||
|
|
||||||
visible: isVisible
|
visible: isVisible
|
||||||
|
|
||||||
@@ -68,8 +66,6 @@ PageType {
|
|||||||
|
|
||||||
visible: GC.isDesktop()
|
visible: GC.isDesktop()
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.leftMargin: 16
|
|
||||||
Layout.rightMargin: 16
|
|
||||||
|
|
||||||
text: qsTr("Close application")
|
text: qsTr("Close application")
|
||||||
leftImageSource: "qrc:/images/controls/x-circle.svg"
|
leftImageSource: "qrc:/images/controls/x-circle.svg"
|
||||||
|
|||||||
@@ -66,6 +66,13 @@ PageType {
|
|||||||
|
|
||||||
text: qsTr("If AmneziaDNS is not used or installed")
|
text: qsTr("If AmneziaDNS is not used or installed")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model: 1 // fake model to force the ListView to be created without a model
|
||||||
|
|
||||||
|
delegate: ColumnLayout {
|
||||||
|
width: listView.width
|
||||||
|
spacing: 16
|
||||||
|
|
||||||
TextFieldWithHeaderType {
|
TextFieldWithHeaderType {
|
||||||
id: primaryDns
|
id: primaryDns
|
||||||
@@ -96,13 +103,6 @@ PageType {
|
|||||||
regularExpression: InstallController.ipAddressRegExp()
|
regularExpression: InstallController.ipAddressRegExp()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
model: 1 // fake model to force the ListView to be created without a model
|
|
||||||
spacing: 16
|
|
||||||
|
|
||||||
delegate: ColumnLayout {
|
|
||||||
width: listView.width
|
|
||||||
|
|
||||||
BasicButtonType {
|
BasicButtonType {
|
||||||
id: restoreDefaultButton
|
id: restoreDefaultButton
|
||||||
@@ -139,10 +139,6 @@ PageType {
|
|||||||
showQuestionDrawer(headerText, "", yesButtonText, noButtonText, yesButtonFunction, noButtonFunction)
|
showQuestionDrawer(headerText, "", yesButtonText, noButtonText, yesButtonFunction, noButtonFunction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
footer: ColumnLayout {
|
|
||||||
width: listView.width
|
|
||||||
|
|
||||||
BasicButtonType {
|
BasicButtonType {
|
||||||
id: saveButton
|
id: saveButton
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ PageType {
|
|||||||
|
|
||||||
signal lastItemTabClickedSignal()
|
signal lastItemTabClickedSignal()
|
||||||
|
|
||||||
|
property bool isServerWithWriteAccess: ServersModel.isProcessedServerHasWriteAccess()
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: InstallController
|
target: InstallController
|
||||||
|
|
||||||
@@ -59,15 +61,13 @@ PageType {
|
|||||||
target: ServersModel
|
target: ServersModel
|
||||||
|
|
||||||
function onProcessedServerIndexChanged() {
|
function onProcessedServerIndexChanged() {
|
||||||
listView.isServerWithWriteAccess = ServersModel.isProcessedServerHasWriteAccess()
|
root.isServerWithWriteAccess = ServersModel.isProcessedServerHasWriteAccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ListViewType {
|
ListViewType {
|
||||||
id: listView
|
id: listView
|
||||||
|
|
||||||
property bool isServerWithWriteAccess: ServersModel.isProcessedServerHasWriteAccess()
|
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
model: serverActions
|
model: serverActions
|
||||||
@@ -107,7 +107,7 @@ PageType {
|
|||||||
QtObject {
|
QtObject {
|
||||||
id: check
|
id: check
|
||||||
|
|
||||||
property bool isVisible: true
|
property bool isVisible: root.isServerWithWriteAccess
|
||||||
readonly property string title: qsTr("Check the server for previously installed Amnezia services")
|
readonly property string title: qsTr("Check the server for previously installed Amnezia services")
|
||||||
readonly property string description: qsTr("Add them to the application if they were not displayed")
|
readonly property string description: qsTr("Add them to the application if they were not displayed")
|
||||||
readonly property var tColor: AmneziaStyle.color.paleGray
|
readonly property var tColor: AmneziaStyle.color.paleGray
|
||||||
@@ -121,7 +121,7 @@ PageType {
|
|||||||
QtObject {
|
QtObject {
|
||||||
id: reboot
|
id: reboot
|
||||||
|
|
||||||
property bool isVisible: true
|
property bool isVisible: root.isServerWithWriteAccess
|
||||||
readonly property string title: qsTr("Reboot server")
|
readonly property string title: qsTr("Reboot server")
|
||||||
readonly property string description: ""
|
readonly property string description: ""
|
||||||
readonly property var tColor: AmneziaStyle.color.vibrantRed
|
readonly property var tColor: AmneziaStyle.color.vibrantRed
|
||||||
@@ -181,7 +181,7 @@ PageType {
|
|||||||
QtObject {
|
QtObject {
|
||||||
id: clear
|
id: clear
|
||||||
|
|
||||||
property bool isVisible: true
|
property bool isVisible: root.isServerWithWriteAccess
|
||||||
readonly property string title: qsTr("Clear server from Amnezia software")
|
readonly property string title: qsTr("Clear server from Amnezia software")
|
||||||
readonly property string description: ""
|
readonly property string description: ""
|
||||||
readonly property var tColor: AmneziaStyle.color.vibrantRed
|
readonly property var tColor: AmneziaStyle.color.vibrantRed
|
||||||
@@ -240,7 +240,7 @@ PageType {
|
|||||||
QtObject {
|
QtObject {
|
||||||
id: switch_to_premium
|
id: switch_to_premium
|
||||||
|
|
||||||
property bool isVisible: ServersModel.getProcessedServerData("isServerFromTelegramApi")
|
property bool isVisible: ServersModel.getProcessedServerData("isServerFromTelegramApi") && ServersModel.processedServerIsPremium
|
||||||
readonly property string title: qsTr("Switch to the new Amnezia Premium subscription")
|
readonly property string title: qsTr("Switch to the new Amnezia Premium subscription")
|
||||||
readonly property string description: ""
|
readonly property string description: ""
|
||||||
readonly property var tColor: AmneziaStyle.color.vibrantRed
|
readonly property var tColor: AmneziaStyle.color.vibrantRed
|
||||||
|
|||||||
@@ -161,10 +161,4 @@ PageType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShareConnectionDrawer {
|
|
||||||
id: shareConnectionDrawer
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+45
-36
@@ -32,8 +32,8 @@
|
|||||||
VpnConnection::VpnConnection(std::shared_ptr<Settings> settings, QObject *parent)
|
VpnConnection::VpnConnection(std::shared_ptr<Settings> settings, QObject *parent)
|
||||||
: QObject(parent), m_settings(settings), m_checkTimer(new QTimer(this))
|
: QObject(parent), m_settings(settings), m_checkTimer(new QTimer(this))
|
||||||
{
|
{
|
||||||
m_checkTimer.setInterval(1000);
|
|
||||||
#if defined(Q_OS_IOS) || defined(MACOS_NE)
|
#if defined(Q_OS_IOS) || defined(MACOS_NE)
|
||||||
|
m_checkTimer.setInterval(1000);
|
||||||
connect(IosController::Instance(), &IosController::connectionStateChanged, this, &VpnConnection::onConnectionStateChanged);
|
connect(IosController::Instance(), &IosController::connectionStateChanged, this, &VpnConnection::onConnectionStateChanged);
|
||||||
connect(IosController::Instance(), &IosController::bytesChanged, this, &VpnConnection::onBytesChanged);
|
connect(IosController::Instance(), &IosController::bytesChanged, this, &VpnConnection::onBytesChanged);
|
||||||
|
|
||||||
@@ -42,9 +42,6 @@ VpnConnection::VpnConnection(std::shared_ptr<Settings> settings, QObject *parent
|
|||||||
|
|
||||||
VpnConnection::~VpnConnection()
|
VpnConnection::~VpnConnection()
|
||||||
{
|
{
|
||||||
#if defined AMNEZIA_DESKTOP
|
|
||||||
disconnectFromVpn();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VpnConnection::onBytesChanged(quint64 receivedBytes, quint64 sentBytes)
|
void VpnConnection::onBytesChanged(quint64 receivedBytes, quint64 sentBytes)
|
||||||
@@ -55,19 +52,7 @@ void VpnConnection::onBytesChanged(quint64 receivedBytes, quint64 sentBytes)
|
|||||||
void VpnConnection::onKillSwitchModeChanged(bool enabled)
|
void VpnConnection::onKillSwitchModeChanged(bool enabled)
|
||||||
{
|
{
|
||||||
#ifdef AMNEZIA_DESKTOP
|
#ifdef AMNEZIA_DESKTOP
|
||||||
if (!m_IpcClient) {
|
if (InterfaceReady()) {
|
||||||
m_IpcClient = new IpcClient(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_IpcClient->isSocketConnected()) {
|
|
||||||
if (!IpcClient::init(m_IpcClient)) {
|
|
||||||
qWarning() << "Error occurred when init IPC client";
|
|
||||||
emit serviceIsNotReady();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IpcClient::Interface()) {
|
|
||||||
qDebug() << "Set KillSwitch Strict mode enabled " << enabled;
|
qDebug() << "Set KillSwitch Strict mode enabled " << enabled;
|
||||||
IpcClient::Interface()->refreshKillSwitch(enabled);
|
IpcClient::Interface()->refreshKillSwitch(enabled);
|
||||||
}
|
}
|
||||||
@@ -80,7 +65,7 @@ void VpnConnection::onConnectionStateChanged(Vpn::ConnectionState state)
|
|||||||
#ifdef AMNEZIA_DESKTOP
|
#ifdef AMNEZIA_DESKTOP
|
||||||
auto container = m_settings->defaultContainer(m_settings->defaultServerIndex());
|
auto container = m_settings->defaultContainer(m_settings->defaultServerIndex());
|
||||||
|
|
||||||
if (IpcClient::Interface()) {
|
if (InterfaceReady()) {
|
||||||
if (state == Vpn::ConnectionState::Connected) {
|
if (state == Vpn::ConnectionState::Connected) {
|
||||||
IpcClient::Interface()->resetIpStack();
|
IpcClient::Interface()->resetIpStack();
|
||||||
IpcClient::Interface()->flushDns();
|
IpcClient::Interface()->flushDns();
|
||||||
@@ -212,14 +197,41 @@ void VpnConnection::deleteRoutes(const QStringList &ips)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool VpnConnection::InterfaceReady()
|
||||||
|
{
|
||||||
|
#ifdef AMNEZIA_DESKTOP
|
||||||
|
if (!m_IpcClient) {
|
||||||
|
m_IpcClient = new IpcClient(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_IpcClient->isSocketConnected()) {
|
||||||
|
if (!IpcClient::init(m_IpcClient)) {
|
||||||
|
qWarning() << "Error occurred when init IPC client";
|
||||||
|
emit serviceIsNotReady();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return IpcClient::Interface() != nullptr;
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void VpnConnection::flushDns()
|
void VpnConnection::flushDns()
|
||||||
{
|
{
|
||||||
#ifdef AMNEZIA_DESKTOP
|
#ifdef AMNEZIA_DESKTOP
|
||||||
if (IpcClient::Interface())
|
if (InterfaceReady())
|
||||||
IpcClient::Interface()->flushDns();
|
IpcClient::Interface()->flushDns();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VpnConnection::disconnectSlots()
|
||||||
|
{
|
||||||
|
if (m_vpnProtocol) {
|
||||||
|
m_vpnProtocol->disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ErrorCode VpnConnection::lastError() const
|
ErrorCode VpnConnection::lastError() const
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
@@ -240,20 +252,11 @@ void VpnConnection::connectToVpn(int serverIndex, const ServerCredentials &crede
|
|||||||
.arg(serverIndex)
|
.arg(serverIndex)
|
||||||
.arg(ContainerProps::containerToString(container))
|
.arg(ContainerProps::containerToString(container))
|
||||||
<< m_settings->routeMode();
|
<< m_settings->routeMode();
|
||||||
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) && !defined(MACOS_NE)
|
|
||||||
if (!m_IpcClient) {
|
|
||||||
m_IpcClient = new IpcClient(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_IpcClient->isSocketConnected()) {
|
if (!InterfaceReady()) {
|
||||||
if (!IpcClient::init(m_IpcClient)) {
|
|
||||||
qWarning() << "Error occurred when init IPC client";
|
|
||||||
emit serviceIsNotReady();
|
|
||||||
emit connectionStateChanged(Vpn::ConnectionState::Error);
|
emit connectionStateChanged(Vpn::ConnectionState::Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_remoteAddress = NetworkUtilities::getIPAddress(credentials.hostName);
|
m_remoteAddress = NetworkUtilities::getIPAddress(credentials.hostName);
|
||||||
emit connectionStateChanged(Vpn::ConnectionState::Connecting);
|
emit connectionStateChanged(Vpn::ConnectionState::Connecting);
|
||||||
@@ -440,13 +443,18 @@ QString VpnConnection::bytesPerSecToText(quint64 bytes)
|
|||||||
void VpnConnection::disconnectFromVpn()
|
void VpnConnection::disconnectFromVpn()
|
||||||
{
|
{
|
||||||
#ifdef AMNEZIA_DESKTOP
|
#ifdef AMNEZIA_DESKTOP
|
||||||
QString proto = m_settings->defaultContainerName(m_settings->defaultServerIndex());
|
if (InterfaceReady()) {
|
||||||
if (IpcClient::Interface()) {
|
|
||||||
IpcClient::Interface()->flushDns();
|
|
||||||
|
|
||||||
|
m_vpnProtocol.data()->stop();
|
||||||
|
qDebug() << "Interface is ready!";
|
||||||
|
|
||||||
|
QRemoteObjectPendingReply<bool> flushDnsResp = IpcClient::Interface()->flushDns();
|
||||||
|
flushDnsResp.waitForFinished(1000);
|
||||||
|
|
||||||
|
qDebug() << "Flushed DNS";
|
||||||
// delete cached routes
|
// delete cached routes
|
||||||
QRemoteObjectPendingReply<bool> response = IpcClient::Interface()->clearSavedRoutes();
|
QRemoteObjectPendingReply<bool> clearSavedRoutesResp = IpcClient::Interface()->clearSavedRoutes();
|
||||||
response.waitForFinished(1000);
|
clearSavedRoutesResp.waitForFinished(1000);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -475,12 +483,13 @@ void VpnConnection::disconnectFromVpn()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef Q_OS_ANDROID
|
#if !defined(Q_OS_ANDROID) && !defined(AMNEZIA_DESKTOP)
|
||||||
if (m_vpnProtocol) {
|
if (m_vpnProtocol) {
|
||||||
m_vpnProtocol->deleteLater();
|
m_vpnProtocol->deleteLater();
|
||||||
}
|
}
|
||||||
m_vpnProtocol = nullptr;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
m_vpnProtocol = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vpn::ConnectionState VpnConnection::connectionState()
|
Vpn::ConnectionState VpnConnection::connectionState()
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public slots:
|
|||||||
void deleteRoutes(const QStringList &ips);
|
void deleteRoutes(const QStringList &ips);
|
||||||
void flushDns();
|
void flushDns();
|
||||||
void onKillSwitchModeChanged(bool enabled);
|
void onKillSwitchModeChanged(bool enabled);
|
||||||
|
void disconnectSlots();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void bytesChanged(quint64 receivedBytes, quint64 sentBytes);
|
void bytesChanged(quint64 receivedBytes, quint64 sentBytes);
|
||||||
@@ -95,6 +96,7 @@ private:
|
|||||||
|
|
||||||
void appendSplitTunnelingConfig();
|
void appendSplitTunnelingConfig();
|
||||||
void appendKillSwitchConfig();
|
void appendKillSwitchConfig();
|
||||||
|
bool InterfaceReady();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VPNCONNECTION_H
|
#endif // VPNCONNECTION_H
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class IpcInterface
|
|||||||
SLOT( int routeAddList(const QString &gw, const QStringList &ips) );
|
SLOT( int routeAddList(const QString &gw, const QStringList &ips) );
|
||||||
SLOT( bool clearSavedRoutes() );
|
SLOT( bool clearSavedRoutes() );
|
||||||
SLOT( bool routeDeleteList(const QString &gw, const QStringList &ip) );
|
SLOT( bool routeDeleteList(const QString &gw, const QStringList &ip) );
|
||||||
SLOT( void flushDns() );
|
SLOT( bool flushDns() );
|
||||||
SLOT( void resetIpStack() );
|
SLOT( void resetIpStack() );
|
||||||
|
|
||||||
SLOT( bool checkAndInstallDriver() );
|
SLOT( bool checkAndInstallDriver() );
|
||||||
@@ -25,8 +25,8 @@ class IpcInterface
|
|||||||
SLOT( bool createTun(const QString &dev, const QString &subnet) );
|
SLOT( bool createTun(const QString &dev, const QString &subnet) );
|
||||||
SLOT( bool deleteTun(const QString &dev) );
|
SLOT( bool deleteTun(const QString &dev) );
|
||||||
|
|
||||||
SLOT( void StartRoutingIpv6() );
|
SLOT( bool StartRoutingIpv6() );
|
||||||
SLOT( void StopRoutingIpv6() );
|
SLOT( bool StopRoutingIpv6() );
|
||||||
|
|
||||||
SLOT( bool disableKillSwitch() );
|
SLOT( bool disableKillSwitch() );
|
||||||
SLOT( bool disableAllTraffic() );
|
SLOT( bool disableAllTraffic() );
|
||||||
|
|||||||
+5
-5
@@ -83,7 +83,7 @@ bool IpcServer::routeDeleteList(const QString &gw, const QStringList &ips)
|
|||||||
return Router::routeDeleteList(gw, ips);
|
return Router::routeDeleteList(gw, ips);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IpcServer::flushDns()
|
bool IpcServer::flushDns()
|
||||||
{
|
{
|
||||||
#ifdef MZ_DEBUG
|
#ifdef MZ_DEBUG
|
||||||
qDebug() << "IpcServer::flushDns";
|
qDebug() << "IpcServer::flushDns";
|
||||||
@@ -157,13 +157,13 @@ bool IpcServer::updateResolvers(const QString &ifname, const QList<QHostAddress>
|
|||||||
return Router::updateResolvers(ifname, resolvers);
|
return Router::updateResolvers(ifname, resolvers);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IpcServer::StartRoutingIpv6()
|
bool IpcServer::StartRoutingIpv6()
|
||||||
{
|
{
|
||||||
Router::StartRoutingIpv6();
|
return Router::StartRoutingIpv6();
|
||||||
}
|
}
|
||||||
void IpcServer::StopRoutingIpv6()
|
bool IpcServer::StopRoutingIpv6()
|
||||||
{
|
{
|
||||||
Router::StopRoutingIpv6();
|
return Router::StopRoutingIpv6();
|
||||||
}
|
}
|
||||||
|
|
||||||
void IpcServer::setLogsEnabled(bool enabled)
|
void IpcServer::setLogsEnabled(bool enabled)
|
||||||
|
|||||||
+3
-3
@@ -23,7 +23,7 @@ public:
|
|||||||
virtual int routeAddList(const QString &gw, const QStringList &ips) override;
|
virtual int routeAddList(const QString &gw, const QStringList &ips) override;
|
||||||
virtual bool clearSavedRoutes() override;
|
virtual bool clearSavedRoutes() override;
|
||||||
virtual bool routeDeleteList(const QString &gw, const QStringList &ips) override;
|
virtual bool routeDeleteList(const QString &gw, const QStringList &ips) override;
|
||||||
virtual void flushDns() override;
|
virtual bool flushDns() override;
|
||||||
virtual void resetIpStack() override;
|
virtual void resetIpStack() override;
|
||||||
virtual bool checkAndInstallDriver() override;
|
virtual bool checkAndInstallDriver() override;
|
||||||
virtual QStringList getTapList() override;
|
virtual QStringList getTapList() override;
|
||||||
@@ -32,8 +32,8 @@ public:
|
|||||||
virtual void setLogsEnabled(bool enabled) override;
|
virtual void setLogsEnabled(bool enabled) override;
|
||||||
virtual bool createTun(const QString &dev, const QString &subnet) override;
|
virtual bool createTun(const QString &dev, const QString &subnet) override;
|
||||||
virtual bool deleteTun(const QString &dev) override;
|
virtual bool deleteTun(const QString &dev) override;
|
||||||
virtual void StartRoutingIpv6() override;
|
virtual bool StartRoutingIpv6() override;
|
||||||
virtual void StopRoutingIpv6() override;
|
virtual bool StopRoutingIpv6() override;
|
||||||
virtual bool disableAllTraffic() override;
|
virtual bool disableAllTraffic() override;
|
||||||
virtual bool addKillSwitchAllowedRange(QStringList ranges) override;
|
virtual bool addKillSwitchAllowedRange(QStringList ranges) override;
|
||||||
virtual bool resetKillSwitchAllowedRange(QStringList ranges) override;
|
virtual bool resetKillSwitchAllowedRange(QStringList ranges) override;
|
||||||
|
|||||||
@@ -98,6 +98,17 @@ bool KillSwitch::disableKillSwitch() {
|
|||||||
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv4, QStringLiteral("320.allowDNS"), false);
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv4, QStringLiteral("320.allowDNS"), false);
|
||||||
LinuxFirewall::setAnchorEnabled(LinuxFirewall::Both, QStringLiteral("400.allowPIA"), false);
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::Both, QStringLiteral("400.allowPIA"), false);
|
||||||
} else {
|
} else {
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::Both, QStringLiteral("000.allowLoopback"), true);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::Both, QStringLiteral("100.blockAll"), false);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv4, QStringLiteral("110.allowNets"), false);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv4, QStringLiteral("120.blockNets"), false);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv4, QStringLiteral("200.allowVPN"), false);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv6, QStringLiteral("250.blockIPv6"), false);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::Both, QStringLiteral("290.allowDHCP"), true);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::Both, QStringLiteral("300.allowLAN"), true);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv4, QStringLiteral("310.blockDNS"), false);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::IPv4, QStringLiteral("320.allowDNS"), false);
|
||||||
|
LinuxFirewall::setAnchorEnabled(LinuxFirewall::Both, QStringLiteral("400.allowPIA"), false);
|
||||||
LinuxFirewall::uninstall();
|
LinuxFirewall::uninstall();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+12
-12
@@ -42,14 +42,14 @@ int Router::routeDeleteList(const QString &gw, const QStringList &ips)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Router::flushDns()
|
bool Router::flushDns()
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
RouterWin::Instance().flushDns();
|
return RouterWin::Instance().flushDns();
|
||||||
#elif defined (Q_OS_MAC)
|
#elif defined (Q_OS_MAC)
|
||||||
RouterMac::Instance().flushDns();
|
return RouterMac::Instance().flushDns();
|
||||||
#elif defined Q_OS_LINUX
|
#elif defined Q_OS_LINUX
|
||||||
RouterLinux::Instance().flushDns();
|
return RouterLinux::Instance().flushDns();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,25 +100,25 @@ bool Router::updateResolvers(const QString& ifname, const QList<QHostAddress>& r
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Router::StopRoutingIpv6()
|
bool Router::StopRoutingIpv6()
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
RouterWin::Instance().StopRoutingIpv6();
|
return RouterWin::Instance().StopRoutingIpv6();
|
||||||
#elif defined (Q_OS_MAC)
|
#elif defined (Q_OS_MAC)
|
||||||
// todo fixme
|
return true;// todo fixme
|
||||||
#elif defined Q_OS_LINUX
|
#elif defined Q_OS_LINUX
|
||||||
RouterLinux::Instance().StopRoutingIpv6();
|
return RouterLinux::Instance().StopRoutingIpv6();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Router::StartRoutingIpv6()
|
bool Router::StartRoutingIpv6()
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
RouterWin::Instance().StartRoutingIpv6();
|
return RouterWin::Instance().StartRoutingIpv6();
|
||||||
#elif defined (Q_OS_MAC)
|
#elif defined (Q_OS_MAC)
|
||||||
// todo fixme
|
return true;// todo fixme
|
||||||
#elif defined Q_OS_LINUX
|
#elif defined Q_OS_LINUX
|
||||||
RouterLinux::Instance().StartRoutingIpv6();
|
return RouterLinux::Instance().StartRoutingIpv6();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,12 +19,12 @@ public:
|
|||||||
static int routeAddList(const QString &gw, const QStringList &ips);
|
static int routeAddList(const QString &gw, const QStringList &ips);
|
||||||
static bool clearSavedRoutes();
|
static bool clearSavedRoutes();
|
||||||
static int routeDeleteList(const QString &gw, const QStringList &ips);
|
static int routeDeleteList(const QString &gw, const QStringList &ips);
|
||||||
static void flushDns();
|
static bool flushDns();
|
||||||
static void resetIpStack();
|
static void resetIpStack();
|
||||||
static bool createTun(const QString &dev, const QString &subnet);
|
static bool createTun(const QString &dev, const QString &subnet);
|
||||||
static bool deleteTun(const QString &dev);
|
static bool deleteTun(const QString &dev);
|
||||||
static void StartRoutingIpv6();
|
static bool StartRoutingIpv6();
|
||||||
static void StopRoutingIpv6();
|
static bool StopRoutingIpv6();
|
||||||
static bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
static bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ bool RouterLinux::isServiceActive(const QString &serviceName) {
|
|||||||
return process.exitCode() == 0;
|
return process.exitCode() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterLinux::flushDns()
|
bool RouterLinux::flushDns()
|
||||||
{
|
{
|
||||||
QProcess p;
|
QProcess p;
|
||||||
p.setProcessChannelMode(QProcess::MergedChannels);
|
p.setProcessChannelMode(QProcess::MergedChannels);
|
||||||
@@ -174,7 +174,7 @@ void RouterLinux::flushDns()
|
|||||||
p.start("systemctl", { "restart", "systemd-resolved" });
|
p.start("systemctl", { "restart", "systemd-resolved" });
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "No suitable DNS manager found.";
|
qDebug() << "No suitable DNS manager found.";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.waitForFinished();
|
p.waitForFinished();
|
||||||
@@ -183,6 +183,8 @@ void RouterLinux::flushDns()
|
|||||||
qDebug().noquote() << "Flush dns completed";
|
qDebug().noquote() << "Flush dns completed";
|
||||||
else
|
else
|
||||||
qDebug().noquote() << "OUTPUT systemctl restart nscd/systemd-resolved: " + output;
|
qDebug().noquote() << "OUTPUT systemctl restart nscd/systemd-resolved: " + output;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RouterLinux::createTun(const QString &dev, const QString &subnet) {
|
bool RouterLinux::createTun(const QString &dev, const QString &subnet) {
|
||||||
@@ -279,7 +281,7 @@ bool RouterLinux::updateResolvers(const QString& ifname, const QList<QHostAddres
|
|||||||
return m_dnsUtil->updateResolvers(ifname, resolvers);
|
return m_dnsUtil->updateResolvers(ifname, resolvers);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterLinux::StartRoutingIpv6()
|
bool RouterLinux::StartRoutingIpv6()
|
||||||
{
|
{
|
||||||
QProcess process;
|
QProcess process;
|
||||||
QStringList commands;
|
QStringList commands;
|
||||||
@@ -289,12 +291,12 @@ void RouterLinux::StartRoutingIpv6()
|
|||||||
if (!process.waitForStarted(1000))
|
if (!process.waitForStarted(1000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not start activate ipv6\n";
|
qDebug().noquote() << "Could not start activate ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
else if (!process.waitForFinished(2000))
|
else if (!process.waitForFinished(2000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not activate ipv6\n";
|
qDebug().noquote() << "Could not activate ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
commands.clear();
|
commands.clear();
|
||||||
|
|
||||||
@@ -303,19 +305,20 @@ void RouterLinux::StartRoutingIpv6()
|
|||||||
if (!process.waitForStarted(1000))
|
if (!process.waitForStarted(1000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not start activate ipv6\n";
|
qDebug().noquote() << "Could not start activate ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
else if (!process.waitForFinished(2000))
|
else if (!process.waitForFinished(2000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not activate ipv6\n";
|
qDebug().noquote() << "Could not activate ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
commands.clear();
|
commands.clear();
|
||||||
|
|
||||||
qDebug().noquote() << "StartRoutingIpv6 OK";
|
qDebug().noquote() << "StartRoutingIpv6 OK";
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterLinux::StopRoutingIpv6()
|
bool RouterLinux::StopRoutingIpv6()
|
||||||
{
|
{
|
||||||
QProcess process;
|
QProcess process;
|
||||||
QStringList commands;
|
QStringList commands;
|
||||||
@@ -325,12 +328,12 @@ void RouterLinux::StopRoutingIpv6()
|
|||||||
if (!process.waitForStarted(1000))
|
if (!process.waitForStarted(1000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not start disable ipv6\n";
|
qDebug().noquote() << "Could not start disable ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
else if (!process.waitForFinished(2000))
|
else if (!process.waitForFinished(2000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not disable ipv6\n";
|
qDebug().noquote() << "Could not disable ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
commands.clear();
|
commands.clear();
|
||||||
|
|
||||||
@@ -339,14 +342,15 @@ void RouterLinux::StopRoutingIpv6()
|
|||||||
if (!process.waitForStarted(1000))
|
if (!process.waitForStarted(1000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not start disable ipv6\n";
|
qDebug().noquote() << "Could not start disable ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
else if (!process.waitForFinished(2000))
|
else if (!process.waitForFinished(2000))
|
||||||
{
|
{
|
||||||
qDebug().noquote() << "Could not disable ipv6\n";
|
qDebug().noquote() << "Could not disable ipv6\n";
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
commands.clear();
|
commands.clear();
|
||||||
|
|
||||||
qDebug().noquote() << "StopRoutingIpv6 OK";
|
qDebug().noquote() << "StopRoutingIpv6 OK";
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ public:
|
|||||||
bool routeDelete(const QString &ip, const QString &gw, const int &sock);
|
bool routeDelete(const QString &ip, const QString &gw, const int &sock);
|
||||||
bool routeDeleteList(const QString &gw, const QStringList &ips);
|
bool routeDeleteList(const QString &gw, const QStringList &ips);
|
||||||
QString getgatewayandiface();
|
QString getgatewayandiface();
|
||||||
void flushDns();
|
bool flushDns();
|
||||||
bool createTun(const QString &dev, const QString &subnet);
|
bool createTun(const QString &dev, const QString &subnet);
|
||||||
bool deleteTun(const QString &dev);
|
bool deleteTun(const QString &dev);
|
||||||
void StartRoutingIpv6();
|
bool StartRoutingIpv6();
|
||||||
void StopRoutingIpv6();
|
bool StopRoutingIpv6();
|
||||||
bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ bool RouterMac::deleteTun(const QString &dev)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterMac::flushDns()
|
bool RouterMac::flushDns()
|
||||||
{
|
{
|
||||||
// sudo killall -HUP mDNSResponder
|
// sudo killall -HUP mDNSResponder
|
||||||
QProcess p;
|
QProcess p;
|
||||||
@@ -174,5 +174,7 @@ void RouterMac::flushDns()
|
|||||||
|
|
||||||
p.start("killall", QStringList() << "-HUP" << "mDNSResponder");
|
p.start("killall", QStringList() << "-HUP" << "mDNSResponder");
|
||||||
p.waitForFinished();
|
p.waitForFinished();
|
||||||
|
|
||||||
qDebug().noquote() << "OUTPUT killall -HUP mDNSResponder: " + p.readAll();
|
qDebug().noquote() << "OUTPUT killall -HUP mDNSResponder: " + p.readAll();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public:
|
|||||||
bool clearSavedRoutes();
|
bool clearSavedRoutes();
|
||||||
bool routeDelete(const QString &ip, const QString &gw);
|
bool routeDelete(const QString &ip, const QString &gw);
|
||||||
bool routeDeleteList(const QString &gw, const QStringList &ips);
|
bool routeDeleteList(const QString &gw, const QStringList &ips);
|
||||||
void flushDns();
|
bool flushDns();
|
||||||
bool createTun(const QString &dev, const QString &subnet);
|
bool createTun(const QString &dev, const QString &subnet);
|
||||||
bool deleteTun(const QString &dev);
|
bool deleteTun(const QString &dev);
|
||||||
bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ int RouterWin::routeDeleteList(const QString &gw, const QStringList &ips)
|
|||||||
return success_count;
|
return success_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterWin::flushDns()
|
bool RouterWin::flushDns()
|
||||||
{
|
{
|
||||||
QProcess p;
|
QProcess p;
|
||||||
p.setProcessChannelMode(QProcess::MergedChannels);
|
p.setProcessChannelMode(QProcess::MergedChannels);
|
||||||
@@ -281,6 +281,7 @@ void RouterWin::flushDns()
|
|||||||
|
|
||||||
p.start(command);
|
p.start(command);
|
||||||
p.waitForFinished();
|
p.waitForFinished();
|
||||||
|
return true;
|
||||||
//qDebug().noquote() << "OUTPUT ipconfig /flushdns: " + p.readAll();
|
//qDebug().noquote() << "OUTPUT ipconfig /flushdns: " + p.readAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -444,7 +445,7 @@ bool RouterWin::updateResolvers(const QString& ifname, const QList<QHostAddress>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void RouterWin::StopRoutingIpv6()
|
bool RouterWin::StopRoutingIpv6()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
QProcess p;
|
QProcess p;
|
||||||
@@ -464,9 +465,10 @@ void RouterWin::StopRoutingIpv6()
|
|||||||
p.start(command);
|
p.start(command);
|
||||||
p.waitForFinished();
|
p.waitForFinished();
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RouterWin::StartRoutingIpv6()
|
bool RouterWin::StartRoutingIpv6()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
QProcess p;
|
QProcess p;
|
||||||
@@ -486,5 +488,6 @@ void RouterWin::StartRoutingIpv6()
|
|||||||
p.start(command);
|
p.start(command);
|
||||||
p.waitForFinished();
|
p.waitForFinished();
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,11 +39,11 @@ public:
|
|||||||
int routeAddList(const QString &gw, const QStringList &ips);
|
int routeAddList(const QString &gw, const QStringList &ips);
|
||||||
bool clearSavedRoutes();
|
bool clearSavedRoutes();
|
||||||
int routeDeleteList(const QString &gw, const QStringList &ips);
|
int routeDeleteList(const QString &gw, const QStringList &ips);
|
||||||
void flushDns();
|
bool flushDns();
|
||||||
void resetIpStack();
|
void resetIpStack();
|
||||||
|
|
||||||
void StartRoutingIpv6();
|
bool StartRoutingIpv6();
|
||||||
void StopRoutingIpv6();
|
bool StopRoutingIpv6();
|
||||||
|
|
||||||
void suspendWcmSvc(bool suspend);
|
void suspendWcmSvc(bool suspend);
|
||||||
bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
bool updateResolvers(const QString& ifname, const QList<QHostAddress>& resolvers);
|
||||||
|
|||||||
Reference in New Issue
Block a user