]> rtime.felk.cvut.cz Git - hydro.git/blobdiff - app-bohyn/src/http.h
Added monitoring web system. Minor changes in regulator and in control.
[hydro.git] / app-bohyn / src / http.h
diff --git a/app-bohyn/src/http.h b/app-bohyn/src/http.h
new file mode 100644 (file)
index 0000000..a284ded
--- /dev/null
@@ -0,0 +1,118 @@
+
+# ifndef _HTTP_H
+# define _HTTP_H
+
+#include <stdlib.h>
+
+#include <QSharedData>
+#include <QSharedDataPointer>
+#include <QVariant>
+#include <QUrl>
+#include <QString>
+#include <QByteArray>
+#include <QMap>
+#include <QRegExp>
+
+#include <fcgi_config.h>
+#include <fcgi_stdio.h>
+
+#include "utils.h"
+
+class UploadedFile : public QVariant {
+  private:
+    struct Data : public QSharedData {
+        bool null;
+        QString file_name;
+        QString content_type;
+        int file_size;
+        QByteArray content;
+        Data(): null(true), file_name(""), content_type(""), file_size(0), content("") {};
+    };
+    QSharedDataPointer<Data> d;
+
+    class DUMMY_TYPE {};
+    
+    static const UploadedFile& sharedNull();
+    
+    UploadedFile(DUMMY_TYPE) { d = new Data; };
+
+  public:
+    UploadedFile();
+
+    UploadedFile(QString _file_name, QString _content_type, int _file_size, const QByteArray &_content);
+
+    QString fileName() const { return d->file_name; }
+
+    QString contentType() const { return d->content_type; }
+
+    int size() const { return d->file_size; }
+
+    const QByteArray &contentRef() const { return d->content; }
+
+    bool isNull() { return d->null; }
+};
+Q_DECLARE_METATYPE(UploadedFile)
+
+
+typedef QMap<QString, QString> QueryDict;
+typedef QMap<QString, UploadedFile> FilesDict;
+
+class HttpRedirect {
+  private:
+    QString url;
+
+  public:
+    HttpRedirect(QString _url): url(_url) {}
+    
+    QString getUrl() const {
+        return url;
+    }
+};
+
+class HttpRequest {
+  private:
+    QString _path;
+    QString _method;
+    QueryDict post_data;
+    QueryDict get_data;
+    FilesDict files_data;
+
+    void parsePostData();
+
+    void parseMultipartData(int content_length, QString content_type);
+
+    void parseContentPart(QByteArray &content_part);
+
+    void parseFileContent(QString field_name, QString file_name, QByteArray &content_part, int start_pos);
+
+    void parseFieldContent(QString field_name, QByteArray &content_part, int start_pos);
+
+  public:
+    HttpRequest();
+
+    QString path() const {
+        return this->_path;
+    }
+
+    QString method() const {
+        return this->_method;
+    }
+
+    const QueryDict &GET() const {
+        return this->get_data;
+    }
+
+    const QueryDict &POST() const {
+        return this->post_data;
+    }
+
+    const FilesDict &FILES() const {
+        return this->files_data;
+    }
+};
+
+// class HttpResponse() {
+//     
+// };
+
+# endif