︙ | | | ︙ | |
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
@interface OFHTTPServerConnection: OFObject <OFTCPSocketDelegate>
{
@public
OFStreamSocket *_socket;
OFHTTPServer *_server;
OFTimer *_timer;
enum {
AWAITING_PROLOG,
PARSING_HEADERS,
SEND_RESPONSE
} _state;
uint8_t _HTTPMinorVersion;
OFHTTPRequestMethod _method;
OFString *_host, *_path;
uint16_t _port;
OFMutableDictionary *_headers;
size_t _contentLength;
|
|
|
|
|
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
@interface OFHTTPServerConnection: OFObject <OFTCPSocketDelegate>
{
@public
OFStreamSocket *_socket;
OFHTTPServer *_server;
OFTimer *_timer;
enum {
StateAwaitingProlog,
StateParsingHeaders,
StateSendResponse
} _state;
uint8_t _HTTPMinorVersion;
OFHTTPRequestMethod _method;
OFString *_host, *_path;
uint16_t _port;
OFMutableDictionary *_headers;
size_t _contentLength;
|
︙ | | | ︙ | |
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
|
_server = [server retain];
_timer = [[OFTimer
scheduledTimerWithTimeInterval: 10
target: _socket
selector: @selector(
cancelAsyncRequests)
repeats: false] retain];
_state = AWAITING_PROLOG;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
|
|
|
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
|
_server = [server retain];
_timer = [[OFTimer
scheduledTimerWithTimeInterval: 10
target: _socket
selector: @selector(
cancelAsyncRequests)
repeats: false] retain];
_state = StateAwaitingProlog;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
|
︙ | | | ︙ | |
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
|
exception: (id)exception
{
if (line == nil || exception != nil)
return false;
@try {
switch (_state) {
case AWAITING_PROLOG:
return [self parseProlog: line];
case PARSING_HEADERS:
return [self parseHeaders: line];
default:
return false;
}
} @catch (OFWriteFailedException *e) {
return false;
}
|
|
|
|
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
|
exception: (id)exception
{
if (line == nil || exception != nil)
return false;
@try {
switch (_state) {
case StateAwaitingProlog:
return [self parseProlog: line];
case StateParsingHeaders:
return [self parseHeaders: line];
default:
return false;
}
} @catch (OFWriteFailedException *e) {
return false;
}
|
︙ | | | ︙ | |
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
|
[path makeImmutable];
if (![path hasPrefix: @"/"])
return [self sendErrorAndClose: 400];
_headers = [[OFMutableDictionary alloc] init];
_path = [path copy];
_state = PARSING_HEADERS;
return true;
}
- (bool)parseHeaders: (OFString *)line
{
OFString *key, *value, *old;
|
|
|
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
|
[path makeImmutable];
if (![path hasPrefix: @"/"])
return [self sendErrorAndClose: 400];
_headers = [[OFMutableDictionary alloc] init];
_path = [path copy];
_state = StateParsingHeaders;
return true;
}
- (bool)parseHeaders: (OFString *)line
{
OFString *key, *value, *old;
|
︙ | | | ︙ | |
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
|
contentLength: contentLength];
[_timer invalidate];
[_timer release];
_timer = nil;
}
_state = SEND_RESPONSE;
[self createResponse];
return false;
}
pos = [line rangeOfString: @":"].location;
if (pos == OFNotFound)
|
|
|
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
|
contentLength: contentLength];
[_timer invalidate];
[_timer release];
_timer = nil;
}
_state = StateSendResponse;
[self createResponse];
return false;
}
pos = [line rangeOfString: @":"].location;
if (pos == OFNotFound)
|
︙ | | | ︙ | |