19 #define BRIDGEDB_HOST "bridges.torproject.org" 20 #define BRIDGEDB_PORT 443 25 _https =
new QNetworkAccessManager();
30 this, SLOT(
sslErrors(QNetworkReply *, QList<QSslError>)));
35 const QString &username,
const QString &password)
37 _https->setProxy(QNetworkProxy(QNetworkProxy::HttpProxy, host, port, username, password));
62 return QSslSocket::supportsSsl();
76 _reply =
_https->get(QNetworkRequest(QUrl(
"https://bridges.torproject.org/?format=plain")));
94 case QHttp::Connecting:
100 emit
statusChanged(tr(
"Sending an HTTPS request for bridges..."));
115 if (reply->error() != QNetworkReply::NoError) {
116 QString errorString = reply->errorString();
117 vWarn(
"Bridge request failed: %2").arg(errorString);
121 QByteArray response = reply->readAll();
122 vInfo(
"Bridge request complete: received %2 bytes.").arg(response.size());
124 QStringList bridges, lines = QString(response).split(
"\n");
125 foreach (QString line, lines) {
126 line = line.trimmed();
127 if (line.startsWith(
"bridge ", Qt::CaseInsensitive))
140 QStringList errorStrings;
142 vWarn(
"%1 SSL error(s) when requesting bridge information:")
143 .arg(sslErrors.size());
144 foreach (QSslError sslError, sslErrors) {
145 errorString = sslError.errorString();
146 errorStrings << errorString;
147 vWarn(
" SSL Error: %1").arg(errorString);
void statusChanged(const QString &status)
void bridgeRequestFailed(const QString &error)
BridgeDownloader(QObject *parent=0)
QNetworkAccessManager * _https
void cancelBridgeRequest()
void bridgeRequestFinished(const QStringList &bridges)
void downloadProgress(qint64 done, qint64 total)
void httpsRequestFinished(QNetworkReply *reply)
stop errmsg connect(const QHostAddress &address, quint16 port)
static bool isMethodSupported(BridgeDownloadMethod method)
void startHttpsDownload()
void sslErrors(QNetworkReply *, const QList< QSslError > &sslErrors)
void setProxy(const QString &host, int port, const QString &username=QString(), const QString &password=QString())
void httpsStateChanged(int state)
bool downloadBridges(BridgeDownloadMethod method)