aboutsummaryrefslogtreecommitdiff
path: root/libraries/katabasis/src/Reply.cpp
blob: c26079005ae14d40f52ed58b1065c086b0d5d5ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <QTimer>
#include <QNetworkReply>

#include "katabasis/Reply.h"

namespace Katabasis {

Reply::Reply(QNetworkReply *r, int timeOut, QObject *parent): QTimer(parent), reply(r) {
    setSingleShot(true);
    connect(this, &Reply::timeout, this, &Reply::onTimeOut, Qt::QueuedConnection);
    start(timeOut);
}

void Reply::onTimeOut() {
    timedOut = true;
    reply->abort();
}

// ----------------------------

ReplyList::~ReplyList() {
    foreach (Reply *timedReply, replies_) {
        delete timedReply;
    }
}

void ReplyList::add(QNetworkReply *reply, int timeOut) {
    if (reply && ignoreSslErrors()) {
        reply->ignoreSslErrors();
    }
    add(new Reply(reply, timeOut));
}

void ReplyList::add(Reply *reply) {
    replies_.append(reply);
}

void ReplyList::remove(QNetworkReply *reply) {
    Reply *o2Reply = find(reply);
    if (o2Reply) {
        o2Reply->stop();
        (void)replies_.removeOne(o2Reply);
        // we took ownership, we must free
        delete o2Reply;
    }
}

Reply *ReplyList::find(QNetworkReply *reply) {
    foreach (Reply *timedReply, replies_) {
        if (timedReply->reply == reply) {
            return timedReply;
        }
    }
    return 0;
}

bool ReplyList::ignoreSslErrors()
{
    return ignoreSslErrors_;
}

void ReplyList::setIgnoreSslErrors(bool ignoreSslErrors)
{
    ignoreSslErrors_ = ignoreSslErrors;
}

}