85
emit recvPartialItem(socket->bytesAvailable(), blockSize);
83
emit recvPartialItem(_socket->bytesAvailable(), _blockSize);
89
87
void ClientSyncer::coreSocketError(QAbstractSocket::SocketError) {
90
qDebug() << "coreSocketError" << socket << socket->errorString();
91
emit connectionError(socket->errorString());
92
socket->deleteLater();
88
qDebug() << "coreSocketError" << _socket << _socket->errorString();
89
emit connectionError(_socket->errorString());
95
93
void ClientSyncer::disconnectFromCore() {
96
if(socket) socket->close();
99
99
void ClientSyncer::connectToCore(const QVariantMap &conn) {
100
// TODO implement SSL
101
101
coreConnectionInfo = conn;
102
//if(isConnected()) {
103
// emit coreConnectionError(tr("Already connected to Core!"));
107
socket->deleteLater();
110
103
if(conn["Host"].toString().isEmpty()) {
111
emit connectionError(tr("Internal connections not yet supported."));
112
return; // FIXME implement internal connections
113
//clientMode = LocalCore;
114
socket = new QBuffer(this);
115
connect(socket, SIGNAL(readyRead()), this, SLOT(coreHasData()));
116
socket->open(QIODevice::ReadWrite);
117
//QVariant state = connectToLocalCore(coreConnectionInfo["User"].toString(), coreConnectionInfo["Password"].toString());
119
coreSocketConnected();
121
//clientMode = RemoteCore;
122
//emit coreConnectionMsg(tr("Connecting..."));
104
emit connectionError(tr("No Host to connect to specified."));
126
QSslSocket *sock = new QSslSocket(Client::instance());
127
connect(sock, SIGNAL(encrypted()), this, SIGNAL(encrypted()));
110
QSslSocket *sock = new QSslSocket(Client::instance());
129
if(conn["useSsl"].toBool()) {
130
emit connectionError(tr("<b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings."));
133
QTcpSocket *sock = new QTcpSocket(Client::instance());
112
if(conn["useSsl"].toBool()) {
113
emit connectionError(tr("<b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings."));
116
QTcpSocket *sock = new QTcpSocket(Client::instance());
135
119
#ifndef QT_NO_NETWORKPROXY
136
if(conn.contains("useProxy") && conn["useProxy"].toBool()) {
137
QNetworkProxy proxy((QNetworkProxy::ProxyType)conn["proxyType"].toInt(), conn["proxyHost"].toString(), conn["proxyPort"].toUInt(), conn["proxyUser"].toString(), conn["proxyPassword"].toString());
138
sock->setProxy(proxy);
120
if(conn.contains("useProxy") && conn["useProxy"].toBool()) {
121
QNetworkProxy proxy((QNetworkProxy::ProxyType)conn["proxyType"].toInt(), conn["proxyHost"].toString(), conn["proxyPort"].toUInt(), conn["proxyUser"].toString(), conn["proxyPassword"].toString());
122
sock->setProxy(proxy);
142
connect(sock, SIGNAL(readyRead()), this, SLOT(coreHasData()));
143
connect(sock, SIGNAL(connected()), this, SLOT(coreSocketConnected()));
144
connect(sock, SIGNAL(disconnected()), this, SLOT(coreSocketDisconnected()));
145
connect(sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(coreSocketError(QAbstractSocket::SocketError)));
146
connect(sock, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SIGNAL(socketStateChanged(QAbstractSocket::SocketState)));
147
sock->connectToHost(conn["Host"].toString(), conn["Port"].toUInt());
127
connect(sock, SIGNAL(readyRead()), this, SLOT(coreHasData()));
128
connect(sock, SIGNAL(connected()), this, SLOT(coreSocketConnected()));
129
connect(sock, SIGNAL(disconnected()), this, SLOT(coreSocketDisconnected()));
130
connect(sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(coreSocketError(QAbstractSocket::SocketError)));
131
connect(sock, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SIGNAL(socketStateChanged(QAbstractSocket::SocketState)));
132
sock->connectToHost(conn["Host"].toString(), conn["Port"].toUInt());
151
135
void ClientSyncer::coreSocketConnected() {
287
265
void ClientSyncer::sessionStateReceived(const QVariantMap &state) {
288
266
emit sessionProgress(1, 1);
289
267
disconnect(this, SIGNAL(recvPartialItem(quint32, quint32)), this, SIGNAL(sessionProgress(quint32, quint32)));
290
disconnect(socket, 0, this, 0); // rest of communication happens through SignalProxy
291
Client::instance()->setConnectedToCore(coreConnectionInfo["AccountId"].value<AccountId>(), socket);
269
// rest of communication happens through SignalProxy...
270
disconnect(_socket, 0, this, 0);
271
// ... but we still want to be notified about errors...
272
connect(_socket, SIGNAL(disconnected()), this, SLOT(coreSocketDisconnected()));
273
connect(_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(coreSocketError(QAbstractSocket::SocketError)));
275
Client::instance()->setConnectedToCore(coreConnectionInfo["AccountId"].value<AccountId>(), _socket);
292
276
syncToCore(state);
368
367
void ClientSyncer::sslSocketEncrypted() {
369
368
QSslSocket *socket = qobject_cast<QSslSocket *>(sender());
371
QByteArray digest = socket->peerCertificate().digest();
371
// if there were sslErrors we already had extensive error handling
372
// no need to check for a digest change again.
373
if(!socket->sslErrors().isEmpty())
376
QByteArray knownDigest = KnownHostsSettings().knownDigest(socket);
377
if(knownDigest == socket->peerCertificate().digest()) {
382
QStringList warnings;
383
if(!knownDigest.isEmpty()) {
384
warnings << tr("Cert Digest changed! was: %1").arg(QString(prettyDigest(knownDigest)));
387
setWarningsHandler(SLOT(ignoreSslWarnings(bool)));
388
emit connectionWarnings(warnings);
375
391
void ClientSyncer::sslErrors(const QList<QSslError> &errors) {
376
QByteArray knownDigest;
377
392
QSslSocket *socket = qobject_cast<QSslSocket *>(sender());
379
socket->ignoreSslErrors();
380
knownDigest = KnownHostsSettings().knownDigest(socket);
381
if(knownDigest == socket->peerCertificate().digest()) {
395
socket->ignoreSslErrors();
397
QByteArray knownDigest = KnownHostsSettings().knownDigest(socket);
398
if(knownDigest == socket->peerCertificate().digest()) {
387
403
QStringList warnings;