diff --git a/linphone-app/CMakeLists.txt b/linphone-app/CMakeLists.txt
index 95a900923..5399280c3 100644
--- a/linphone-app/CMakeLists.txt
+++ b/linphone-app/CMakeLists.txt
@@ -189,6 +189,10 @@ set(SOURCES
src/components/timeline/TimelineModel.cpp
src/components/timeline/TimelineListModel.cpp
src/components/timeline/TimelineProxyModel.cpp
+ src/components/tunnel/TunnelModel.cpp
+ src/components/tunnel/TunnelConfigModel.cpp
+ src/components/tunnel/TunnelConfigListModel.cpp
+ src/components/tunnel/TunnelConfigProxyModel.cpp
src/components/url-handlers/UrlHandlers.cpp
src/utils/Constants.cpp
src/utils/LinphoneEnums.cpp
@@ -291,6 +295,10 @@ set(HEADERS
src/components/timeline/TimelineModel.hpp
src/components/timeline/TimelineListModel.hpp
src/components/timeline/TimelineProxyModel.hpp
+ src/components/tunnel/TunnelModel.hpp
+ src/components/tunnel/TunnelConfigModel.hpp
+ src/components/tunnel/TunnelConfigListModel.hpp
+ src/components/tunnel/TunnelConfigProxyModel.hpp
src/components/url-handlers/UrlHandlers.hpp
src/utils/Constants.hpp
src/utils/LinphoneEnums.hpp
diff --git a/linphone-app/assets/images/led_green.svg b/linphone-app/assets/images/led_green.svg
index f99055fe5..f5cfbfcc6 100644
--- a/linphone-app/assets/images/led_green.svg
+++ b/linphone-app/assets/images/led_green.svg
@@ -2,9 +2,8 @@
diff --git a/linphone-app/assets/images/led_orange.svg b/linphone-app/assets/images/led_orange.svg
index bcb34f6b6..ac409f2f9 100644
--- a/linphone-app/assets/images/led_orange.svg
+++ b/linphone-app/assets/images/led_orange.svg
@@ -2,9 +2,8 @@
diff --git a/linphone-app/assets/images/led_red.svg b/linphone-app/assets/images/led_red.svg
index 5c5e0163c..640339087 100644
--- a/linphone-app/assets/images/led_red.svg
+++ b/linphone-app/assets/images/led_red.svg
@@ -25,19 +25,20 @@
inkscape:cx="3.9948454"
inkscape:cy="4"
inkscape:window-width="1920"
- inkscape:window-height="1043"
+ inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
- inkscape:current-layer="svg8" />
+ inkscape:current-layer="g6" />
+ d="m 4.0111984,7.0605044 a 3.0433256,3.053726 0 1 1 0,-6.10745189 3.0433256,3.053726 0 0 1 0,6.10745189 z"
+ fill="#dc4100"
+ id="path2"
+ style="stroke-width:0.76213" />
+ id="defs12" />
+ inkscape:current-layer="g6" />
-
-
-
-
-
-
-
-
-
-
+ id="g6">
+
+
diff --git a/linphone-app/assets/languages/da.ts b/linphone-app/assets/languages/da.ts
index d06897198..3dd90f5b8 100644
--- a/linphone-app/assets/languages/da.ts
+++ b/linphone-app/assets/languages/da.ts
@@ -1610,6 +1610,24 @@ Klik her: <a href="%1">%1</a>
Offline
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2312,6 +2330,119 @@ Klik her: <a href="%1">%1</a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ ANNULLER
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2482,6 +2613,11 @@ Klik her: <a href="%1">%1</a>
uiAdvancedAvanceret
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/de.ts b/linphone-app/assets/languages/de.ts
index 372d12d71..31b314873 100644
--- a/linphone-app/assets/languages/de.ts
+++ b/linphone-app/assets/languages/de.ts
@@ -1610,6 +1610,24 @@ Klicken Sie hier: <a href="%1">%1</a>
Offline
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2312,6 +2330,119 @@ Klicken Sie hier: <a href="%1">%1</a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ ABBRECHEN
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2482,6 +2613,11 @@ Klicken Sie hier: <a href="%1">%1</a>
uiAdvancedErweitert
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/en.ts b/linphone-app/assets/languages/en.ts
index 5c868c459..6a349ca6b 100644
--- a/linphone-app/assets/languages/en.ts
+++ b/linphone-app/assets/languages/en.ts
@@ -756,7 +756,7 @@ Server URL not configured.
missingConferenceURI'You need to set the conference URI in your account settings to create a conference based chat room.' : Tooltip to warn the user that a setting is missing in its configuration.
- You need to set the conference URI in your account settings to create a conference based chat room.
+ You need to set the conference URI in your account settings to create a conference based chat room.
@@ -1610,6 +1610,24 @@ Click here: <a href="%1">%1</a>
Offline
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+ Enable
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+ Disable
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+ Auto
+
+SettingsAdvanced
@@ -2335,6 +2353,119 @@ Click here: <a href="%1">%1</a>
Invalid conference URI
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+ Tunnel Status
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+ Domain
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+ Username
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+ SIP
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ Cancel
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+ Set HTTP proxy
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+ Host
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+ Port
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+ Username
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+ Password
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+ Apply
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+ Mode
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+ Dual mode
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+ Server
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+ Hostname
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+ Port
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+ Dual hostname URL
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+ Dual port
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+ Remote UDP mirror port
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+ Delay
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+ Add server
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+ Apply
+
+SettingsUi
@@ -2505,6 +2636,11 @@ Click here: <a href="%1">%1</a>
uiAdvancedAdvanced
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+ Tunnel
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/es.ts b/linphone-app/assets/languages/es.ts
index 0ae44e77e..a61405436 100644
--- a/linphone-app/assets/languages/es.ts
+++ b/linphone-app/assets/languages/es.ts
@@ -1610,6 +1610,24 @@ Haga clic aquí: <a href="%1">%1 </a>
Desconectado
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2312,6 +2330,119 @@ Haga clic aquí: <a href="%1">%1 </a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ CANCELAR
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2482,6 +2613,11 @@ Haga clic aquí: <a href="%1">%1 </a>
uiAdvancedAvanzado
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts
index eddb53a3c..fea8f51a1 100644
--- a/linphone-app/assets/languages/fr_FR.ts
+++ b/linphone-app/assets/languages/fr_FR.ts
@@ -1610,6 +1610,24 @@ Cliquez ici : <a href="%1">%1</a>
Hors-ligne
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2312,6 +2330,119 @@ Cliquez ici : <a href="%1">%1</a>
URI de conférence invalide
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2482,6 +2613,11 @@ Cliquez ici : <a href="%1">%1</a>
uiAdvancedAvancés
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/hu.ts b/linphone-app/assets/languages/hu.ts
index b9b0086a0..bd54669db 100644
--- a/linphone-app/assets/languages/hu.ts
+++ b/linphone-app/assets/languages/hu.ts
@@ -1600,6 +1600,24 @@ Kattintson ide: <a href="%1">%1</a>
Kapcsolat nélküli
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2302,6 +2320,119 @@ Kattintson ide: <a href="%1">%1</a>
Érvénytelen konferencia URI-cím
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ Mégse
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2472,6 +2603,11 @@ Kattintson ide: <a href="%1">%1</a>
uiAdvancedHaladó
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts
index 934052e0d..5388546b0 100644
--- a/linphone-app/assets/languages/it.ts
+++ b/linphone-app/assets/languages/it.ts
@@ -1610,6 +1610,24 @@ Clicca: <a href="%1">%1</a>
Offline
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2312,6 +2330,119 @@ Clicca: <a href="%1">%1</a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ ANNULLA
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2482,6 +2613,11 @@ Clicca: <a href="%1">%1</a>
uiAdvancedAvanzate
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/ja.ts b/linphone-app/assets/languages/ja.ts
index e3b388192..288226e15 100644
--- a/linphone-app/assets/languages/ja.ts
+++ b/linphone-app/assets/languages/ja.ts
@@ -1600,6 +1600,24 @@
オフライン
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2302,6 +2320,119 @@
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ キャンセル
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2472,6 +2603,11 @@
uiAdvanced詳細
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/lt.ts b/linphone-app/assets/languages/lt.ts
index 688943e96..9a923784a 100644
--- a/linphone-app/assets/languages/lt.ts
+++ b/linphone-app/assets/languages/lt.ts
@@ -1620,6 +1620,24 @@ Spustelėkite čia: <a href="%1">%1</a>
Atsijungęs
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2322,6 +2340,119 @@ Spustelėkite čia: <a href="%1">%1</a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ ATSISAKYTI
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2492,6 +2623,11 @@ Spustelėkite čia: <a href="%1">%1</a>
uiAdvancedIšplėstiniai
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/pt_BR.ts b/linphone-app/assets/languages/pt_BR.ts
index 9b8b96115..2779a3faf 100644
--- a/linphone-app/assets/languages/pt_BR.ts
+++ b/linphone-app/assets/languages/pt_BR.ts
@@ -1610,6 +1610,24 @@ Clique aqui: <a href="%1">%1 </a>
Offline
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2312,6 +2330,119 @@ Clique aqui: <a href="%1">%1 </a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ CANCELAR
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2482,6 +2613,11 @@ Clique aqui: <a href="%1">%1 </a>
uiAdvancedAvançado
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/ru.ts b/linphone-app/assets/languages/ru.ts
index 8db5f7756..1714dc86e 100644
--- a/linphone-app/assets/languages/ru.ts
+++ b/linphone-app/assets/languages/ru.ts
@@ -1620,6 +1620,24 @@
Офлайн
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2322,6 +2340,119 @@
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ ОТМЕНА
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2492,6 +2623,11 @@
uiAdvancedДополнительные
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/sv.ts b/linphone-app/assets/languages/sv.ts
index 8ae2292a3..98970eed5 100644
--- a/linphone-app/assets/languages/sv.ts
+++ b/linphone-app/assets/languages/sv.ts
@@ -1610,6 +1610,24 @@ Klicka här: <a href="%1">%1</a>
Frånkopplad
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2312,6 +2330,119 @@ Klicka här: <a href="%1">%1</a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ AVBRYT
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2482,6 +2613,11 @@ Klicka här: <a href="%1">%1</a>
uiAdvancedAvancerat
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/tr.ts b/linphone-app/assets/languages/tr.ts
index f66b10e0e..b67457209 100644
--- a/linphone-app/assets/languages/tr.ts
+++ b/linphone-app/assets/languages/tr.ts
@@ -1600,6 +1600,24 @@ Buraya tıklayın: <a href="%1">%1</a>
Çevrim dışı
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2302,6 +2320,119 @@ Buraya tıklayın: <a href="%1">%1</a>
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ İPTAL
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2472,6 +2603,11 @@ Buraya tıklayın: <a href="%1">%1</a>
uiAdvancedGelişmiş
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/uk.ts b/linphone-app/assets/languages/uk.ts
index da7f38501..1f76c03e3 100644
--- a/linphone-app/assets/languages/uk.ts
+++ b/linphone-app/assets/languages/uk.ts
@@ -1620,6 +1620,24 @@
Не в мережі
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2322,6 +2340,119 @@
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ СКАСУВАТИ
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2492,6 +2623,11 @@
uiAdvancedДодаткове
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/assets/languages/zh_CN.ts b/linphone-app/assets/languages/zh_CN.ts
index 81fe0ab9d..9752f8e2e 100644
--- a/linphone-app/assets/languages/zh_CN.ts
+++ b/linphone-app/assets/languages/zh_CN.ts
@@ -1600,6 +1600,24 @@
离线
+
+ QObject
+
+ LinphoneEnums_TunnelModeEnable
+ 'Enable' : One word for button action to enable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeDisable
+ 'Disable' : One word for button action to disable tunnel mode.
+
+
+
+ LinphoneEnums_TunnelModeAuto
+ 'Auto' : One word for button action to set the auto tunnel mode.
+
+
+SettingsAdvanced
@@ -2302,6 +2320,119 @@
无效的会议URI
+
+ SettingsTunnel
+
+ tunnelStatus
+ 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+
+
+
+ tunnelDomain
+ 'Domain' : Field title of a textfield to set domain.
+
+
+
+ tunnelUsername
+ 'Username' : Field title of a textfield to set username.
+
+
+
+ tunnelSIP
+ 'SIP' : Field title of a switch to set SIP mode.
+
+
+
+ cancel
+ 'Cancel' : Button to cancel the action.
+ 取消
+
+
+ setHTTPProxy
+ 'Set HTTP proxy' : Button to set the new proxy.
+
+
+
+ proxyHttpHost
+ 'Host' : Placeholder to set hostname.
+
+
+
+ proxyHttpPort
+ 'Port' : Placehoilder to set port.
+
+
+
+ proxyHttpUsername
+ 'Username' : Placeholder to set username.
+
+
+
+ proxyHttpPassword
+ 'Password' : Placeholder to set password.
+
+
+
+ proxyHttpApply
+ 'Apply' : Button to set proxy from changes.
+
+
+
+ serverMode
+ 'Mode' : Field title on form to set tunnel mode.
+
+
+
+ serverDualMode
+ 'Dual mode' : Field title on form to set dual mode of the tunnel.
+
+
+
+ serverTitle
+ 'Server' : Title form to set a server
+
+
+
+ serverHostname
+ 'Hostname' : Field title on form to set hostname.
+
+
+
+ serverPort
+ 'Port' : Field title on form to set port.
+
+
+
+ serverDualHostname
+ 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+
+
+
+ serverDualPort
+ 'Dual port' : Field title on form to set the second port for the dual configuration.
+
+
+
+ serverRemoteUDPMirrorPort
+ 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+
+
+
+ serverDelay
+ 'Delay' : Field title on form to set the delay of the tunnel.
+
+
+
+ tunnelAddServer
+ 'Add server' : Button for adding a server
+
+
+
+ tunnelApply
+ 'Apply' : Button to apply changes.
+
+
+SettingsUi
@@ -2472,6 +2603,11 @@
uiAdvanced先进
+
+ tunnelTab
+ 'Tunnel' : Tab title for tunnel section in settings.
+
+ SmartSearchBar
diff --git a/linphone-app/resources.qrc b/linphone-app/resources.qrc
index 5770b8373..73f6be649 100644
--- a/linphone-app/resources.qrc
+++ b/linphone-app/resources.qrc
@@ -534,6 +534,7 @@
ui/views/App/Settings/SettingsNetwork.qmlui/views/App/Settings/SettingsSipAccounts.jsui/views/App/Settings/SettingsSipAccounts.qml
+ ui/views/App/Settings/SettingsTunnel.qmlui/views/App/Settings/SettingsUi.jsui/views/App/Settings/SettingsUi.qmlui/views/App/Settings/SettingsVideo.js
diff --git a/linphone-app/src/app/App.cpp b/linphone-app/src/app/App.cpp
index eb89df975..ca0cdefe0 100644
--- a/linphone-app/src/app/App.cpp
+++ b/linphone-app/src/app/App.cpp
@@ -636,9 +636,12 @@ void App::registerTypes () {
registerUncreatableType("HistoryModel");
registerUncreatableType("LdapModel");
registerUncreatableType("SearchResultModel");
- registerUncreatableType("SipAddressObserver");
+ registerUncreatableType("SipAddressObserver");
registerUncreatableType("VcardModel");
registerUncreatableType("TimelineModel");
+ registerUncreatableType("TunnelModel");
+ registerUncreatableType("TunnelConfigModel");
+ registerUncreatableType("TunnelConfigProxyModel");
registerUncreatableType("ParticipantModel");
registerUncreatableType("ParticipantListModel");
registerUncreatableType("ParticipantDeviceModel");
diff --git a/linphone-app/src/components/Components.hpp b/linphone-app/src/components/Components.hpp
index 1eb47f2e9..37688b1e8 100644
--- a/linphone-app/src/components/Components.hpp
+++ b/linphone-app/src/components/Components.hpp
@@ -75,6 +75,10 @@
#include "timeline/TimelineModel.hpp"
#include "timeline/TimelineProxyModel.hpp"
#include "timeline/TimelineListModel.hpp"
+#include "tunnel/TunnelModel.hpp"
+#include "tunnel/TunnelConfigModel.hpp"
+#include "tunnel/TunnelConfigListModel.hpp"
+#include "tunnel/TunnelConfigProxyModel.hpp"
#include "url-handlers/UrlHandlers.hpp"
#include "other/colors/ColorModel.hpp"
diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.hpp b/linphone-app/src/components/chat-room/ChatRoomModel.hpp
index afec81154..c238eea79 100644
--- a/linphone-app/src/components/chat-room/ChatRoomModel.hpp
+++ b/linphone-app/src/components/chat-room/ChatRoomModel.hpp
@@ -115,7 +115,7 @@ public:
CallEntry,
NoticeEntry
};
- Q_ENUM(EntryType);
+ Q_ENUM(EntryType)
//Q_PROPERTY(QString participants READ getParticipants NOTIFY participantsChanged);
diff --git a/linphone-app/src/components/settings/SettingsModel.cpp b/linphone-app/src/components/settings/SettingsModel.cpp
index e0c039722..2b1a109b9 100644
--- a/linphone-app/src/components/settings/SettingsModel.cpp
+++ b/linphone-app/src/components/settings/SettingsModel.cpp
@@ -30,12 +30,14 @@
#include "app/logger/Logger.hpp"
#include "app/paths/Paths.hpp"
#include "components/core/CoreManager.hpp"
+#include "components/tunnel/TunnelModel.hpp"
#include "include/LinphoneApp/PluginNetworkHelper.hpp"
#include "utils/Utils.hpp"
#include "utils/Constants.hpp"
#include "utils/MediastreamerUtils.hpp"
#include "SettingsModel.hpp"
+
// =============================================================================
using namespace std;
@@ -1144,6 +1146,16 @@ void SettingsModel::configureRlsUri (const shared_ptrsetString("sip", "rls_uri", "");
}
+//------------------------------------------------------------------------------
+
+bool SettingsModel::tunnelAvailable() const{
+ return CoreManager::getInstance()->getCore()->tunnelAvailable();
+}
+
+TunnelModel* SettingsModel::getTunnel() const{
+ return new TunnelModel(CoreManager::getInstance()->getCore()->getTunnel());
+}
+
// =============================================================================
// UI.
// =============================================================================
@@ -1343,6 +1355,13 @@ bool SettingsModel::getLogsEnabled (const shared_ptr &config)
}
// ---------------------------------------------------------------------------
+bool SettingsModel::isDeveloperSettingsAvailable() const {
+#ifdef DEBUG
+ return true;
+#else
+ return false;
+#endif
+}
bool SettingsModel::getDeveloperSettingsEnabled () const {
#ifdef DEBUG
return !!mConfig->getInt(UiSection, "developer_settings", 0);
diff --git a/linphone-app/src/components/settings/SettingsModel.hpp b/linphone-app/src/components/settings/SettingsModel.hpp
index 4463107b3..3d5a10efa 100644
--- a/linphone-app/src/components/settings/SettingsModel.hpp
+++ b/linphone-app/src/components/settings/SettingsModel.hpp
@@ -31,6 +31,7 @@
#include "components/contacts/ContactsImporterModel.hpp"
// =============================================================================
+class TunnelModel;
class SettingsModel : public QObject {
Q_OBJECT
@@ -430,6 +431,9 @@ public:
void configureRlsUri ();
void configureRlsUri (const std::shared_ptr &proxyConfig);
+ Q_INVOKABLE bool tunnelAvailable() const;
+ Q_INVOKABLE TunnelModel * getTunnel() const;
+
// UI. -----------------------------------------------------------------------
QFont getTextMessageFont() const;
@@ -480,7 +484,7 @@ public:
static bool getLogsEnabled (const std::shared_ptr &config);
// ---------------------------------------------------------------------------
-
+ Q_INVOKABLE bool isDeveloperSettingsAvailable() const;
bool getDeveloperSettingsEnabled () const;
void setDeveloperSettingsEnabled (bool status);
@@ -490,7 +494,6 @@ public:
bool getIsInCall() const;
-
bool isReadOnly(const std::string& section, const std::string& name) const;
std::string getEntryFullName(const std::string& section, const std::string& name) const; // Return the full name of the entry : 'name/readonly' or 'name'
@@ -611,7 +614,7 @@ signals:
void dscpVideoChanged (int dscp);
void rlsUriEnabledChanged (bool status);
-
+
// UI. -----------------------------------------------------------------------
void textMessageFontChanged(const QFont& font);
diff --git a/linphone-app/src/components/tunnel/TunnelConfigListModel.cpp b/linphone-app/src/components/tunnel/TunnelConfigListModel.cpp
new file mode 100644
index 000000000..dbf93bd42
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelConfigListModel.cpp
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#include
+
+#include "app/App.hpp"
+
+#include "TunnelConfigListModel.hpp"
+#include "utils/Utils.hpp"
+
+#include "components/Components.hpp"
+
+// =============================================================================
+
+TunnelConfigListModel::TunnelConfigListModel (std::shared_ptr tunnel, QObject *parent) : QAbstractListModel(parent) {
+ std::list> tunnelConfigs = tunnel->getServers() ;
+ for(auto config : tunnelConfigs){
+ auto configModel = std::make_shared(config);
+ mList << configModel;
+ }
+ if( mList.size() == 0) {
+ mList << std::make_shared(linphone::Factory::get()->createTunnelConfig());
+ }
+}
+
+int TunnelConfigListModel::rowCount (const QModelIndex &index) const{
+ return mList.count();
+}
+
+int TunnelConfigListModel::count(){
+ return mList.count();
+}
+
+void TunnelConfigListModel::updateTunnelConfigs(std::shared_ptr tunnel){
+ std::list> tunnelConfigs = tunnel->getServers() ;
+ beginResetModel();
+ mList.clear();
+ for(auto config : tunnelConfigs){
+ mList << std::make_shared(config);
+ }
+ endResetModel();
+ emit layoutChanged();
+}
+
+bool TunnelConfigListModel::apply(std::shared_ptr tunnel){
+ tunnel->cleanServers();
+ for(auto config : mList){
+ tunnel->addServer(config->getTunnelConfig());
+ }
+ updateTunnelConfigs(tunnel);
+ return true;
+}
+
+void TunnelConfigListModel::addTunnelConfig(){
+ int row = rowCount();
+ beginInsertRows(QModelIndex(),row,row);
+ mList << std::make_shared(linphone::Factory::get()->createTunnelConfig());
+ endInsertRows();
+}
+
+void TunnelConfigListModel::removeTunnelConfig(std::shared_ptr tunnel, TunnelConfigModel * model){
+ int row = 0;
+ while(row < mList.size() && mList[row].get() != model)
+ ++row;
+ if( row < mList.size()) {
+ removeRow(row);
+ tunnel->removeServer(model->getTunnelConfig());
+ }
+}
+
+QHash TunnelConfigListModel::roleNames () const {
+ QHash roles;
+ roles[Qt::DisplayRole] = "$tunnelConfig";
+ return roles;
+}
+
+QVariant TunnelConfigListModel::data (const QModelIndex &index, int role) const {
+ int row = index.row();
+
+ if (!index.isValid() || row < 0 || row >= mList.count())
+ return QVariant();
+
+ if (role == Qt::DisplayRole)
+ return QVariant::fromValue(mList[row].get());
+
+ return QVariant();
+}
+
+bool TunnelConfigListModel::removeRow (int row, const QModelIndex &parent){
+ return removeRows(row, 1, parent);
+}
+
+bool TunnelConfigListModel::removeRows (int row, int count, const QModelIndex &parent) {
+ int limit = row + count - 1;
+
+ if (row < 0 || count < 0 || limit >= mList.count())
+ return false;
+
+ beginRemoveRows(parent, row, limit);
+
+ for (int i = 0; i < count; ++i)
+ mList.takeAt(row);
+
+ endRemoveRows();
+
+ return true;
+}
diff --git a/linphone-app/src/components/tunnel/TunnelConfigListModel.hpp b/linphone-app/src/components/tunnel/TunnelConfigListModel.hpp
new file mode 100644
index 000000000..f70a6abbf
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelConfigListModel.hpp
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#ifndef TUNNEL_CONFIG_LIST_MODEL_H_
+#define TUNNEL_CONFIG_LIST_MODEL_H_
+
+
+#include
+// =============================================================================
+#include
+#include
+#include
+#include
+
+class TunnelConfigModel;
+
+class TunnelConfigListModel : public QAbstractListModel {
+ Q_OBJECT
+
+public:
+ TunnelConfigListModel (std::shared_ptr tunnel, QObject *parent = nullptr);
+
+ int rowCount (const QModelIndex &index = QModelIndex()) const override;
+ int count();
+
+ void updateTunnelConfigs(std::shared_ptr tunnel);
+ bool apply(std::shared_ptr tunnel);
+ void addTunnelConfig();
+ void removeTunnelConfig(std::shared_ptr tunnel, TunnelConfigModel * model);
+
+ virtual QHash roleNames () const override;
+ virtual QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
+
+
+private:
+ bool removeRow (int row, const QModelIndex &parent = QModelIndex());
+ virtual bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;
+
+ QList> mList;
+
+};
+
+Q_DECLARE_METATYPE(std::shared_ptr)
+
+#endif // TUNNEL_CONFIG_LIST_MODEL_H_
diff --git a/linphone-app/src/components/tunnel/TunnelConfigModel.cpp b/linphone-app/src/components/tunnel/TunnelConfigModel.cpp
new file mode 100644
index 000000000..bb3d0ac3f
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelConfigModel.cpp
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#include
+
+#include "app/App.hpp"
+
+#include "TunnelConfigModel.hpp"
+#include "utils/Utils.hpp"
+
+#include "components/Components.hpp"
+
+// =============================================================================
+
+using namespace std;
+
+TunnelConfigModel::TunnelConfigModel (shared_ptr tunnelConfig, QObject *parent) : QObject(parent) {
+ mTunnelConfig = tunnelConfig;
+}
+
+// -----------------------------------------------------------------------------
+
+QString TunnelConfigModel::getHost() const{
+ return Utils::coreStringToAppString(mTunnelConfig->getHost());
+}
+
+QString TunnelConfigModel::getHost2() const{
+ return Utils::coreStringToAppString(mTunnelConfig->getHost2());
+}
+
+int TunnelConfigModel::getPort() const{
+ return mTunnelConfig->getPort();
+}
+
+int TunnelConfigModel::getPort2() const{
+ return mTunnelConfig->getPort2();
+}
+
+int TunnelConfigModel::getRemoteUdpMirrorPort() const{
+ return mTunnelConfig->getRemoteUdpMirrorPort();
+}
+
+int TunnelConfigModel::getDelay() const{
+ return mTunnelConfig->getDelay();
+}
+
+void TunnelConfigModel::setHost(const QString& host){
+ mTunnelConfig->setHost(Utils::appStringToCoreString(host));
+ emit hostChanged();
+}
+
+void TunnelConfigModel::setHost2(const QString& host){
+ mTunnelConfig->setHost2(Utils::appStringToCoreString(host));
+ emit host2Changed();
+}
+
+void TunnelConfigModel::setPort(const int& port){
+ mTunnelConfig->setPort(port);
+ emit portChanged();
+}
+
+void TunnelConfigModel::setPort2(const int& port){
+ mTunnelConfig->setPort2(port);
+ emit port2Changed();
+}
+
+void TunnelConfigModel::setRemoteUdpMirrorPort(const int& port){
+ mTunnelConfig->setRemoteUdpMirrorPort(port);
+ emit remoteUdpMirrorPortChanged();
+}
+
+void TunnelConfigModel::setDelay(const int& delay){
+ mTunnelConfig->setDelay(delay);
+ emit delayChanged();
+}
+
+std::shared_ptr TunnelConfigModel::getTunnelConfig(){
+ return mTunnelConfig;
+}
diff --git a/linphone-app/src/components/tunnel/TunnelConfigModel.hpp b/linphone-app/src/components/tunnel/TunnelConfigModel.hpp
new file mode 100644
index 000000000..5b99784ed
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelConfigModel.hpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#ifndef TUNNEL_CONFIG_MODEL_H_
+#define TUNNEL_CONFIG_MODEL_H_
+
+
+#include
+// =============================================================================
+#include
+#include
+
+class TunnelConfigModel : public QObject {
+ Q_OBJECT
+
+public:
+ TunnelConfigModel (std::shared_ptr config, QObject *parent = nullptr);
+
+ Q_PROPERTY(QString host READ getHost WRITE setHost NOTIFY hostChanged)
+ Q_PROPERTY(QString host2 READ getHost2 WRITE setHost2 NOTIFY host2Changed)
+ Q_PROPERTY(int port READ getPort WRITE setPort NOTIFY portChanged)
+ Q_PROPERTY(int port2 READ getPort2 WRITE setPort2 NOTIFY port2Changed)
+ Q_PROPERTY(int remoteUdpMirrorPort READ getRemoteUdpMirrorPort WRITE setRemoteUdpMirrorPort NOTIFY remoteUdpMirrorPortChanged)
+ Q_PROPERTY(int delay READ getDelay WRITE setDelay NOTIFY delayChanged)
+
+ QString getHost() const;
+ QString getHost2() const;
+ int getPort() const;
+ int getPort2() const;
+ int getRemoteUdpMirrorPort() const;
+ int getDelay() const;
+
+ void setHost(const QString& host);
+ void setHost2(const QString& host);
+ void setPort(const int& port);
+ void setPort2(const int& port);
+ void setRemoteUdpMirrorPort(const int& port);
+ void setDelay(const int& delay);
+
+ std::shared_ptr getTunnelConfig();
+
+signals:
+ void hostChanged();
+ void host2Changed();
+ void portChanged();
+ void port2Changed();
+ void remoteUdpMirrorPortChanged();
+ void delayChanged();
+
+private:
+
+ std::shared_ptr mTunnelConfig;
+
+};
+
+Q_DECLARE_METATYPE(std::shared_ptr)
+
+#endif // TUNNEL_CONFIG_MODEL
diff --git a/linphone-app/src/components/tunnel/TunnelConfigProxyModel.cpp b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.cpp
new file mode 100644
index 000000000..46f0ae5d9
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.cpp
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#include
+
+#include "app/App.hpp"
+
+#include "TunnelConfigProxyModel.hpp"
+#include "utils/Utils.hpp"
+
+#include "components/Components.hpp"
+#include "TunnelConfigListModel.hpp"
+
+// =============================================================================
+
+TunnelConfigProxyModel::TunnelConfigProxyModel (QObject *parent) : QSortFilterProxyModel(parent){
+}
+
+bool TunnelConfigProxyModel::filterAcceptsRow (
+ int sourceRow,
+ const QModelIndex &sourceParent
+) const {
+ Q_UNUSED(sourceRow)
+ Q_UNUSED(sourceParent)
+ return true;
+}
+
+bool TunnelConfigProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const {
+ const TunnelConfigModel *deviceA = sourceModel()->data(left).value();
+ const TunnelConfigModel *deviceB = sourceModel()->data(right).value();
+
+ return deviceA->getHost() > deviceB->getHost();
+}
+//---------------------------------------------------------------------------------
+
+void TunnelConfigProxyModel::setTunnel(TunnelModel * tunnel){
+ setSourceModel(tunnel->getTunnelConfigs().get());
+}
\ No newline at end of file
diff --git a/linphone-app/src/components/tunnel/TunnelConfigProxyModel.hpp b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.hpp
new file mode 100644
index 000000000..c725af40a
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelConfigProxyModel.hpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#ifndef TUNNEL_CONFIG_PROXY_MODEL_H_
+#define TUNNEL_CONFIG_PROXY_MODEL_H_
+
+
+#include
+// =============================================================================
+#include
+#include
+#include
+#include
+
+class TunnelConfigListModel;
+class TunnelModel;
+
+class TunnelConfigProxyModel : public QSortFilterProxyModel {
+ Q_OBJECT
+
+public:
+ TunnelConfigProxyModel (QObject *parent = nullptr);
+
+ void setTunnel(TunnelModel * tunnel);
+
+protected:
+ virtual bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override;
+ virtual bool lessThan (const QModelIndex &left, const QModelIndex &right) const override;
+
+ std::shared_ptr mTunnelConfigs;
+
+};
+
+#endif
diff --git a/linphone-app/src/components/tunnel/TunnelModel.cpp b/linphone-app/src/components/tunnel/TunnelModel.cpp
new file mode 100644
index 000000000..db2606833
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelModel.cpp
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#include
+
+#include "app/App.hpp"
+
+#include "TunnelModel.hpp"
+#include "utils/Utils.hpp"
+
+#include "components/Components.hpp"
+
+// =============================================================================
+
+using namespace std;
+
+TunnelModel::TunnelModel (shared_ptr tunnel, QObject *parent) : QObject(parent) {
+ App::getInstance()->getEngine()->setObjectOwnership(this, QQmlEngine::CppOwnership);// Avoid QML to destroy it when passing by Q_INVOKABLE
+ mTunnel = tunnel;
+ if(mTunnel){
+ mTunnelConfigs = std::make_shared(mTunnel);
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+QString TunnelModel::getDomain() const{
+ return Utils::coreStringToAppString(mTunnel->getDomain());
+}
+
+QString TunnelModel::getUsername() const{
+ return Utils::coreStringToAppString(mTunnel->getUsername());
+}
+
+bool TunnelModel::getDualModeEnabled() const{
+ return mTunnel->dualModeEnabled();
+}
+
+LinphoneEnums::TunnelMode TunnelModel::getMode() const{
+ return LinphoneEnums::fromLinphone(mTunnel->getMode());
+}
+
+bool TunnelModel::getSipEnabled() const{
+ return mTunnel->sipEnabled();
+}
+
+// -----------------------------------------------------------------------------
+
+void TunnelModel::setDomain(const QString& data){
+ mTunnel->setDomain(Utils::appStringToCoreString(data));
+ emit domainChanged();
+}
+
+void TunnelModel::setUsername(const QString& data){
+ mTunnel->setUsername(Utils::appStringToCoreString(data));
+ emit usernameChanged();
+}
+
+void TunnelModel::setDualModeEnabled(const bool& data){
+ mTunnel->enableDualMode(data);
+ emit dualModeEnabledChanged();
+}
+
+void TunnelModel::setMode(const LinphoneEnums::TunnelMode& data){
+ mTunnel->setMode(LinphoneEnums::toLinphone(data));
+ emit modeChanged();
+}
+
+void TunnelModel::setSipEnabled(const bool& data){
+ mTunnel->enableSip(data);
+ emit sipEnabledChanged();
+}
+
+// -----------------------------------------------------------------------------
+
+std::shared_ptr TunnelModel::getTunnel(){
+ return mTunnel;
+}
+
+TunnelConfigProxyModel * TunnelModel::getTunnelProxyConfigs(){
+ TunnelConfigProxyModel * configs = new TunnelConfigProxyModel();
+ configs->setTunnel(this);
+ return configs;
+}
+
+std::shared_ptr TunnelModel::getTunnelConfigs(){
+ return mTunnelConfigs;
+}
+
+bool TunnelModel::apply(){
+ return mTunnelConfigs->apply(mTunnel);
+}
+
+void TunnelModel::addTunnelConfig(){
+ mTunnelConfigs->addTunnelConfig();
+}
+
+void TunnelModel::removeTunnelConfig(TunnelConfigModel * model){
+ mTunnelConfigs->removeTunnelConfig(mTunnel, model);
+}
+
+bool TunnelModel::getActivated()const{
+ if(mTunnel)
+ return mTunnel->getActivated();
+ else
+ return false;
+}
+
+void TunnelModel::setHttpProxy(const QString& host, int port, const QString& username, const QString& passwd){
+ mTunnel->setHttpProxy(Utils::appStringToCoreString(host), port, Utils::appStringToCoreString(username), Utils::appStringToCoreString(passwd));
+}
\ No newline at end of file
diff --git a/linphone-app/src/components/tunnel/TunnelModel.hpp b/linphone-app/src/components/tunnel/TunnelModel.hpp
new file mode 100644
index 000000000..5a3689f52
--- /dev/null
+++ b/linphone-app/src/components/tunnel/TunnelModel.hpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2021 Belledonne Communications SARL.
+ *
+ * This file is part of linphone-desktop
+ * (see https://www.linphone.org).
+ *
+ * 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 3 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, see .
+ */
+
+#ifndef TUNNEL_MODEL_H_
+#define TUNNEL_MODEL_H_
+
+#include "utils/LinphoneEnums.hpp"
+
+#include
+// =============================================================================
+#include
+#include
+#include
+
+class TunnelConfigListModel;
+class TunnelConfigProxyModel;
+class TunnelConfigModel;
+
+class TunnelModel : public QObject {
+ Q_OBJECT
+
+public:
+ TunnelModel (std::shared_ptr linphoneTunnel, QObject *parent = nullptr);
+
+
+ Q_PROPERTY(QString domain READ getDomain WRITE setDomain NOTIFY domainChanged)
+ Q_PROPERTY(QString username READ getUsername WRITE setUsername NOTIFY usernameChanged)
+ Q_PROPERTY(bool dualModeEnabled READ getDualModeEnabled WRITE setDualModeEnabled NOTIFY dualModeEnabledChanged)
+ Q_PROPERTY(LinphoneEnums::TunnelMode mode READ getMode WRITE setMode NOTIFY modeChanged)
+ Q_PROPERTY(bool sipEnabled READ getSipEnabled WRITE setSipEnabled NOTIFY sipEnabledChanged)
+
+ QString getDomain() const;
+ QString getUsername() const;
+ bool getDualModeEnabled() const;
+ LinphoneEnums::TunnelMode getMode() const;
+ bool getSipEnabled() const;
+
+ void setDomain(const QString& data);
+ void setUsername(const QString& data);
+ void setDualModeEnabled(const bool& data);
+ void setMode(const LinphoneEnums::TunnelMode& data);
+ void setSipEnabled(const bool& data);
+
+ std::shared_ptr getTunnel();
+ Q_INVOKABLE TunnelConfigProxyModel * getTunnelProxyConfigs();
+ std::shared_ptr getTunnelConfigs();
+ Q_INVOKABLE bool apply();
+ Q_INVOKABLE void addTunnelConfig();
+ Q_INVOKABLE void removeTunnelConfig(TunnelConfigModel * model);
+ Q_INVOKABLE bool getActivated()const;
+ Q_INVOKABLE void setHttpProxy(const QString& host, int port, const QString& username, const QString& passwd);
+
+signals:
+ void domainChanged();
+ void usernameChanged();
+ void sipAddressChanged();
+ void dualModeEnabledChanged();
+ void modeChanged();
+ void sipEnabledChanged();
+private:
+
+ std::shared_ptr mTunnel;
+ std::shared_ptr mTunnelConfigs;
+};
+
+Q_DECLARE_METATYPE(std::shared_ptr);
+
+#endif // TUNNEL_MODEL_H_
diff --git a/linphone-app/src/utils/LinphoneEnums.cpp b/linphone-app/src/utils/LinphoneEnums.cpp
index d4ebdae24..b5ee6f0b5 100644
--- a/linphone-app/src/utils/LinphoneEnums.cpp
+++ b/linphone-app/src/utils/LinphoneEnums.cpp
@@ -65,4 +65,11 @@ linphone::Call::Status LinphoneEnums::toLinphone(const LinphoneEnums::CallStatus
}
LinphoneEnums::CallStatus LinphoneEnums::fromLinphone(const linphone::Call::Status& data){
return static_cast(data);
-}
\ No newline at end of file
+}
+
+linphone::Tunnel::Mode LinphoneEnums::toLinphone(const LinphoneEnums::TunnelMode& data){
+ return static_cast(data);
+}
+LinphoneEnums::TunnelMode LinphoneEnums::fromLinphone(const linphone::Tunnel::Mode& data){
+ return static_cast(data);
+}
diff --git a/linphone-app/src/utils/LinphoneEnums.hpp b/linphone-app/src/utils/LinphoneEnums.hpp
index e7c36f7ea..95ee581c3 100644
--- a/linphone-app/src/utils/LinphoneEnums.hpp
+++ b/linphone-app/src/utils/LinphoneEnums.hpp
@@ -106,13 +106,21 @@ enum CallStatus {
CallStatusEarlyAborted = int(linphone::Call::Status::EarlyAborted),
CallStatusAcceptedElsewhere = int(linphone::Call::Status::AcceptedElsewhere),
CallStatusDeclinedElsewhere = int(linphone::Call::Status::DeclinedElsewhere)
- };
+};
Q_ENUM_NS(CallStatus)
linphone::Call::Status toLinphone(const LinphoneEnums::CallStatus& capability);
LinphoneEnums::CallStatus fromLinphone(const linphone::Call::Status& capability);
+enum TunnelMode {
+ TunnelModeDisable = int(linphone::Tunnel::Mode::Disable),
+ TunnelModeEnable= int(linphone::Tunnel::Mode::Enable),
+ TunnelModeAuto = int(linphone::Tunnel::Mode::Auto)
+};
+Q_ENUM_NS(TunnelMode)
+linphone::Tunnel::Mode toLinphone(const LinphoneEnums::TunnelMode& mode);
+LinphoneEnums::TunnelMode fromLinphone(const linphone::Tunnel::Mode& mode);
}
Q_DECLARE_METATYPE(LinphoneEnums::MediaEncryption)
@@ -120,5 +128,6 @@ Q_DECLARE_METATYPE(LinphoneEnums::FriendCapability)
Q_DECLARE_METATYPE(LinphoneEnums::EventLogType)
Q_DECLARE_METATYPE(LinphoneEnums::ChatMessageState)
Q_DECLARE_METATYPE(LinphoneEnums::CallStatus)
+Q_DECLARE_METATYPE(LinphoneEnums::TunnelMode)
#endif
diff --git a/linphone-app/src/utils/Utils.cpp b/linphone-app/src/utils/Utils.cpp
index 2f92006c1..82199fafe 100644
--- a/linphone-app/src/utils/Utils.cpp
+++ b/linphone-app/src/utils/Utils.cpp
@@ -97,6 +97,22 @@ QString Utils::getDisplayName(const QString& address){
return getDisplayName(interpretUrl(address));
}
+QString Utils::toString(const LinphoneEnums::TunnelMode& mode){
+ switch(mode){
+ case LinphoneEnums::TunnelMode::TunnelModeEnable :
+ //: 'Enable' : One word for button action to enable tunnel mode.
+ return QObject::tr("LinphoneEnums_TunnelModeEnable");
+ case LinphoneEnums::TunnelMode::TunnelModeDisable :
+ //: 'Disable' : One word for button action to disable tunnel mode.
+ return QObject::tr("LinphoneEnums_TunnelModeDisable");
+ case LinphoneEnums::TunnelMode::TunnelModeAuto :
+ //: 'Auto' : One word for button action to set the auto tunnel mode.
+ return QObject::tr("LinphoneEnums_TunnelModeAuto");
+ default:
+ return "";
+ }
+}
+
QImage Utils::getImage(const QString &pUri) {
QImage image(pUri);
if(image.isNull()){// Try to determine format from headers instead of using suffix
diff --git a/linphone-app/src/utils/Utils.hpp b/linphone-app/src/utils/Utils.hpp
index ade0bbec9..d88924e81 100644
--- a/linphone-app/src/utils/Utils.hpp
+++ b/linphone-app/src/utils/Utils.hpp
@@ -57,6 +57,7 @@ public:
Q_INVOKABLE static QString toTimeString(QDateTime date);
Q_INVOKABLE static QString toDateString(QDateTime date);
Q_INVOKABLE static QString getDisplayName(const QString& address);
+ Q_INVOKABLE static QString toString(const LinphoneEnums::TunnelMode& mode);
//----------------------------------------------------------------------------------
static inline QString coreStringToAppString (const std::string &str) {
diff --git a/linphone-app/ui/modules/Common/Form/Placements/Form.qml b/linphone-app/ui/modules/Common/Form/Placements/Form.qml
index 943f24be7..13d251ba9 100644
--- a/linphone-app/ui/modules/Common/Form/Placements/Form.qml
+++ b/linphone-app/ui/modules/Common/Form/Placements/Form.qml
@@ -11,6 +11,8 @@ Column {
property int orientation: Qt.Horizontal
property bool addButton : false
signal addButtonClicked;
+ property bool removeButton : false
+ signal removeButtonClicked;
// ---------------------------------------------------------------------------
@@ -43,6 +45,14 @@ Column {
scale:0.8
onClicked:addButtonClicked()
}
+ ActionButton {
+ visible:removeButton
+ anchors.verticalCenter: parent.verticalCenter
+ icon: 'delete'
+ iconSize:38
+ scale:0.8
+ onClicked:removeButtonClicked()
+ }
}
Rectangle {
diff --git a/linphone-app/ui/views/App/Settings/SettingsAdvanced.qml b/linphone-app/ui/views/App/Settings/SettingsAdvanced.qml
index 9b55b56ae..914a6dd95 100644
--- a/linphone-app/ui/views/App/Settings/SettingsAdvanced.qml
+++ b/linphone-app/ui/views/App/Settings/SettingsAdvanced.qml
@@ -319,7 +319,7 @@ TabContainer {
Form {
title: qsTr('developerSettingsTitle')
- visible: SettingsModel.developerSettingsEnabled
+ visible: SettingsModel.isDeveloperSettingsAvailable()
width: parent.width
FormLine {
diff --git a/linphone-app/ui/views/App/Settings/SettingsTunnel.qml b/linphone-app/ui/views/App/Settings/SettingsTunnel.qml
new file mode 100644
index 000000000..73e74bd02
--- /dev/null
+++ b/linphone-app/ui/views/App/Settings/SettingsTunnel.qml
@@ -0,0 +1,286 @@
+import QtQuick 2.7
+import QtQuick.Layouts 1.3
+
+import Common 1.0
+import Linphone 1.0
+import LinphoneEnums 1.0
+import Utils 1.0
+import UtilsCpp 1.0
+
+import App.Styles 1.0
+
+// =============================================================================
+
+TabContainer {
+ Column {
+ spacing: SettingsWindowStyle.forms.spacing
+ width: parent.width
+ Form{
+ width: view.width
+ FormLine {
+ FormGroup {
+ //: 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
+ label: qsTr('tunnelStatus')
+ RowLayout{
+ Icon{
+ Layout.preferredWidth: 20
+ icon: 'led_orange'
+ iconSize: 20
+ function update(){
+ if( view.tunnelModel.getActivated())
+ icon = 'led_green'
+ else
+ icon = 'led_red'
+ }
+ onVisibleChanged: if(visible){
+ icon = 'led_orange'
+ tunnelStatusTimer.start()
+ }else{
+ tunnelStatusTimer.stop()
+ icon = 'led_orange'
+ }
+ Timer{
+ id: tunnelStatusTimer
+ interval: 1000
+ onTriggered: parent.update()
+ repeat: true
+ }
+ }
+ Item{
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+ //---------------- DEVELOPER SETTINGS FOR TUNNEL
+ FormLine {
+ visible: SettingsModel.developerSettingsEnabled
+ FormGroup {
+ //: 'Domain' : Field title of a textfield to set domain.
+ label: qsTr('tunnelDomain')
+ TextField {
+ text: view.tunnelModel.domain
+ onEditingFinished: view.tunnelModel.domain = text
+ }
+ }
+ }
+ FormLine {
+ visible: SettingsModel.developerSettingsEnabled
+ FormGroup {
+ //: 'Username' : Field title of a textfield to set username.
+ label: qsTr('tunnelUsername')
+ TextField {
+ text: view.tunnelModel.username
+ onEditingFinished: view.tunnelModel.username = text
+ }
+ }
+ }
+ FormLine {
+ visible: SettingsModel.developerSettingsEnabled
+ FormGroup {
+ //: 'SIP' : Field title of a switch to set SIP mode.
+ label: qsTr('tunnelSIP')
+ Switch {
+ checked: view.tunnelModel.sipEnabled
+ onClicked: view.tunnelModel.sipEnabled = !checked
+ }
+ }
+
+ TextButtonA{
+ //: 'Cancel' : Button to cancel the action.
+ text: (proxyHttpOptions.showProxyOptions? qsTr('cancel'):
+ //: 'Set HTTP proxy' : Button to set the new proxy.
+ qsTr('setHTTPProxy'))
+ onClicked:{
+ proxyHttpOptions.showProxyOptions = !proxyHttpOptions.showProxyOptions
+ }
+ Layout.preferredWidth: 100
+ }
+ }
+ FormLine{
+ visible: SettingsModel.developerSettingsEnabled
+ RowLayout{
+ id: proxyHttpOptions
+ property bool showProxyOptions : false
+
+ TextField {
+ id: proxyHttpHost
+ visible: parent.showProxyOptions
+ //: 'Host' : Placeholder to set hostname.
+ placeholderText: qsTr('proxyHttpHost')
+ }
+ NumericField{
+ id: proxyHttpPort
+ visible: parent.showProxyOptions
+ //: 'Port' : Placehoilder to set port.
+ placeholderText: qsTr('proxyHttpPort')
+ Layout.preferredWidth: 100
+ maxValue: 65535
+ }
+ TextField {
+ id: proxyHttpUsername
+ visible: parent.showProxyOptions
+ //: 'Username' : Placeholder to set username.
+ placeholderText: qsTr('proxyHttpUsername')
+ }
+ PasswordField {
+ id: proxyHttpPassword
+ visible: parent.showProxyOptions
+ //: 'Password' : Placeholder to set password.
+ placeholderText: qsTr('proxyHttpPassword')
+ onVisibleChanged: if(!visible) text=''
+ }
+ TextButtonB{
+ visible: parent.showProxyOptions
+ //: 'Apply' : Button to set proxy from changes.
+ text: qsTr('proxyHttpApply')
+ onClicked: {
+ view.tunnelModel.setHttpProxy(proxyHttpHost.text, proxyHttpPort.text, proxyHttpUsername.text, proxyHttpPassword.text)
+ parent.showProxyOptions = false
+ }
+ }
+ }
+ }
+ //---------------- USER SETTINGS FOR TUNNEL
+ FormLine {
+ FormGroup {
+ //: 'Mode' : Field title on form to set tunnel mode.
+ label: qsTr('serverMode')
+ ExclusiveButtons {
+ id: mode
+ property var modes: [ [LinphoneEnums.TunnelModeDisable],
+ [LinphoneEnums.TunnelModeEnable],
+ [LinphoneEnums.TunnelModeAuto]
+ ]
+ texts: modes.map(value => UtilsCpp.toString(value[0]) )
+ onClicked: view.tunnelModel.mode = modes[button][0]
+ Binding {
+ property: 'selectedButton'
+ target: mode
+ value: {
+ var toFound = view.tunnelModel.mode
+ return Number(Utils.findIndex(mode.modes, function (value) {
+ return toFound == value[0]
+ }))
+ }
+ }
+ }
+ }
+ }
+ FormLine {
+ FormGroup {
+ //: 'Dual mode' : Field title on form to set dual mode of the tunnel.
+ label: qsTr('serverDualMode')
+ Switch {
+ checked: view.tunnelModel.dualModeEnabled
+ onClicked: view.tunnelModel.dualModeEnabled = !checked
+ }
+ }
+ }
+ }
+ //----------------------------------------------------------------------------------------------------
+ Repeater {
+ id: view
+ property TunnelModel tunnelModel : SettingsModel.getTunnel()
+ property TunnelConfigProxyModel tunnelConfigProxyModel: tunnelModel.getTunnelProxyConfigs()
+
+ width: parent.width
+ model: tunnelConfigProxyModel
+ delegate:
+ Form {
+ //: 'Server' : Title form to set a server
+ title: qsTr('serverTitle')+' : '+modelData.host+(view.tunnelModel.dualModeEnabled?' / '+modelData.host2:'')
+ width: view.width
+ removeButton: SettingsModel.developerSettingsEnabled
+ onRemoveButtonClicked: {view.tunnelModel.removeTunnelConfig(modelData)}
+
+ FormLine {
+ FormGroup {
+ //: 'Hostname' : Field title on form to set hostname.
+ label: qsTr('serverHostname')
+ TextField {
+ text: modelData.host
+ onEditingFinished: modelData.host = text
+ }
+ }
+ }
+ FormLine {
+ FormGroup {
+ //: 'Port' : Field title on form to set port.
+ label: qsTr('serverPort')
+ NumericField {
+ text: modelData.port
+ onEditingFinished: modelData.port = text
+ maxValue: 65535
+ }
+ }
+ }
+ FormLine {
+ visible: view.tunnelModel.dualModeEnabled
+ FormGroup {
+ //: 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
+ label: qsTr('serverDualHostname')
+ TextField {
+ text: modelData.host2
+ onEditingFinished: modelData.host2 = text
+ }
+ }
+ }
+ FormLine {
+ visible: view.tunnelModel.dualModeEnabled
+ FormGroup {
+ //: 'Dual port' : Field title on form to set the second port for the dual configuration.
+ label: qsTr('serverDualPort')
+ NumericField {
+ text: modelData.port2
+ onEditingFinished: modelData.port2 = text
+ maxValue: 65535
+ }
+ }
+ }
+ //------------------------- DEVELOPER SETTINGS FOR SERVER
+ FormLine {
+ visible: SettingsModel.developerSettingsEnabled
+ FormGroup {
+ //: 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
+ label: qsTr('serverRemoteUDPMirrorPort')
+ NumericField {
+ text: modelData.remoteUdpMirrorPort
+ onEditingFinished: modelData.remoteUdpMirrorPort = text
+ maxValue: 65535
+ }
+ }
+ }
+ FormLine {
+ visible: SettingsModel.developerSettingsEnabled
+ FormGroup {
+ //: 'Delay' : Field title on form to set the delay of the tunnel.
+ label: qsTr('serverDelay')
+ NumericField {
+ text: modelData.delay
+ onEditingFinished: modelData.delay = text
+ }
+ }
+ }
+ }
+ }
+
+ RowLayout{
+ width: parent.width
+ TextButtonB {
+ visible: SettingsModel.developerSettingsEnabled
+ //: 'Add server' : Button for adding a server
+ text: qsTr('tunnelAddServer')
+ onClicked: {view.tunnelModel.addTunnelConfig()}
+ }
+ Item{
+ Layout.fillWidth: true
+ }
+ TextButtonB {
+ //: 'Apply' : Button to apply changes.
+ text: qsTr('tunnelApply')
+ onClicked: view.tunnelModel.apply()
+ }
+ }
+ }
+}
diff --git a/linphone-app/ui/views/App/Settings/SettingsWindow.qml b/linphone-app/ui/views/App/Settings/SettingsWindow.qml
index 0227c4e33..b20f43d4b 100644
--- a/linphone-app/ui/views/App/Settings/SettingsWindow.qml
+++ b/linphone-app/ui/views/App/Settings/SettingsWindow.qml
@@ -12,152 +12,151 @@ import App.Styles 1.0
// =============================================================================
ApplicationWindow {
- id: window
-
- minimumHeight: SettingsWindowStyle.height
- minimumWidth: SettingsWindowStyle.width
-
- title: qsTr('settingsTitle')
-
- onClosing: SettingsModel.settingsWindowClosing()
-
- // ---------------------------------------------------------------------------
-
- Shortcut {
- sequence: StandardKey.Close
- onActivated: window.hide()
- }
-
- // ---------------------------------------------------------------------------
-
- Rectangle {
- anchors.fill: parent
- color: SettingsWindowStyle.color
- }
-
- ColumnLayout {
- anchors.fill: parent
- spacing: 0
-
- // -------------------------------------------------------------------------
- // Navigation bar.
- // -------------------------------------------------------------------------
-
- RowLayout {
- Layout.fillWidth: true
- spacing: 0
-
- TabBar {
- id: tabBar
-
- onCurrentIndexChanged: SettingsModel.onSettingsTabChanged(currentIndex)
-
- TabButton {
- iconName: 'settings_sip_accounts'
- text: qsTr('sipAccountsTab')
- width: implicitWidth
- //onClicked: SettingsModel.settingsButtonClicked("sip")
+ id: window
+
+ minimumHeight: SettingsWindowStyle.height
+ minimumWidth: SettingsWindowStyle.width
+
+ title: qsTr('settingsTitle')
+
+ onClosing: SettingsModel.settingsWindowClosing()
+
+ // ---------------------------------------------------------------------------
+
+ Shortcut {
+ sequence: StandardKey.Close
+ onActivated: window.hide()
+ }
+
+ // ---------------------------------------------------------------------------
+
+ Rectangle {
+ anchors.fill: parent
+ color: SettingsWindowStyle.color
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+ spacing: 0
+
+ // -------------------------------------------------------------------------
+ // Navigation bar.
+ // -------------------------------------------------------------------------
+
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: 0
+
+ TabBar {
+ id: tabBar
+
+ onCurrentIndexChanged: SettingsModel.onSettingsTabChanged(currentIndex)
+
+ TabButton {
+ iconName: 'settings_sip_accounts'
+ text: qsTr('sipAccountsTab')
+ width: implicitWidth
+ }
+
+ TabButton {
+ iconName: 'settings_audio'
+ text: qsTr('audioTab')
+ width: implicitWidth
+ }
+
+ TabButton {
+ enabled: SettingsModel.videoSupported
+ iconName: 'settings_video'
+ text: qsTr('videoTab')
+ width: implicitWidth
+ }
+
+ TabButton {
+ iconName: 'settings_call'
+ text: qsTr('callsAndChatTab')
+ width: implicitWidth
+ }
+
+ TabButton {
+ enabled: SettingsModel.showNetworkSettings || SettingsModel.developerSettingsEnabled
+ iconName: 'settings_network'
+ text: qsTr('networkTab')
+ width: implicitWidth
+ }
+
+ TabButton {
+ enabled: SettingsModel.tunnelAvailable
+ iconName: 'settings_network'
+ //: 'Tunnel' : Tab title for tunnel section in settings.
+ text: qsTr('tunnelTab')
+ width: implicitWidth
+ }
+
+ TabButton {
+ iconName: 'settings_advanced'
+ text: qsTr('uiTab')
+ width: implicitWidth
+ }
+
+ TabButton {
+ iconName: 'settings_advanced'
+ text: qsTr('uiAdvanced')
+ width: implicitWidth
+ }
+ }
+
+ Rectangle {
+ Layout.fillWidth: true
+ Layout.preferredHeight: TabButtonStyle.text.height
+
+ color: TabButtonStyle.backgroundColor.normal
+
+ MouseArea {
+ anchors.fill: parent
+
+ onClicked: konami.forceActiveFocus()
+ cursorShape: Qt.ArrowCursor
+
+ Konami {
+ id: konami
+ onTriggered: SettingsModel.developerSettingsEnabled = true
+ }
+ }
+ }
+ }
+
+ // -------------------------------------------------------------------------
+ // Content.
+ // -------------------------------------------------------------------------
+
+ StackLayout {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+
+ currentIndex: tabBar.currentIndex
+ SettingsSipAccounts {}
+ SettingsAudio {}
+ SettingsVideo {}
+ SettingsCallsChat {}
+ SettingsNetwork {}
+ SettingsTunnel {}
+ SettingsUi {}
+ SettingsAdvanced {}
+ }
+
+ // -------------------------------------------------------------------------
+ // Buttons.
+ // -------------------------------------------------------------------------
+
+ TextButtonB {
+ Layout.alignment: Qt.AlignRight
+ Layout.topMargin: SettingsWindowStyle.validButton.topMargin
+ Layout.bottomMargin: SettingsWindowStyle.validButton.bottomMargin
+ Layout.rightMargin: SettingsWindowStyle.validButton.rightMargin
+
+ text: qsTr('validButton')
+
+ onClicked: window.close()
+ }
}
-
- TabButton {
- iconName: 'settings_audio'
- text: qsTr('audioTab')
- width: implicitWidth
- //onClicked: SettingsModel.accessAudioSettings()
- //onClicked: SettingsModel.settingsButtonClicked("audio")
- }
-
- TabButton {
- enabled: SettingsModel.videoSupported
- iconName: 'settings_video'
- text: qsTr('videoTab')
- width: implicitWidth
- //onClicked: SettingsModel.accessVideoSettings()
- //onClicked: SettingsModel.settingsButtonClicked("video")
- }
-
- TabButton {
- iconName: 'settings_call'
- text: qsTr('callsAndChatTab')
- width: implicitWidth
- //onClicked: SettingsModel.settingsButtonClicked("call")
- }
-
- TabButton {
- enabled: SettingsModel.showNetworkSettings || SettingsModel.developerSettingsEnabled
- iconName: 'settings_network'
- text: qsTr('networkTab')
- width: implicitWidth
- //onClicked: SettingsModel.settingsButtonClicked("network")
- }
-
- TabButton {
- iconName: 'settings_advanced'
- text: qsTr('uiTab')
- width: implicitWidth
- //onClicked: SettingsModel.settingsButtonClicked("ui")
- }
-
- TabButton {
- iconName: 'settings_advanced'
- text: qsTr('uiAdvanced')
- width: implicitWidth
- //onClicked: SettingsModel.settingsButtonClicked("advanced")
- }
- }
-
- Rectangle {
- Layout.fillWidth: true
- Layout.preferredHeight: TabButtonStyle.text.height
-
- color: TabButtonStyle.backgroundColor.normal
-
- MouseArea {
- anchors.fill: parent
-
- onClicked: konami.forceActiveFocus()
- cursorShape: Qt.ArrowCursor
-
- Konami {
- id: konami
- onTriggered: SettingsModel.developerSettingsEnabled = true
- }
- }
- }
- }
-
- // -------------------------------------------------------------------------
- // Content.
- // -------------------------------------------------------------------------
-
- StackLayout {
- Layout.fillHeight: true
- Layout.fillWidth: true
-
- currentIndex: tabBar.currentIndex
-
- SettingsSipAccounts {}
- SettingsAudio {}
- SettingsVideo {}
- SettingsCallsChat {}
- SettingsNetwork {}
- SettingsUi {}
- SettingsAdvanced {}
- }
-
- // -------------------------------------------------------------------------
- // Buttons.
- // -------------------------------------------------------------------------
-
- TextButtonB {
- Layout.alignment: Qt.AlignRight
- Layout.topMargin: SettingsWindowStyle.validButton.topMargin
- Layout.bottomMargin: SettingsWindowStyle.validButton.bottomMargin
- Layout.rightMargin: SettingsWindowStyle.validButton.rightMargin
-
- text: qsTr('validButton')
-
- onClicked: window.close()
- }
- }
}