summaryrefslogtreecommitdiff
path: root/src/components/qt_hmi/References/Work/fordsdlcore/QtWebsocket/QWsServer.h
blob: f37dd4b5b21b84f951505c9ecbc8a06d70f905cc (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#ifndef QWSSERVER_H
#define QWSSERVER_H

#include <QTcpServer>
#include <QTcpSocket>
#include <QNetworkProxy>
#include <QString>
#include <QStringList>
#include <QMap>
#include <QQueue>

#include "QWsSocket.h"

class QWsServer : public QObject {
  Q_OBJECT

 public:
  // ctor
  QWsServer(QObject* parent = 0);
  // dtor
  virtual ~QWsServer();

  // public functions
  void close();
  QString errorString();
  bool hasPendingConnections();
  bool isListening();
  bool listen(const QHostAddress& address = QHostAddress::Any,
              quint16 port = 0);
  int maxPendingConnections();
  virtual QWsSocket* nextPendingConnection();
  QNetworkProxy proxy();
  QHostAddress serverAddress();
  QAbstractSocket::SocketError serverError();
  quint16 serverPort();
  void setMaxPendingConnections(int numConnections);
  void setProxy(const QNetworkProxy& networkProxy);
  bool setSocketDescriptor(int socketDescriptor);
  int socketDescriptor();
  bool waitForNewConnection(int msec = 0, bool* timedOut = 0);

signals:
  void newConnection();

 protected:
  // protected functions
  void addPendingConnection(QWsSocket* socket);
  virtual void incomingConnection(int socketDescriptor);

 private slots:
  // private slots
  void newTcpConnection();
  void closeTcpConnection();
  void dataReceived();

 private:
  // private attributes
  QTcpServer* tcpServer;
  QQueue<QWsSocket*> pendingConnections;
  QMap<const QTcpSocket*, QStringList> headerBuffer;

 public:
  // public static functions
  static QByteArray serializeInt(quint32 number, quint8 nbBytes = 4);
  static QString computeAcceptV0(QString key1, QString key2, QString thirdPart);
  static QString computeAcceptV4(QString key);
  static QString generateNonce();
  static QString composeOpeningHandshakeResponseV0(QString accept,
                                                   QString origin,
                                                   QString hostAddress,
                                                   QString hostPort,
                                                   QString resourceName,
                                                   QString protocol = "");
  static QString composeOpeningHandshakeResponseV4(QString accept,
                                                   QString nonce,
                                                   QString protocol = "",
                                                   QString extensions = "");
  static QString composeOpeningHandshakeResponseV6(QString accept,
                                                   QString protocol = "",
                                                   QString extensions = "");
  static QString composeBadRequestResponse(
      QList<EWebsocketVersion> versions = QList<EWebsocketVersion>());

  // public static vars
  static const QString regExpResourceNameStr;
  static const QString regExpHostStr;
  static const QString regExpKeyStr;
  static const QString regExpKey1Str;
  static const QString regExpKey2Str;
  static const QString regExpKey3Str;
  static const QString regExpVersionStr;
  static const QString regExpOriginStr;
  static const QString regExpOrigin2Str;
  static const QString regExpProtocolStr;
  static const QString regExpExtensionsStr;
};

#endif  // QWSSERVER_H