From 4670288d51b393ea93463a288dffcb3f74af21a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc=20W=C3=A4ckerlin?=
Date: Thu, 26 May 2011 06:31:19 +0000
Subject: [PATCH] done fist implementation of ErrorLog, refs #48; added
AdjustToMinimumContentsLength, closes #52
---
swisssurfer/configure.in | 7 +-
swisssurfer/src/browser.hxx | 56 +++------
swisssurfer/src/browser.ui | 9 ++
swisssurfer/src/downloadmanager.hxx | 82 +++++++++++--
swisssurfer/src/qmake.pro.in | 4 +-
swisssurfer/src/smartcardauth.hxx | 2 +-
swisssurfer/src/swisssurfer_de.ts | 181 +++++++++++++++++-----------
swisssurfer/src/swisssurfer_en.ts | 181 +++++++++++++++++-----------
swisssurfer/src/swisssurfer_fr.ts | 181 +++++++++++++++++-----------
swisssurfer/src/swisssurfer_it.ts | 181 +++++++++++++++++-----------
10 files changed, 548 insertions(+), 336 deletions(-)
diff --git a/swisssurfer/configure.in b/swisssurfer/configure.in
index 3a14289..14ef121 100644
--- a/swisssurfer/configure.in
+++ b/swisssurfer/configure.in
@@ -81,10 +81,6 @@ test "$enableval" = "yes" && HAVE_DOT="YES" || HAVE_DOT="NO";
AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
# Special Options
-AC_CHECK_PROGS([QMAKE], [qmake-qt4 qmake-mac qmake])
-test -n "$QMAKE" || AC_MSG_ERROR([qmake for Qt 4 not found!])
-AC_MSG_NOTICE([QMAKE IS: $QMAKE])
-AC_SUBST(QMAKE)
AC_CHECK_PROGS([LRELEASE], [lrelease-qt4 lrelease-mac lrelease])
test -n "$LRELEASE" || AC_MSG_ERROR([lrelease for Qt 4 not found!])
AC_SUBST(LRELEASE)
@@ -118,6 +114,8 @@ AM_CONDITIONAL(BUILD_LIN32, test "$build_lin32" = "yes")
# Environment Variables
AC_ARG_VAR(LUPDATE_ARGS, [arguments for qt lupdate command, e.g. -no-obsolete])
+AC_PATH_PROG(QMAKE, [qmake qmake-qt4], [])
+AC_ARG_VAR(QMAKE, [path to qmake program])
# Enviropnment Variables
AC_ARG_VAR(EDITION, [name of the edition, e.g. comol])
@@ -137,7 +135,6 @@ AC_SUBST(PACKAGENAME)
AC_SUBST(AM_CXXFLAGS)
AC_SUBST(AM_CPPFLAGS)
AC_SUBST(LIBS)
-AC_SUBST(QMAKE)
AC_SUBST(QMAKE_OPTIONS)
AC_SUBST(STATIC_QTPLUGINS)
AC_SUBST(STATIC_QCONFIG)
diff --git a/swisssurfer/src/browser.hxx b/swisssurfer/src/browser.hxx
index dd302e8..90422cd 100644
--- a/swisssurfer/src/browser.hxx
+++ b/swisssurfer/src/browser.hxx
@@ -31,6 +31,7 @@
#include
#include
+#include
#include
#include
#include
@@ -58,7 +59,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
_url(0), _clearUrl(0), _addBookmark(0), _find(0),
_kiosk(kiosk),
_settings(mimeTypes, this, settings, !kiosk),
- _scAuth(actlib, this, login) {
+ _scAuth(actlib, this, login), _errorLog(this) {
LOG<setPageStep(10);
_zoom->setTickPosition(QSlider::TicksBothSides);
assert(connect(_zoom, SIGNAL(valueChanged(int)), SLOT(zoom(int))));
- _toolbar->addWidget(_url = new QComboBox(_toolbar));
- on_actionNewTab_triggered();
+ _url = new QComboBox(_toolbar);
_url->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Fixed));
+ _url->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
_url->setEditable(!_kiosk);
- _url->setVisible(!_kiosk);
_url->addItems(urls);
+ _toolbar->addWidget(_url);
assert(connect(_url, SIGNAL(currentIndexChanged(const QString&)),
SLOT(load(QString))));
assert(connect(&_networkManager, SIGNAL(created(QNetworkReply*)),
@@ -92,6 +93,9 @@ class Browser: public QMainWindow, protected Ui::Browser {
SLOT(started())));
assert(connect(&_downloadManager, SIGNAL(finished()),
SLOT(finished())));
+ assert(connect(&_downloadManager, SIGNAL(error(QString)),
+ SLOT(downloadError(QString))));
+ on_actionNewTab_triggered();
if (!settings || _kiosk) actionSettings->setVisible(false);
if (_kiosk) {
@@ -424,6 +428,9 @@ class Browser: public QMainWindow, protected Ui::Browser {
statusBar()->showMessage(tr("Checking: %1").arg(page.toString()));
if (page.scheme()=="https") {
LOG<<"Need to login";
+ if (!QSslSocket::supportsSsl())
+ QMessageBox::critical(this, tr("SSL Not Supported"),
+ tr("SSL is not supported on your system"));
_scAuth.login();
}
if (!check(page)) {
@@ -482,8 +489,6 @@ class Browser: public QMainWindow, protected Ui::Browser {
}
void on__tabs_tabCloseRequested(int index) {
- _error.erase(_tabs->widget(index));
- _errorUrl.erase(_tabs->widget(index));
_tabs->removeTab(index);
_tabs->setTabsClosable(_tabs->count()>1);
}
@@ -604,6 +609,10 @@ class Browser: public QMainWindow, protected Ui::Browser {
void on_actionUnFind_triggered() {
delete _find; _find=0;
}
+
+ void on_actionErrorLog_triggered() {
+ _errorLog.show();
+ }
void on_actionAbout_triggered() {
QMessageBox::about(this, tr("About"),
@@ -1109,6 +1118,10 @@ class Browser: public QMainWindow, protected Ui::Browser {
_progress->setEnabled(false);
}
+ void downloadError(QString error) {
+ _errorLog.append(error);
+ }
+
//@}
//@name QNetworkAccessManager signals
@@ -1130,34 +1143,6 @@ class Browser: public QMainWindow, protected Ui::Browser {
void sslErrors(QNetworkReply* reply, const QList& errors) {
LOG;
statusBar()->showMessage(tr("ssl error"));
- // QString e;
- for (QList::const_iterator err(errors.begin());
- err!=errors.end(); ++err) {
- LOG<<"SSL-Error: "<errorString();
- LOG<<"Certificate Issuer: "
- <<"O="<certificate().issuerInfo(QSslCertificate::Organization)
- <<"CN="<certificate().issuerInfo(QSslCertificate::CommonName)
- <<"L="<certificate().issuerInfo(QSslCertificate::LocalityName)
- <<"OU="<certificate().issuerInfo(QSslCertificate::OrganizationalUnitName)
- <<"C="<certificate().issuerInfo(QSslCertificate::CountryName)
- <<"ST="<certificate().issuerInfo(QSslCertificate::StateOrProvinceName);
- LOG<<"Certificate Subject: "
- <<"O="<certificate().subjectInfo(QSslCertificate::Organization)
- <<"CN="<certificate().subjectInfo(QSslCertificate::CommonName)
- <<"L="<certificate().subjectInfo(QSslCertificate::LocalityName)
- <<"OU="<certificate().subjectInfo(QSslCertificate::OrganizationalUnitName)
- <<"C="<certificate().subjectInfo(QSslCertificate::CountryName)
- <<"ST="<certificate().subjectInfo(QSslCertificate::StateOrProvinceName);
- }
-// e+=tr("%1", "single ssl error").arg(err->errorString());
-// _error[sender()] += tr("%1
URL: %4
%2
"
-// "SSL Errors
"
-// "
")
-// .arg(tr("SSL Error"))
-// .arg(_downloadManager.networkError(reply->error()))
-// .arg(e)
-// .arg(reply->url().toString());
-// _errorUrl[sender()] = reply->url();
}
//@}
@@ -1220,8 +1205,6 @@ class Browser: public QMainWindow, protected Ui::Browser {
QProgressBar* _progress;
QString _home;
bool _kiosk;
- std::map _error;
- std::map _errorUrl;
QPrinter _printer;
SslClientAuthNetworkAccessManager _networkManager;
DownloadManager _downloadManager;
@@ -1229,6 +1212,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
DownloadProcesses _downloadProcesses;
Settings _settings;
SmartCardAuth _scAuth;
+ ErrorLog _errorLog;
};
#endif
diff --git a/swisssurfer/src/browser.ui b/swisssurfer/src/browser.ui
index eef098c..14ca836 100644
--- a/swisssurfer/src/browser.ui
+++ b/swisssurfer/src/browser.ui
@@ -103,6 +103,7 @@
Info
+
@@ -300,6 +301,14 @@
Ctrl+R
+
+
+ Error Log
+
+
+ show error logs
+
+
diff --git a/swisssurfer/src/downloadmanager.hxx b/swisssurfer/src/downloadmanager.hxx
index 2d1e7c9..5fa267d 100644
--- a/swisssurfer/src/downloadmanager.hxx
+++ b/swisssurfer/src/downloadmanager.hxx
@@ -46,8 +46,7 @@ class DownloadManager: public QObject {
" close() before it was finished.");
case QNetworkReply::SslHandshakeFailedError:
return tr("The SSL/TLS handshake failed and the encrypted channel"
- " could not be established. The sslErrors() signal should"
- " have been emitted.");
+ " could not be established. See SSL-Errors above.");
case QNetworkReply::ProxyConnectionRefusedError:
return tr("The connection to the proxy server was refused (the"
" proxy server is not accepting requests).");
@@ -103,12 +102,13 @@ class DownloadManager: public QObject {
void progress(qint64 done, qint64 total);
void started();
void finished();
+ void error(QString);
public Q_SLOTS:
void add(QNetworkReply* reply) {
LOG<url().toString();
- _downloads[reply] = Progress(0, 0);
+ _downloads[reply].progress = Progress(0, 0);
assert(connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
SLOT(downloadProgress(qint64, qint64))));
assert(connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
@@ -136,8 +136,8 @@ class DownloadManager: public QObject {
qint64 total(0);
for (Downloads::iterator it(_downloads.begin());
it!=_downloads.end(); ++it) {
- done += it->second.first;
- total += it->second.second;
+ done += it->second.progress.first;
+ total += it->second.progress.second;
}
progress(done, total);
}
@@ -146,16 +146,30 @@ class DownloadManager: public QObject {
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
//LOG<(sender())].first = bytesReceived;
- _downloads[qobject_cast(sender())].second = bytesTotal;
+ _downloads[qobject_cast(sender())].progress.first
+ = bytesReceived;
+ _downloads[qobject_cast(sender())].progress.second
+ = bytesTotal;
calcProgress();
}
void error(QNetworkReply::NetworkError code) {
LOG<<"Status:"<(sender()));
+ _downloads[reply].error +=
+ tr("Network Error
"
+ "- URL:
- %1
"
+ "- Error Code:
- %3
"
+ "- Error Details:
- %2
")
+ .arg(reply->url().toString())
+ .arg(networkError(code))
+ .arg(code);
}
void slotFinished() {
LOG;
- _downloads.erase(qobject_cast(sender()));
+ QNetworkReply* reply(qobject_cast(sender()));
+ if (_downloads[reply].error.size())
+ error(_downloads[reply].error);
+ _downloads.erase(reply);
if (_downloads.size()==0) finished();
}
void metaDataChanged() {
@@ -163,7 +177,7 @@ class DownloadManager: public QObject {
}
void sslErrors(const QList & errors) {
LOG;
- qobject_cast(sender())->ignoreSslErrors(errors);
+ QNetworkReply* reply(qobject_cast(sender()));
for (QList::const_iterator err(errors.begin());
err!=errors.end(); ++err) {
LOG<<"SSL-Error: "<<(int)err->error()<<": "<errorString();
@@ -182,20 +196,64 @@ class DownloadManager: public QObject {
<<"C="<certificate().subjectInfo(QSslCertificate::CountryName)
<<"ST="<certificate().subjectInfo(QSslCertificate::StateOrProvinceName);
LOG<<"Certificate:\n"<certificate().toPem();
+ _downloads[reply].error +=
+ tr("SSL Error
"
+ "- URL:
- %1
"
+ "- Error Code:
- %3
"
+ "- Error Details:
- %2
"
+ ""
+ "Certificate Issuer"
+ "Organization: | %4 |
"
+ "Common Name: | %5 |
"
+ "Location: | %6 |
"
+ "Organizational Unit: | %7 |
"
+ "Country: | %8 |
"
+ "State or Provive: | %9 |
"
+ "
"
+ ""
+ "Certificate Subject"
+ "Organization: | %10 |
"
+ "Common Name: | %11 |
"
+ "Location: | %12 |
"
+ "Organizational Unit: | %13 |
"
+ "Country: | %14 |
"
+ "State or Provive: | %15 |
"
+ "
")
+ .arg(reply->url().toString())
+ .arg(err->errorString())
+ .arg(err->error())
+ .arg(err->certificate().issuerInfo(QSslCertificate::Organization))
+ .arg(err->certificate().issuerInfo(QSslCertificate::CommonName))
+ .arg(err->certificate().issuerInfo(QSslCertificate::LocalityName))
+ .arg(err->certificate().issuerInfo(QSslCertificate::OrganizationalUnitName))
+ .arg(err->certificate().issuerInfo(QSslCertificate::CountryName))
+ .arg(err->certificate().issuerInfo(QSslCertificate::StateOrProvinceName))
+ .arg(err->certificate().subjectInfo(QSslCertificate::Organization))
+ .arg(err->certificate().subjectInfo(QSslCertificate::CommonName))
+ .arg(err->certificate().subjectInfo(QSslCertificate::LocalityName))
+ .arg(err->certificate().subjectInfo(QSslCertificate::OrganizationalUnitName))
+ .arg(err->certificate().subjectInfo(QSslCertificate::CountryName))
+ .arg(err->certificate().subjectInfo(QSslCertificate::StateOrProvinceName));
}
}
void uploadProgress(qint64 bytesSent, qint64 bytesTotal) {
//LOG<(sender())].first = bytesSent;
- _downloads[qobject_cast(sender())].second = bytesTotal;
+ _downloads[qobject_cast(sender())].progress.first
+ = bytesSent;
+ _downloads[qobject_cast(sender())].progress.second
+ = bytesTotal;
calcProgress();
}
private:
typedef std::pair Progress;
- typedef std::map Downloads;
+ struct Download {
+ Progress progress;
+ QString error;
+ };
+ typedef std::map Downloads;
Downloads _downloads;
};
diff --git a/swisssurfer/src/qmake.pro.in b/swisssurfer/src/qmake.pro.in
index 2853a2c..426ff60 100644
--- a/swisssurfer/src/qmake.pro.in
+++ b/swisssurfer/src/qmake.pro.in
@@ -22,9 +22,9 @@ SOURCES = main.cxx webpage.cxx
HEADERS = browser.hxx smartcardauth.hxx pinentry.hxx \
downloadmanager.hxx settings.hxx sslclientnetworkmanager.hxx \
- authentication.hxx webpage.hxx
+ authentication.hxx webpage.hxx errorlog.hxx
-FORMS = browser.ui settings.ui pinentry.ui authentication.ui
+FORMS = browser.ui settings.ui pinentry.ui authentication.ui errorlog.ui
RESOURCES = languages.qrc resources.qrc
diff --git a/swisssurfer/src/smartcardauth.hxx b/swisssurfer/src/smartcardauth.hxx
index a33728b..982aa98 100644
--- a/swisssurfer/src/smartcardauth.hxx
+++ b/swisssurfer/src/smartcardauth.hxx
@@ -57,7 +57,7 @@ class CryptokiEngine: public QObject, public openssl::Engine {
}
virtual RSA* setupRsa(RSA* r) {
- RSA_free(r);
+ RSA_free(r); //→ occasional crashes?
r = RSA_new_method(_e);
r->n = BN_bin2bn((const unsigned char*)_modulus.data(),
_modulus.size(), r->n);
diff --git a/swisssurfer/src/swisssurfer_de.ts b/swisssurfer/src/swisssurfer_de.ts
index 9cf34ae..b1700b7 100644
--- a/swisssurfer/src/swisssurfer_de.ts
+++ b/swisssurfer/src/swisssurfer_de.ts
@@ -64,250 +64,270 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
&Print
-
+
-
+
Opening: %1
-
+
Reading: %1%
-
+
-
+
-
+
-
+
Back to %1 - %2
statusbar actionBack_hovered %1=url %2=title
-
+
-
+
-
+
-
+
statusbar for hovered link %1=url
-
+
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
statusbar actionForward_hovered %1=url %2=title
-
+
-
+
-
+
-
+
-
+
-
+
@@ -375,89 +395,110 @@ Compiled: qt-%5
-
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+ <h1>Network Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl>
+
+
+
+
+
+ <h1>SSL Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl><table><caption>Certificate Issuer</caption><tr><th>Organization:</th><td>%4</td></tr><tr><th>Common Name:</th><td>%5</td></tr><tr><th>Location:</th><td>%6</td></tr><tr><th>Organizational Unit:</th><td>%7</td></tr><tr><th>Country:</th><td>%8</td></tr><tr><th>State or Provive:</th><td>%9</td></tr></table><table><caption>Certificate Subject</caption><tr><th>Organization:</th><td>%10</td></tr><tr><th>Common Name:</th><td>%11</td></tr><tr><th>Location:</th><td>%12</td></tr><tr><th>Organizational Unit:</th><td>%13</td></tr><tr><th>Country:</th><td>%14</td></tr><tr><th>State or Provive:</th><td>%15</td></tr></table>
+
+
+
+
+ ErrorLog
+
+
+
+
+
PinEntry
diff --git a/swisssurfer/src/swisssurfer_en.ts b/swisssurfer/src/swisssurfer_en.ts
index 9cf34ae..b1700b7 100644
--- a/swisssurfer/src/swisssurfer_en.ts
+++ b/swisssurfer/src/swisssurfer_en.ts
@@ -64,250 +64,270 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
&Print
-
+
-
+
Opening: %1
-
+
Reading: %1%
-
+
-
+
-
+
-
+
Back to %1 - %2
statusbar actionBack_hovered %1=url %2=title
-
+
-
+
-
+
-
+
statusbar for hovered link %1=url
-
+
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
statusbar actionForward_hovered %1=url %2=title
-
+
-
+
-
+
-
+
-
+
-
+
@@ -375,89 +395,110 @@ Compiled: qt-%5
-
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+ <h1>Network Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl>
+
+
+
+
+
+ <h1>SSL Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl><table><caption>Certificate Issuer</caption><tr><th>Organization:</th><td>%4</td></tr><tr><th>Common Name:</th><td>%5</td></tr><tr><th>Location:</th><td>%6</td></tr><tr><th>Organizational Unit:</th><td>%7</td></tr><tr><th>Country:</th><td>%8</td></tr><tr><th>State or Provive:</th><td>%9</td></tr></table><table><caption>Certificate Subject</caption><tr><th>Organization:</th><td>%10</td></tr><tr><th>Common Name:</th><td>%11</td></tr><tr><th>Location:</th><td>%12</td></tr><tr><th>Organizational Unit:</th><td>%13</td></tr><tr><th>Country:</th><td>%14</td></tr><tr><th>State or Provive:</th><td>%15</td></tr></table>
+
+
+
+
+ ErrorLog
+
+
+
+
+
PinEntry
diff --git a/swisssurfer/src/swisssurfer_fr.ts b/swisssurfer/src/swisssurfer_fr.ts
index 9cf34ae..b1700b7 100644
--- a/swisssurfer/src/swisssurfer_fr.ts
+++ b/swisssurfer/src/swisssurfer_fr.ts
@@ -64,250 +64,270 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
&Print
-
+
-
+
Opening: %1
-
+
Reading: %1%
-
+
-
+
-
+
-
+
Back to %1 - %2
statusbar actionBack_hovered %1=url %2=title
-
+
-
+
-
+
-
+
statusbar for hovered link %1=url
-
+
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
statusbar actionForward_hovered %1=url %2=title
-
+
-
+
-
+
-
+
-
+
-
+
@@ -375,89 +395,110 @@ Compiled: qt-%5
-
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+ <h1>Network Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl>
+
+
+
+
+
+ <h1>SSL Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl><table><caption>Certificate Issuer</caption><tr><th>Organization:</th><td>%4</td></tr><tr><th>Common Name:</th><td>%5</td></tr><tr><th>Location:</th><td>%6</td></tr><tr><th>Organizational Unit:</th><td>%7</td></tr><tr><th>Country:</th><td>%8</td></tr><tr><th>State or Provive:</th><td>%9</td></tr></table><table><caption>Certificate Subject</caption><tr><th>Organization:</th><td>%10</td></tr><tr><th>Common Name:</th><td>%11</td></tr><tr><th>Location:</th><td>%12</td></tr><tr><th>Organizational Unit:</th><td>%13</td></tr><tr><th>Country:</th><td>%14</td></tr><tr><th>State or Provive:</th><td>%15</td></tr></table>
+
+
+
+
+ ErrorLog
+
+
+
+
+
PinEntry
diff --git a/swisssurfer/src/swisssurfer_it.ts b/swisssurfer/src/swisssurfer_it.ts
index 9cf34ae..b1700b7 100644
--- a/swisssurfer/src/swisssurfer_it.ts
+++ b/swisssurfer/src/swisssurfer_it.ts
@@ -64,250 +64,270 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
&Print
-
+
-
+
Opening: %1
-
+
Reading: %1%
-
+
-
+
-
+
-
+
Back to %1 - %2
statusbar actionBack_hovered %1=url %2=title
-
+
-
+
-
+
-
+
statusbar for hovered link %1=url
-
+
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
statusbar actionForward_hovered %1=url %2=title
-
+
-
+
-
+
-
+
-
+
-
+
@@ -375,89 +395,110 @@ Compiled: qt-%5
-
+
+ The SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+ <h1>Network Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl>
+
+
+
+
+
+ <h1>SSL Error</h2><dl><dt>URL:</dt><dd>%1</dd><dt>Error Code:</dt><dd>%3</dd><dt>Error Details:</dt><dd>%2</dd></dl><table><caption>Certificate Issuer</caption><tr><th>Organization:</th><td>%4</td></tr><tr><th>Common Name:</th><td>%5</td></tr><tr><th>Location:</th><td>%6</td></tr><tr><th>Organizational Unit:</th><td>%7</td></tr><tr><th>Country:</th><td>%8</td></tr><tr><th>State or Provive:</th><td>%9</td></tr></table><table><caption>Certificate Subject</caption><tr><th>Organization:</th><td>%10</td></tr><tr><th>Common Name:</th><td>%11</td></tr><tr><th>Location:</th><td>%12</td></tr><tr><th>Organizational Unit:</th><td>%13</td></tr><tr><th>Country:</th><td>%14</td></tr><tr><th>State or Provive:</th><td>%15</td></tr></table>
+
+
+
+
+ ErrorLog
+
+
+
+
+
PinEntry