defuze.me
Client
|
00001 /************************************************************************** 00002 ** defuze.me Epitech Innovative Project 00003 ** 00004 ** Copyright 2010-2011 00005 ** Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard 00006 ** Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier 00007 ** 00008 ** All rights reserved. 00009 **************************************************************************/ 00010 00011 namespace Network { 00012 class WebFrame; 00013 } 00014 00015 #ifndef WEBFRAME_HPP 00016 #define WEBFRAME_HPP 00017 00018 #include <QByteArray> 00019 #include <QString> 00020 #include <QIODevice> 00021 00022 namespace Network { 00023 const qint64 MaxRead = 1 << 16; 00024 const int MaxFrameSize = 1 << 16; 00025 00031 class WebFrame 00032 { 00033 enum OpCode { 00034 CONTINUATION = 0, 00035 TEXT = 1, 00036 BINARY = 2, 00037 CLOSE = 8, 00038 PING = 9, 00039 PONG = 10 00040 }; 00041 00042 public: 00043 WebFrame(const QByteArray &binary); 00044 WebFrame(const QString &text); 00045 static WebFrame* fromStream(QIODevice* device); 00046 void append(QIODevice* device); 00047 bool complete() const; 00048 const QByteArray& content() const; 00049 QByteArray encoded(); 00050 bool isMultiFrame() const; 00051 int remainingFrames() const; 00052 00053 private: 00054 WebFrame(); 00055 void init(const QByteArray &data, bool masked = true); 00056 void generateMask(); 00057 void applyMask(int until = -1); 00058 00059 bool fin; 00060 bool rsv1, rsv2, rsv3; 00061 OpCode opcode; 00062 bool masked; 00063 qint64 length; 00064 QByteArray mask; 00065 QByteArray payload; 00066 }; 00067 } 00068 00069 #endif // WEBFRAME_HPP