Commit b3a8f270 authored by Adrian Georgescu's avatar Adrian Georgescu

Refactored TLS settings based on the latest middleware specifications

parent 4e736c9a
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
__all__ = ['AccountExtension', 'BonjourAccountExtension'] __all__ = ['AccountExtension', 'BonjourAccountExtension']
from sipsimple.account import BonjourMSRPSettings, MessageSummarySettings, MSRPSettings, PresenceSettings, RTPSettings, SIPSettings, TLSSettings, XCAPSettings from sipsimple.account import BonjourMSRPSettings, MessageSummarySettings, MSRPSettings, PresenceSettings, RTPSettings, SIPSettings, XCAPSettings
from sipsimple.configuration import Setting, SettingsGroup, SettingsObjectExtension, RuntimeSetting from sipsimple.configuration import Setting, SettingsGroup, SettingsObjectExtension, RuntimeSetting
from sipsimple.configuration.datatypes import AudioCodecList, Hostname, MSRPConnectionModel, MSRPTransport, NonNegativeInteger, SIPTransportList, VideoCodecList from sipsimple.configuration.datatypes import AudioCodecList, Hostname, MSRPConnectionModel, MSRPTransport, NonNegativeInteger, SIPTransportList, VideoCodecList
from sipsimple.util import user_info from sipsimple.util import user_info
...@@ -18,6 +18,7 @@ class BonjourMSRPSettingsExtension(BonjourMSRPSettings): ...@@ -18,6 +18,7 @@ class BonjourMSRPSettingsExtension(BonjourMSRPSettings):
class BonjourSIPSettings(SettingsGroup): class BonjourSIPSettings(SettingsGroup):
transport_order = Setting(type=SIPTransportList, default=SIPTransportList(['tcp', 'udp', 'tls'])) transport_order = Setting(type=SIPTransportList, default=SIPTransportList(['tcp', 'udp', 'tls']))
tls_name = Setting(type=str, default='Blink')
class MessageSummarySettingsExtension(MessageSummarySettings): class MessageSummarySettingsExtension(MessageSummarySettings):
...@@ -50,6 +51,7 @@ class SIPSettingsExtension(SIPSettings): ...@@ -50,6 +51,7 @@ class SIPSettingsExtension(SIPSettings):
register_interval = Setting(type=NonNegativeInteger, default=600) register_interval = Setting(type=NonNegativeInteger, default=600)
subscribe_interval = Setting(type=NonNegativeInteger, default=600) subscribe_interval = Setting(type=NonNegativeInteger, default=600)
publish_interval = Setting(type=NonNegativeInteger, default=600) publish_interval = Setting(type=NonNegativeInteger, default=600)
tls_name = Setting(type=str, default=None, nillable=True)
class ServerSettings(SettingsGroup): class ServerSettings(SettingsGroup):
...@@ -61,9 +63,6 @@ class SoundSettings(SettingsGroup): ...@@ -61,9 +63,6 @@ class SoundSettings(SettingsGroup):
inbound_ringtone = Setting(type=SoundFile, default=None, nillable=True) inbound_ringtone = Setting(type=SoundFile, default=None, nillable=True)
class TLSSettingsExtension(TLSSettings):
certificate = Setting(type=ApplicationDataPath, default=ApplicationDataPath(Resources.get('tls/default.crt')), nillable=True)
class XCAPSettingsExtension(XCAPSettings): class XCAPSettingsExtension(XCAPSettings):
enabled = Setting(type=bool, default=True) enabled = Setting(type=bool, default=True)
...@@ -80,7 +79,6 @@ class AccountExtension(SettingsObjectExtension): ...@@ -80,7 +79,6 @@ class AccountExtension(SettingsObjectExtension):
server = ServerSettings server = ServerSettings
sip = SIPSettingsExtension sip = SIPSettingsExtension
sounds = SoundSettings sounds = SoundSettings
tls = TLSSettingsExtension
xcap = XCAPSettingsExtension xcap = XCAPSettingsExtension
...@@ -90,6 +88,5 @@ class BonjourAccountExtension(SettingsObjectExtension): ...@@ -90,6 +88,5 @@ class BonjourAccountExtension(SettingsObjectExtension):
rtp = RTPSettingsExtension rtp = RTPSettingsExtension
sip = BonjourSIPSettings sip = BonjourSIPSettings
sounds = SoundSettings sounds = SoundSettings
tls = TLSSettingsExtension
...@@ -70,6 +70,8 @@ class SoundSettings(SettingsGroup): ...@@ -70,6 +70,8 @@ class SoundSettings(SettingsGroup):
class TLSSettingsExtension(TLSSettings): class TLSSettingsExtension(TLSSettings):
ca_list = Setting(type=ApplicationDataPath, default=ApplicationDataPath(Resources.get('tls/ca.crt')), nillable=True) ca_list = Setting(type=ApplicationDataPath, default=ApplicationDataPath(Resources.get('tls/ca.crt')), nillable=True)
certificate = Setting(type=ApplicationDataPath, default=ApplicationDataPath(Resources.get('tls/default.crt')), nillable=True)
verify_server = Setting(type=bool, default=True)
class SIPSimpleSettingsExtension(SettingsObjectExtension): class SIPSimpleSettingsExtension(SettingsObjectExtension):
......
...@@ -251,9 +251,7 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -251,9 +251,7 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
self.reregister_button.clicked.connect(self._SH_ReregisterButtonClicked) self.reregister_button.clicked.connect(self._SH_ReregisterButtonClicked)
self.idd_prefix_button.activated[str].connect(self._SH_IDDPrefixButtonActivated) self.idd_prefix_button.activated[str].connect(self._SH_IDDPrefixButtonActivated)
self.prefix_button.activated[str].connect(self._SH_PrefixButtonActivated) self.prefix_button.activated[str].connect(self._SH_PrefixButtonActivated)
self.account_tls_cert_file_editor.locationCleared.connect(self._SH_AccountTLSCertFileEditorLocationCleared) self.account_tls_name_editor.editingFinished.connect(self._SH_TLSPeerNameEditorEditingFinished)
self.account_tls_cert_file_browse_button.clicked.connect(self._SH_AccountTLSCertFileBrowseButtonClicked)
self.account_tls_verify_server_button.clicked.connect(self._SH_AccountTLSVerifyServerButtonClicked)
# Audio devices # Audio devices
self.audio_alert_device_button.activated[int].connect(self._SH_AudioAlertDeviceButtonActivated) self.audio_alert_device_button.activated[int].connect(self._SH_AudioAlertDeviceButtonActivated)
...@@ -331,6 +329,9 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -331,6 +329,9 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
# TLS settings # TLS settings
self.tls_ca_file_editor.locationCleared.connect(self._SH_TLSCAFileEditorLocationCleared) self.tls_ca_file_editor.locationCleared.connect(self._SH_TLSCAFileEditorLocationCleared)
self.tls_ca_file_browse_button.clicked.connect(self._SH_TLSCAFileBrowseButtonClicked) self.tls_ca_file_browse_button.clicked.connect(self._SH_TLSCAFileBrowseButtonClicked)
self.tls_cert_file_editor.locationCleared.connect(self._SH_TLSCertFileEditorLocationCleared)
self.tls_cert_file_browse_button.clicked.connect(self._SH_TLSCertFileBrowseButtonClicked)
self.tls_verify_server_button.clicked.connect(self._SH_TLSVerifyServerButtonClicked)
# Setup initial state (show the accounts page right after start) # Setup initial state (show the accounts page right after start)
self.accounts_action.trigger() self.accounts_action.trigger()
...@@ -445,12 +446,13 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -445,12 +446,13 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
# account advanced tab # account advanced tab
font_metrics = self.register_interval_label.fontMetrics() # we assume all labels have the same font font_metrics = self.register_interval_label.fontMetrics() # we assume all labels have the same font
labels = (self.register_interval_label, self.publish_interval_label, self.subscribe_interval_label, labels = (self.register_interval_label, self.publish_interval_label, self.subscribe_interval_label,
self.idd_prefix_label, self.prefix_label, self.account_tls_cert_file_label) self.idd_prefix_label, self.prefix_label)
text_width = max(font_metrics.width(label.text()) for label in labels) + 15 text_width = max(font_metrics.width(label.text()) for label in labels) + 15
self.register_interval_label.setMinimumWidth(text_width) self.register_interval_label.setMinimumWidth(text_width)
self.idd_prefix_label.setMinimumWidth(text_width) self.idd_prefix_label.setMinimumWidth(text_width)
self.account_tls_cert_file_label.setMinimumWidth(text_width) self.tls_cert_file_label.setMinimumWidth(text_width)
# audio settings # audio settings
font_metrics = self.answer_delay_label.fontMetrics() # we assume all labels have the same font font_metrics = self.answer_delay_label.fontMetrics() # we assume all labels have the same font
labels = (self.audio_input_device_label, self.audio_output_device_label, self.audio_alert_device_label, self.audio_sample_rate_label, labels = (self.audio_input_device_label, self.audio_output_device_label, self.audio_alert_device_label, self.audio_sample_rate_label,
...@@ -748,6 +750,8 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -748,6 +750,8 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
self.screenshots_directory_editor.setText(blink_settings.screenshots_directory or '') self.screenshots_directory_editor.setText(blink_settings.screenshots_directory or '')
self.transfers_directory_editor.setText(blink_settings.transfers_directory or '') self.transfers_directory_editor.setText(blink_settings.transfers_directory or '')
self.tls_ca_file_editor.setText(settings.tls.ca_list or '') self.tls_ca_file_editor.setText(settings.tls.ca_list or '')
self.tls_cert_file_editor.setText(settings.tls.certificate or '')
self.tls_verify_server_button.setChecked(settings.tls.verify_server)
def load_account_settings(self, account): def load_account_settings(self, account):
"""Load the account settings from configuration into the UI controls""" """Load the account settings from configuration into the UI controls"""
...@@ -828,6 +832,8 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -828,6 +832,8 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
self.msrp_transport_button.setCurrentIndex(self.msrp_transport_button.findText(account.msrp.transport.upper())) self.msrp_transport_button.setCurrentIndex(self.msrp_transport_button.findText(account.msrp.transport.upper()))
# Advanced tab # Advanced tab
self.account_tls_name_editor.setText(account.sip.tls_name or account.id.domain)
with blocked_qt_signals(self.register_interval): with blocked_qt_signals(self.register_interval):
self.register_interval.setValue(account.sip.register_interval) self.register_interval.setValue(account.sip.register_interval)
with blocked_qt_signals(self.publish_interval): with blocked_qt_signals(self.publish_interval):
...@@ -847,11 +853,9 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -847,11 +853,9 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
if index == -1: if index == -1:
self.prefix_button.addItem(item_text) self.prefix_button.addItem(item_text)
self.prefix_button.setCurrentIndex(self.prefix_button.findText(item_text)) self.prefix_button.setCurrentIndex(self.prefix_button.findText(item_text))
self._update_pstn_example_label() self._update_pstn_example_label()
self.account_tls_cert_file_editor.setText(account.tls.certificate or '')
self.account_tls_verify_server_button.setChecked(account.tls.verify_server)
def update_chat_preview(self): def update_chat_preview(self):
blink_settings = BlinkSettings() blink_settings = BlinkSettings()
...@@ -1055,11 +1059,6 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -1055,11 +1059,6 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
else: else:
account_manager.default_account = None account_manager.default_account = None
if selected_account.tls.certificate is not None and selected_account.tls.certificate.normalized.startswith(ApplicationData.directory):
try:
os.unlink(selected_account.tls.certificate.normalized)
except (AttributeError, OSError, IOError):
pass
selected_account.delete() selected_account.delete()
...@@ -1194,6 +1193,13 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -1194,6 +1193,13 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
account.auth.username = auth_username account.auth.username = auth_username
account.save() account.save()
def _SH_TLSPeerNameEditorEditingFinished(self):
account = self.selected_account
tls_name = self.account_tls_name_editor.text() or None
if account.sip.tls_name != tls_name:
account.sip.tls_name = tls_name
account.save()
def _SH_AlwaysUseMyMSRPRelayButtonClicked(self, checked): def _SH_AlwaysUseMyMSRPRelayButtonClicked(self, checked):
account = self.selected_account account = self.selected_account
account.nat_traversal.use_msrp_relay_for_outbound = checked account.nat_traversal.use_msrp_relay_for_outbound = checked
...@@ -1295,19 +1301,19 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -1295,19 +1301,19 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
account.pstn.prefix = prefix account.pstn.prefix = prefix
account.save() account.save()
def _SH_AccountTLSCertFileEditorLocationCleared(self): def _SH_TLSCertFileEditorLocationCleared(self):
account = self.selected_account settings = SIPSimpleSettings()
account.tls.certificate = None settings.tls.certificate = None
account.save() settings.save()
def _SH_AccountTLSCertFileBrowseButtonClicked(self, checked): def _SH_TLSCertFileBrowseButtonClicked(self, checked):
# TODO: open the file selection dialog in non-modal mode (and the error messages boxes as well). -Dan # TODO: open the file selection dialog in non-modal mode (and the error messages boxes as well). -Dan
account = self.selected_account settings = SIPSimpleSettings()
directory = os.path.dirname(account.tls.certificate.normalized) if account.tls.certificate else Path('~').normalized directory = os.path.dirname(settings.tls.certificate.normalized) if settings.tls.certificate else Path('~').normalized
cert_path = QFileDialog.getOpenFileName(self, 'Select Certificate File', directory, "TLS certificates (*.crt *.pem)")[0] or None cert_path = QFileDialog.getOpenFileName(self, 'Select Certificate File', directory, "TLS certificates (*.crt *.pem)")[0] or None
if cert_path is not None: if cert_path is not None:
cert_path = os.path.normpath(cert_path) cert_path = os.path.normpath(cert_path)
if cert_path != account.tls.certificate: if cert_path != settings.tls.certificate:
try: try:
contents = open(cert_path).read() contents = open(cert_path).read()
X509Certificate(contents) X509Certificate(contents)
...@@ -1317,14 +1323,14 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton): ...@@ -1317,14 +1323,14 @@ class PreferencesWindow(base_class, ui_class, metaclass=QSingleton):
except GNUTLSError as e: except GNUTLSError as e:
QMessageBox.critical(self, "TLS Certificate Error", "The certificate file is invalid: %s" % e) QMessageBox.critical(self, "TLS Certificate Error", "The certificate file is invalid: %s" % e)
else: else:
self.account_tls_cert_file_editor.setText(cert_path) self.tls_cert_file_editor.setText(cert_path)
account.tls.certificate = cert_path settings.tls.certificate = cert_path
account.save() settings.save()
def _SH_AccountTLSVerifyServerButtonClicked(self, checked): def _SH_TLSVerifyServerButtonClicked(self, checked):
account = self.selected_account settings = SIPSimpleSettings()
account.tls.verify_server = checked settings.tls.verify_server = checked
account.save() settings.save()
# Audio devices signal handlers # Audio devices signal handlers
def _SH_AudioAlertDeviceButtonActivated(self, index): def _SH_AudioAlertDeviceButtonActivated(self, index):
......
...@@ -741,7 +741,7 @@ class BlinkSession(BlinkSessionBase): ...@@ -741,7 +741,7 @@ class BlinkSession(BlinkSessionBase):
self.lookup = DNSLookup() self.lookup = DNSLookup()
notification_center.add_observer(self, sender=self.lookup) notification_center.add_observer(self, sender=self.lookup)
self.lookup.lookup_sip_proxy(uri, settings.sip.transport_list) self.lookup.lookup_sip_proxy(uri, settings.sip.transport_list, tls_name=self.account.sip.tls_name or uri.host)
def add_stream(self, stream_description): def add_stream(self, stream_description):
self.add_streams([stream_description]) self.add_streams([stream_description])
...@@ -3937,7 +3937,7 @@ class BlinkFileTransfer(BlinkSessionBase): ...@@ -3937,7 +3937,7 @@ class BlinkFileTransfer(BlinkSessionBase):
lookup = DNSLookup() lookup = DNSLookup()
notification_center.add_observer(self, sender=lookup) notification_center.add_observer(self, sender=lookup)
lookup.lookup_sip_proxy(uri, settings.sip.transport_list) lookup.lookup_sip_proxy(uri, settings.sip.transport_list, tls_name=self.account.sip.tls_name or uri.host)
self.state = 'connecting/dns_lookup' self.state = 'connecting/dns_lookup'
......
...@@ -25,7 +25,7 @@ Depends: ${python3:Depends}, ${shlibs:Depends}, ${misc:Depends}, ...@@ -25,7 +25,7 @@ Depends: ${python3:Depends}, ${shlibs:Depends}, ${misc:Depends},
python3-pyqt5, python3-pyqt5,
python3-pyqt5.qtsvg, python3-pyqt5.qtsvg,
python3-pyqt5.qtwebkit, python3-pyqt5.qtwebkit,
python3-sipsimple, python3-sipsimple (>=5.2.0),
python3-twisted, python3-twisted,
python3-zope.interface, python3-zope.interface,
x11vnc x11vnc
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QStackedWidget" name="pages"> <widget class="QStackedWidget" name="pages">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>6</number>
</property> </property>
<widget class="QWidget" name="accounts_page"> <widget class="QWidget" name="accounts_page">
<layout class="QGridLayout" name="accounts_layout"> <layout class="QGridLayout" name="accounts_layout">
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QTabWidget" name="account_tab_widget"> <widget class="QTabWidget" name="account_tab_widget">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>4</number>
</property> </property>
<widget class="QWidget" name="account_information_tab"> <widget class="QWidget" name="account_information_tab">
<attribute name="title"> <attribute name="title">
...@@ -1087,7 +1087,7 @@ ...@@ -1087,7 +1087,7 @@
<property name="spacing"> <property name="spacing">
<number>5</number> <number>5</number>
</property> </property>
<item row="7" column="0" colspan="3"> <item row="6" column="0" colspan="3">
<spacer name="account_tls_settings_spacer"> <spacer name="account_tls_settings_spacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
...@@ -1123,43 +1123,6 @@ ...@@ -1123,43 +1123,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<widget class="QLabel" name="account_tls_cert_file_label">
<property name="minimumSize">
<size>
<width>140</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Certificate File:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="LocationBar" name="account_tls_cert_file_editor">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="account_tls_cert_file_browse_button">
<property name="text">
<string>Browse</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QCheckBox" name="account_tls_verify_server_button">
<property name="text">
<string>Verify server</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3"> <item row="0" column="0" colspan="3">
<widget class="QWidget" name="sip_settings_widget" native="true"> <widget class="QWidget" name="sip_settings_widget" native="true">
<layout class="QGridLayout" name="sip_settings_widget_layout"> <layout class="QGridLayout" name="sip_settings_widget_layout">
...@@ -1546,6 +1509,29 @@ ...@@ -1546,6 +1509,29 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<widget class="QLabel" name="account_peer_name_label">
<property name="minimumSize">
<size>
<width>140</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Peer name:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLineEdit" name="account_tls_name_editor">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Verify the remote TLS certifcate Common Name against this name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>
...@@ -2813,405 +2799,574 @@ ...@@ -2813,405 +2799,574 @@
</property> </property>
<item> <item>
<widget class="QGroupBox" name="advanced_group_box"> <widget class="QGroupBox" name="advanced_group_box">
<layout class="QGridLayout" name="advanced_group_box_layout"> <widget class="QPushButton" name="transfers_directory_browse_button">
<property name="leftMargin"> <property name="geometry">
<number>10</number> <rect>
<x>789</x>
<y>260</y>
<width>85</width>
<height>27</height>
</rect>
</property> </property>
<property name="topMargin"> <property name="text">
<number>10</number> <string>Browse</string>
</property> </property>
<property name="rightMargin"> </widget>
<widget class="Line" name="line_14">
<property name="geometry">
<rect>
<x>18</x>
<y>373</y>
<width>856</width>
<height>16</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="transfers_directory_label">
<property name="geometry">
<rect>
<x>10</x>
<y>262</y>
<width>147</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Save received files to:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="tcp_port_label">
<property name="geometry">
<rect>
<x>313</x>
<y>91</y>
<width>64</width>
<height>17</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>TCP port:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="tls_port_label">
<property name="geometry">
<rect>
<x>313</x>
<y>124</y>
<width>62</width>
<height>17</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>TLS port:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QCheckBox" name="enable_udp_button">
<property name="geometry">
<rect>
<x>171</x>
<y>60</y>
<width>110</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Enable UDP</string>
</property>
</widget>
<widget class="QSpinBox" name="media_ports_start">
<property name="geometry">
<rect>
<x>386</x>
<y>157</y>
<width>74</width>
<height>27</height>
</rect>
</property>
<property name="minimum">
<number>10000</number>
</property>
<property name="maximum">
<number>65000</number>
</property>
<property name="singleStep">
<number>1000</number>
</property>
<property name="value">
<number>50000</number>
</property>
</widget>
<widget class="QLabel" name="udp_port_label">
<property name="geometry">
<rect>
<x>313</x>
<y>58</y>
<width>67</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>UDP port:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="starting_at_label">
<property name="geometry">
<rect>
<x>287</x>
<y>157</y>
<width>75</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>starting at:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="LocationBar" name="tls_ca_file_editor">
<property name="geometry">
<rect>
<x>171</x>
<y>390</y>
<width>601</width>
<height>27</height>
</rect>
</property>
<property name="toolTip">
<string>The cerfiticate authority used to validate TLS connections</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="sip_and_rtp_label">
<property name="geometry">
<rect>
<x>18</x>
<y>26</y>
<width>86</width>
<height>17</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>SIP and RTP</string>
</property>
</widget>
<widget class="QCheckBox" name="enable_tls_button">
<property name="geometry">
<rect>
<x>171</x>
<y>126</y>
<width>105</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Enable TLS</string>
</property>
</widget>
<widget class="QPushButton" name="tls_ca_file_browse_button">
<property name="geometry">
<rect>
<x>789</x>
<y>390</y>
<width>85</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Browse</string>
</property>
</widget>
<widget class="QLabel" name="screenshots_directory_label">
<property name="geometry">
<rect>
<x>18</x>
<y>290</y>
<width>139</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Save screenshots to:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLineEdit" name="transfers_directory_editor">
<property name="geometry">
<rect>
<x>171</x>
<y>260</y>
<width>601</width>
<height>27</height>
</rect>
</property>
<property name="toolTip">
<string>Where to save received files</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="SIPPortEditor" name="tls_port">
<property name="geometry">
<rect>
<x>386</x>
<y>124</y>
<width>74</width>
<height>27</height>
</rect>
</property>
<property name="specialValueText">
<string>Auto</string>
</property>
<property name="maximum">
<number>65535</number>
</property>
</widget>
<widget class="Line" name="line_12">
<property name="geometry">
<rect>
<x>18</x>
<y>49</y>
<width>856</width>
<height>16</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="SIPPortEditor" name="tcp_port">
<property name="geometry">
<rect>
<x>386</x>
<y>91</y>
<width>74</width>
<height>27</height>
</rect>
</property>
<property name="specialValueText">
<string>Auto</string>
</property>
<property name="maximum">
<number>65535</number>
</property>
</widget>
<widget class="QCheckBox" name="enable_tcp_button">
<property name="geometry">
<rect>
<x>171</x>
<y>93</y>
<width>107</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Enable TCP</string>
</property>
</widget>
<widget class="QLabel" name="tls_ca_file_label">
<property name="geometry">
<rect>
<x>10</x>
<y>392</y>
<width>148</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>Certificate Authority:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="media_ports_label">
<property name="geometry">
<rect>
<x>18</x>
<y>157</y>
<width>71</width>
<height>17</height>
</rect>
</property>
<property name="toolTip">
<string>How many media ports to use and starting from what address</string>
</property>
<property name="text">
<string>RTP Ports:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="tls_settings_label">
<property name="geometry">
<rect>
<x>18</x>
<y>350</y>
<width>89</width>
<height>17</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>TLS settings</string>
</property>
</widget>
<widget class="Line" name="line_13">
<property name="geometry">
<rect>
<x>18</x>
<y>244</y>
<width>856</width>
<height>16</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="files_and_directories_label">
<property name="geometry">
<rect>
<x>18</x>
<y>221</y>
<width>145</width>
<height>17</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Files and directories</string>
</property>
</widget>
<widget class="QLabel" name="transports_label">
<property name="geometry">
<rect>
<x>18</x>
<y>58</y>
<width>77</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Transports:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QSpinBox" name="media_ports">
<property name="geometry">
<rect>
<x>171</x>
<y>157</y>
<width>74</width>
<height>27</height>
</rect>
</property>
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
</property>
<property name="minimum">
<number>10</number> <number>10</number>
</property> </property>
<property name="bottomMargin"> <property name="maximum">
<number>10000</number>
</property>
<property name="singleStep">
<number>10</number> <number>10</number>
</property> </property>
<item row="9" column="6"> <property name="value">
<widget class="QPushButton" name="transfers_directory_browse_button"> <number>500</number>
<property name="text"> </property>
<string>Browse</string> </widget>
</property> <widget class="SIPPortEditor" name="udp_port">
</widget> <property name="geometry">
</item> <rect>
<item row="13" column="0" colspan="7"> <x>386</x>
<widget class="Line" name="line_14"> <y>58</y>
<property name="orientation"> <width>74</width>
<enum>Qt::Horizontal</enum> <height>27</height>
</property> </rect>
</widget> </property>
</item> <property name="specialValueText">
<item row="9" column="0"> <string>Auto</string>
<widget class="QLabel" name="transfers_directory_label"> </property>
<property name="text"> <property name="maximum">
<string>Save received files to:</string> <number>65535</number>
</property> </property>
<property name="alignment"> </widget>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <widget class="QPushButton" name="screenshots_directory_browse_button">
</property> <property name="geometry">
</widget> <rect>
</item> <x>789</x>
<item row="2" column="2"> <y>290</y>
<spacer name="transport_spacer"> <width>85</width>
<property name="orientation"> <height>27</height>
<enum>Qt::Horizontal</enum> </rect>
</property> </property>
<property name="sizeType"> <property name="text">
<enum>QSizePolicy::Fixed</enum> <string>Browse</string>
</property> </property>
<property name="sizeHint" stdset="0"> </widget>
<size> <widget class="QLineEdit" name="screenshots_directory_editor">
<width>20</width> <property name="geometry">
<height>20</height> <rect>
</size> <x>171</x>
</property> <y>290</y>
</spacer> <width>601</width>
</item> <height>27</height>
<item row="3" column="3"> </rect>
<widget class="QLabel" name="tcp_port_label"> </property>
<property name="sizePolicy"> <property name="toolTip">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred"> <string>Where to save screenshots taken from video or screen sharing sessions</string>
<horstretch>0</horstretch> </property>
<verstretch>0</verstretch> <property name="readOnly">
</sizepolicy> <bool>true</bool>
</property> </property>
<property name="text"> </widget>
<string>TCP port:</string> <widget class="QLabel" name="port_note_label">
</property> <property name="geometry">
<property name="alignment"> <rect>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <x>466</x>
</property> <y>58</y>
</widget> <width>288</width>
</item> <height>17</height>
<item row="4" column="3"> </rect>
<widget class="QLabel" name="tls_port_label"> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string>TLS port:</string> <string>Set SIP ports to 0 for automatic allocation</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property> </property>
</widget> <property name="indent">
</item> <number>5</number>
<item row="2" column="1"> </property>
<widget class="QCheckBox" name="enable_udp_button"> </widget>
<property name="text"> <widget class="QCheckBox" name="tls_verify_server_button">
<string>Enable UDP</string> <property name="geometry">
</property> <rect>
</widget> <x>170</x>
</item> <y>460</y>
<item row="5" column="4"> <width>453</width>
<widget class="QSpinBox" name="media_ports_start"> <height>22</height>
<property name="minimum"> </rect>
<number>10000</number> </property>
</property> <property name="toolTip">
<property name="maximum"> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Clicke to enable verification of peer certificate. Yoiu can set the name to be verified in Advanced SIP account settings&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<number>65000</number> </property>
</property> <property name="text">
<property name="singleStep"> <string>Verify server</string>
<number>1000</number> </property>
</property> </widget>
<property name="value"> <widget class="QLabel" name="tls_cert_file_label">
<number>50000</number> <property name="geometry">
</property> <rect>
</widget> <x>20</x>
</item> <y>420</y>
<item row="2" column="3"> <width>140</width>
<widget class="QLabel" name="udp_port_label"> <height>21</height>
<property name="text"> </rect>
<string>UDP port:</string> </property>
</property> <property name="minimumSize">
<property name="alignment"> <size>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <width>140</width>
</property> <height>0</height>
</widget> </size>
</item> </property>
<item row="5" column="2" colspan="2"> <property name="text">
<widget class="QLabel" name="starting_at_label"> <string>Certificate File:</string>
<property name="text"> </property>
<string>starting at:</string> <property name="alignment">
</property> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<property name="alignment"> </property>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </widget>
</property> <widget class="LocationBar" name="tls_cert_file_editor">
</widget> <property name="geometry">
</item> <rect>
<item row="14" column="1" colspan="5"> <x>170</x>
<widget class="LocationBar" name="tls_ca_file_editor"> <y>420</y>
<property name="toolTip"> <width>601</width>
<string>The cerfiticate authority used to validate TLS connections</string> <height>27</height>
</property> </rect>
<property name="readOnly"> </property>
<bool>true</bool> <property name="toolTip">
</property> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Certificate and private key in PEM format used by TLS transport&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</widget> </property>
</item> <property name="readOnly">
<item row="15" column="0" colspan="7"> <bool>true</bool>
<spacer name="advanced_spacer"> </property>
<property name="orientation"> </widget>
<enum>Qt::Vertical</enum> <widget class="QPushButton" name="tls_cert_file_browse_button">
</property> <property name="geometry">
<property name="sizeType"> <rect>
<enum>QSizePolicy::Expanding</enum> <x>790</x>
</property> <y>420</y>
<property name="sizeHint" stdset="0"> <width>85</width>
<size> <height>27</height>
<width>20</width> </rect>
<height>30</height> </property>
</size> <property name="text">
</property> <string>Browse</string>
</spacer> </property>
</item> </widget>
<item row="0" column="0" colspan="7">
<widget class="QLabel" name="sip_and_rtp_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>SIP and RTP</string>
</property>
</widget>
</item>
<item row="11" column="0" colspan="7">
<spacer name="files_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>815</width>
<height>25</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="enable_tls_button">
<property name="text">
<string>Enable TLS</string>
</property>
</widget>
</item>
<item row="14" column="6">
<widget class="QPushButton" name="tls_ca_file_browse_button">
<property name="text">
<string>Browse</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="screenshots_directory_label">
<property name="text">
<string>Save screenshots to:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="9" column="1" colspan="5">
<widget class="QLineEdit" name="transfers_directory_editor">
<property name="toolTip">
<string>Where to save received files</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="SIPPortEditor" name="tls_port">
<property name="specialValueText">
<string>Auto</string>
</property>
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item row="1" column="0" colspan="7">
<widget class="Line" name="line_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="SIPPortEditor" name="tcp_port">
<property name="specialValueText">
<string>Auto</string>
</property>
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="enable_tcp_button">
<property name="text">
<string>Enable TCP</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="tls_ca_file_label">
<property name="text">
<string>Certificate Authority:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="media_ports_label">
<property name="toolTip">
<string>How many media ports to use and starting from what address</string>
</property>
<property name="text">
<string>RTP Ports:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="6" column="0" colspan="7">
<spacer name="sip_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>815</width>
<height>25</height>
</size>
</property>
</spacer>
</item>
<item row="12" column="0" colspan="7">
<widget class="QLabel" name="tls_settings_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>TLS settings</string>
</property>
</widget>
</item>
<item row="8" column="0" colspan="7">
<widget class="Line" name="line_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="7" column="0" colspan="7">
<widget class="QLabel" name="files_and_directories_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Files and directories</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="transports_label">
<property name="text">
<string>Transports:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="media_ports">
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
</property>
<property name="minimum">
<number>10</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="SIPPortEditor" name="udp_port">
<property name="specialValueText">
<string>Auto</string>
</property>
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item row="10" column="6">
<widget class="QPushButton" name="screenshots_directory_browse_button">
<property name="text">
<string>Browse</string>
</property>
</widget>
</item>
<item row="10" column="1" colspan="5">
<widget class="QLineEdit" name="screenshots_directory_editor">
<property name="toolTip">
<string>Where to save screenshots taken from video or screen sharing sessions</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QLabel" name="port_note_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Set SIP ports to 0 for automatic allocation</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="indent">
<number>5</number>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
</layout> </layout>
...@@ -3419,9 +3574,6 @@ ...@@ -3419,9 +3574,6 @@
<tabstop>subscribe_interval</tabstop> <tabstop>subscribe_interval</tabstop>
<tabstop>idd_prefix_button</tabstop> <tabstop>idd_prefix_button</tabstop>
<tabstop>prefix_button</tabstop> <tabstop>prefix_button</tabstop>
<tabstop>account_tls_cert_file_editor</tabstop>
<tabstop>account_tls_cert_file_browse_button</tabstop>
<tabstop>account_tls_verify_server_button</tabstop>
<tabstop>audio_input_device_button</tabstop> <tabstop>audio_input_device_button</tabstop>
<tabstop>audio_output_device_button</tabstop> <tabstop>audio_output_device_button</tabstop>
<tabstop>audio_alert_device_button</tabstop> <tabstop>audio_alert_device_button</tabstop>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment