ObjFW  Diff

Differences From Artifact [3c89198066]:

To Artifact [e5c26eec6f]:


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
99
100
101

102
103
104
105
106
107
108
109
110
111
112
113
114

115
116
117
118
119
120
121
122
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
99
100
101
102
103
104
105
106
107
108
109

110

111
112
113
114
115
116
117







-
+
-
-
+















-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
-
+
+


-
-
+



-
+




-
-
-
+









-
-
+
+

-
+












-
+









-
+












-
+
-







 * Alternatively, it may be distributed under the terms of the GNU General
 * Public License, either version 2 or 3, which can be found in the file
 * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
 * file.
 */

#import "OFObject.h"
#import "OFString.h"
#import "OFSocket.h"

#import "socket.h"
#import "OFString.h"

OF_ASSUME_NONNULL_BEGIN

@class OFURL;
@class OFDictionary OF_GENERIC(KeyType, ObjectType);
@class OFData;
@class OFString;

/** @file */

/**
 * @brief The type of an HTTP request.
 */
typedef enum {
	/** OPTIONS */
	OF_HTTP_REQUEST_METHOD_OPTIONS,
	OFHTTPRequestMethodOptions,
	/** GET */
	OF_HTTP_REQUEST_METHOD_GET,
	OFHTTPRequestMethodGet,
	/** HEAD */
	OF_HTTP_REQUEST_METHOD_HEAD,
	OFHTTPRequestMethodHead,
	/** POST */
	OF_HTTP_REQUEST_METHOD_POST,
	OFHTTPRequestMethodPost,
	/** PUT */
	OF_HTTP_REQUEST_METHOD_PUT,
	OFHTTPRequestMethodPut,
	/** DELETE */
	OF_HTTP_REQUEST_METHOD_DELETE,
	OFHTTPRequestMethodDelete,
	/** TRACE */
	OF_HTTP_REQUEST_METHOD_TRACE,
	OFHTTPRequestMethodTrace,
	/** CONNECT */
	OF_HTTP_REQUEST_METHOD_CONNECT
} of_http_request_method_t;
	OFHTTPRequestMethodConnect
} OFHTTPRequestMethod;

/**
 * @struct of_http_request_protocol_version_t \
 *	   OFHTTPRequest.h ObjFW/OFHTTPRequest.h
 * @struct OFHTTPRequestProtocolVersion OFHTTPRequest.h ObjFW/OFHTTPRequest.h
 *
 * @brief The HTTP version of the HTTP request.
 */
struct OF_BOXABLE of_http_request_protocol_version_t {
typedef struct OF_BOXABLE {
	/** The major of the HTTP version */
	unsigned char major;
	/** The minor of the HTTP version */
	unsigned char minor;
};
typedef struct of_http_request_protocol_version_t
    of_http_request_protocol_version_t;
} OFHTTPRequestProtocolVersion;

/**
 * @class OFHTTPRequest OFHTTPRequest.h ObjFW/OFHTTPRequest.h
 *
 * @brief A class for storing HTTP requests.
 */
@interface OFHTTPRequest: OFObject <OFCopying>
{
	OFURL *_URL;
	of_http_request_method_t _method;
	of_http_request_protocol_version_t _protocolVersion;
	OFHTTPRequestMethod _method;
	OFHTTPRequestProtocolVersion _protocolVersion;
	OFDictionary OF_GENERIC(OFString *, OFString *) *_Nullable _headers;
	of_socket_address_t _remoteAddress;
	OFSocketAddress _remoteAddress;
	bool _hasRemoteAddress;
	OF_RESERVE_IVARS(OFHTTPRequest, 4)
}

/**
 * @brief The URL of the HTTP request.
 */
@property (copy, nonatomic) OFURL *URL;

/**
 * @brief The protocol version of the HTTP request.
 */
@property (nonatomic) of_http_request_protocol_version_t protocolVersion;
@property (nonatomic) OFHTTPRequestProtocolVersion protocolVersion;

/**
 * @brief The protocol version of the HTTP request as a string.
 */
@property (copy, nonatomic) OFString *protocolVersionString;

/**
 * @brief The request method of the HTTP request.
 */
@property (nonatomic) of_http_request_method_t method;
@property (nonatomic) OFHTTPRequestMethod method;

/**
 * @brief The headers for the HTTP request.
 */
@property OF_NULLABLE_PROPERTY (copy, nonatomic)
    OFDictionary OF_GENERIC(OFString *, OFString *) *headers;

/**
 * @brief The remote address from which the request originates.
 *
 * @note The setter creates a copy of the remote address.
 */
@property OF_NULLABLE_PROPERTY (nonatomic)
@property OF_NULLABLE_PROPERTY (nonatomic) const OFSocketAddress *remoteAddress;
    const of_socket_address_t *remoteAddress;

/**
 * @brief Creates a new OFHTTPRequest.
 *
 * @return A new, autoreleased OFHTTPRequest
 */
+ (instancetype)request;
143
144
145
146
147
148
149
150
151


152
153
154
155
156
157
158
159
160

161
162
163
164
165
138
139
140
141
142
143
144


145
146
147
148
149
150
151
152
153


154
155
156
157
158
159







-
-
+
+







-
-
+





#endif
/**
 * @brief Returns a C string describing the specified request method.
 *
 * @param method The request method which should be described as a C string
 * @return A C string describing the specified request method
 */
extern const char *_Nullable of_http_request_method_to_string(
    of_http_request_method_t method);
extern const char *_Nullable OFHTTPRequestMethodName(
    OFHTTPRequestMethod method);

/**
 * @brief Returns the request method for the specified string.
 *
 * @param string The string for which the request method should be returned
 * @return The request method for the specified string
 */
extern of_http_request_method_t of_http_request_method_from_string(
    OFString *string);
extern OFHTTPRequestMethod OFHTTPRequestMethodParseName(OFString *string);
#ifdef __cplusplus
}
#endif

OF_ASSUME_NONNULL_END