-
Notifications
You must be signed in to change notification settings - Fork 1
/
channel.h
84 lines (73 loc) · 2.45 KB
/
channel.h
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
* libhangish
* Copyright (C) 2015 Tiago Salem Herrmann
* Copyright (C) 2015 Daniele Rogora
*
* This file is part of libhangish.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CHANNEL_H
#define CHANNEL_H
#include <QObject>
#include <QNetworkReply>
#include <QNetworkCookieJar>
#include <QNetworkCookie>
#include <QTimer>
#include "utils.h"
class Channel : public QObject
{
Q_OBJECT
public:
enum ChannelStatus {
ChannelStatusInactive,
ChannelStatusConnecting,
ChannelStatusActive,
ChannelStatusPermanentError
};
Channel(QMap<QString, QNetworkCookie> &cookies, const QString &ppath, const QString &pclid, const QString &pec, const QString &pprop, ClientEntity pms);
void listen();
ChannelStatus status();
private Q_SLOTS:
void longPollRequest();
void onChannelLost();
void networReadyRead();
void networkRequestFinished();
void onFetchNewSidReply();
void slotError(QNetworkReply::NetworkError err);
Q_SIGNALS:
void cookieUpdateNeeded(QNetworkCookie cookie);
void updateClientId(QString newID);
void channelRestored(quint64 lastTimestamp);
void clientBatchUpdate(ClientBatchUpdate &event);
void statusChanged(Channel::ChannelStatus status);
private:
void fetchNewSid();
void parseChannelData(const QString &sreply);
void processCookies(QNetworkReply *reply);
void setStatus(ChannelStatus status);
QNetworkReply *mLongPoolRequest;
QNetworkAccessManager mNetworkAccessManager;
ClientEntity mMyself;
QMap<QString, QNetworkCookie> *mSessionCookies;
QString mSid, mClid, mEc, mPath, mProp, mHeaderClient, mEmail, mGSessionId;
quint64 mLastPushReceived;
int mPendingParcelSize;
QByteArray mPendingParcelBuffer;
QTimer *mCheckChannelTimer;
bool mFetchingSid;
ChannelStatus mStatus;
bool mFirstTime;
};
#endif // CHANNEL_H