summaryrefslogtreecommitdiffhomepage
path: root/NetEx/HttpRequest.h
blob: 10bfc773fd9895acdaa65deff0bd68ce3894c2d3 (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
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.
*/

#ifndef HttpRequest_h
#define HttpRequest_h

#include "HttpParam.h"
#include "List.h"
#include "NetAddr.h"


class HttpRequest
{
public:
    static const char* TYPENAME() { return "HttpRequest"; }

    enum METHOD {
        HTTP_OPTIONS,
        HTTP_GET,
        HTTP_HEAD,
        HTTP_POST,
        HTTP_PUT,
        HTTP_DELETE,
        HTTP_TRACE,
        HTTP_CONNECT
    };

    HttpRequest(const char* request=nullptr);
    ~HttpRequest();

    operator Text();

    void              ParseRequest(Text request);
    void              ParseCookie(const char* param);

    int               Method()       const { return method;        }
    Text              URI()          const { return uri;           }
    Text              Content()      const { return content;       }
    Text              RequestLine()  const { return request_line;  }

    List<HttpParam>&  GetQuery()           { return query;         }
    List<HttpParam>&  GetHeaders()         { return headers;       }
    List<HttpParam>&  GetCookies()         { return cookies;       }

    NetAddr           GetClientAddr()            const { return client_addr; }
    void              SetClientAddr(const NetAddr& a)  { client_addr = a;    }

    Text              GetParam(const char* name);

    Text              GetHeader(const char* name);
    void              SetHeader(const char* name, const char* value);
    void              AddHeader(const char* name, const char* value);
    Text              GetCookie(const char* name);
    void              SetCookie(const char* name, const char* value);
    void              AddCookie(const char* name, const char* value);

    Text              DecodeParam(const char* value);
    static Text       EncodeParam(const char* value);

private:
    int               method;
    Text              uri;
    Text              content;
    Text              request_line;
    NetAddr           client_addr;

    List<HttpParam>   query;
    List<HttpParam>   headers;
    List<HttpParam>   cookies;
};


#endif  // HttpRequest_h