ObjFW  Check-in [16d3902e6d]

Overview
Comment:OFHTTPResponse: Make "string" a method

This should not be a property as it reads from the stream and therefore
mutates it.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 16d3902e6d4d98a64fd9ce92a5c44f57763c4ff9695a817a00b1a406d75c97e9
User & Date: js on 2022-06-05 10:43:20
Other Links: manifest | tags
Context
2022-06-05
12:34
generators/unicode: Fix two inverted lines check-in: 4a5d37fc3b user: js tags: trunk
10:43
OFHTTPResponse: Make "string" a method check-in: 16d3902e6d user: js tags: trunk
09:44
OFHTTPRequest: Remove init without URL check-in: a2872b719a user: js tags: trunk
Changes

Modified src/OFHTTPResponse.h from [d907091625] to [b3d8087036].

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
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







-
+










-
+




-
+




-
+




-
+





-
+
+
+
+

-
+


-
+


-
+

-
+








@class OFDictionary OF_GENERIC(KeyType, ObjectType);
@class OFArray OF_GENERIC(ObjectType);

/**
 * @class OFHTTPResponse OFHTTPResponse.h ObjFW/OFHTTPResponse.h
 *
 * @brief A class for representing an HTTP request reply as a stream.
 * @brief A class for representing an HTTP request response as a stream.
 */
@interface OFHTTPResponse: OFStream
{
	OFHTTPRequestProtocolVersion _protocolVersion;
	short _statusCode;
	OFDictionary OF_GENERIC(OFString *, OFString *) *_headers;
	OF_RESERVE_IVARS(OFHTTPResponse, 4)
}

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

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

/**
 * @brief The status code of the reply to the HTTP request.
 * @brief The status code of the response to the HTTP request.
 */
@property (nonatomic) short statusCode;

/**
 * @brief The headers of the reply to the HTTP request.
 * @brief The headers of the response to the HTTP request.
 */
@property (copy, nonatomic) OFDictionary OF_GENERIC(OFString *, OFString *)
    *headers;

/**
 * @brief The reply as a string, trying to detect the encoding.
 * @brief Read the response as a string, trying to detect the encoding and
 *	  falling back to the specified encoding if not detectable.
 *
 * @return The response as a string
 */
@property (readonly, nonatomic) OFString *string;
- (OFString *)readString;

/**
 * @brief Returns the reply as a string, trying to detect the encoding and
 * @brief Rread the response as a string, trying to detect the encoding and
 *	  falling back to the specified encoding if not detectable.
 *
 * @return The reply as a string
 * @return The response as a string
 */
- (OFString *)stringWithEncoding: (OFStringEncoding)encoding;
- (OFString *)readStringWithEncoding: (OFStringEncoding)encoding;
@end

#ifdef __cplusplus
extern "C" {
#endif
/**
 * @brief Returns a description string for the specified HTTP status code.

Modified src/OFHTTPResponse.m from [0f4a35ed7a] to [17a72a5d36].

292
293
294
295
296
297
298
299

300
301

302
303
304

305
306
307
308
309
310
311
292
293
294
295
296
297
298

299
300

301
302
303

304
305
306
307
308
309
310
311







-
+

-
+


-
+







- (OFString *)protocolVersionString
{
	return [OFString stringWithFormat: @"%hhu.%hhu",
					   _protocolVersion.major,
					   _protocolVersion.minor];
}

- (OFString *)string
- (OFString *)readString
{
	return [self stringWithEncoding: OFStringEncodingAutodetect];
	return [self readStringWithEncoding: OFStringEncodingAutodetect];
}

- (OFString *)stringWithEncoding: (OFStringEncoding)encoding
- (OFString *)readStringWithEncoding: (OFStringEncoding)encoding
{
	void *pool = objc_autoreleasePoolPush();
	OFString *contentType, *contentLengthString, *ret;
	OFData *data;

	if (encoding == OFStringEncodingAutodetect &&
	    (contentType = [_headers objectForKey: @"Content-Type"]) != nil)