Added missing functionality after a comparison between QWebSocket and QTcpSocket...
[contrib/qtwebsockets.git] / src / qwebsocket.h
1 /**
2  * @file websocket.h
3  * @brief Defines the WebSocket class.
4  *
5  * \note Currently, only V13 (RFC6455) is supported.
6  * \note Both text and binary websockets are supported.
7  * \note The secure version (wss) is currently not implemented.
8  * @author Kurt Pattyn (pattyn.kurt@gmail.com)
9  */
10
11 #ifndef QWEBSOCKET_H
12 #define QWEBSOCKET_H
13
14 #include <QUrl>
15 #include <QAbstractSocket>
16 #include <QHostAddress>
17 #ifndef QT_NO_NETWORKPROXY
18 #include <QNetworkProxy>
19 #endif
20 #include <QTime>
21 #include "qwebsocketsglobal.h"
22 #include "qwebsocketprotocol.h"
23
24 QT_BEGIN_NAMESPACE
25
26 class QTcpSocket;
27 class QWebSocketPrivate;
28
29 class Q_WEBSOCKETS_EXPORT QWebSocket:public QObject
30 {
31         Q_OBJECT
32
33 public:
34         explicit QWebSocket(QString origin = QString(), QWebSocketProtocol::Version version = QWebSocketProtocol::V_LATEST, QObject *parent = 0);
35         virtual ~QWebSocket();
36
37         void abort();
38         QAbstractSocket::SocketError error() const;
39         QString errorString() const;
40         bool flush();
41         bool isValid();
42         QHostAddress localAddress() const;
43         quint16 localPort() const;
44         QAbstractSocket::PauseModes pauseMode() const;
45         QHostAddress peerAddress() const;
46         QString peerName() const;
47         quint16 peerPort() const;
48 #ifndef QT_NO_NETWORKPROXY
49         QNetworkProxy proxy() const;
50         void setProxy(const QNetworkProxy &networkProxy);
51 #endif
52         qint64 readBufferSize() const;
53         void setReadBufferSize(qint64 size);
54
55         void resume();
56         void setPauseMode(QAbstractSocket::PauseModes pauseMode);
57
58         void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
59         QVariant socketOption(QAbstractSocket::SocketOption option);
60         QAbstractSocket::SocketState state() const;
61
62         bool waitForConnected(int msecs = 30000);
63         bool waitForDisconnected(int msecs = 30000);
64
65         QWebSocketProtocol::Version version();
66         QString resourceName();
67         QUrl requestUrl();
68         QString origin();
69         QString protocol();
70         QString extension();
71
72         qint64 write(const char *message);              //send data as text
73         qint64 write(const char *message, qint64 maxSize);              //send data as text
74         qint64 write(const QString &message);   //send data as text
75         qint64 write(const QByteArray &data);   //send data as binary
76
77 public Q_SLOTS:
78         virtual void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CC_NORMAL, QString reason = QString());
79         virtual void open(const QUrl &url, bool mask = true);
80         void ping();
81
82 Q_SIGNALS:
83         void aboutToClose();
84         void connected();
85         void disconnected();
86         void stateChanged(QAbstractSocket::SocketState state);
87 #ifndef QT_NO_NETWORKPROXY
88         void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *pAuthenticator);
89 #endif
90         void readChannelFinished();
91         void textFrameReceived(QString frame, bool isLastFrame);
92         void binaryFrameReceived(QByteArray frame, bool isLastFrame);
93         void textMessageReceived(QString message);
94         void binaryMessageReceived(QByteArray message);
95         void error(QAbstractSocket::SocketError error);
96         void pong(quint64 elapsedTime);
97
98 private:
99         Q_DISABLE_COPY(QWebSocket)
100         QWebSocket(QTcpSocket *pTcpSocket, QWebSocketProtocol::Version version, QObject *parent = 0);
101         QWebSocketPrivate * const d_ptr;
102
103         friend class QWebSocketPrivate;
104 };
105
106 QT_END_NAMESPACE
107
108 #endif // QWEBSOCKET_H