defuze.me  Client
webframe.hpp
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