︙ | | | ︙ | |
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
@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;
|
|
|
|
|
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
@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;
|
︙ | | | ︙ | |
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
|
_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;
}
|
|
|
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
|
_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;
}
|
︙ | | | ︙ | |
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
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;
}
|
|
|
|
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
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;
}
|
︙ | | | ︙ | |
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
|
[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;
|
|
|
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
|
[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;
|
︙ | | | ︙ | |
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
|
contentLength: contentLength];
[_timer invalidate];
[_timer release];
_timer = nil;
}
_state = StateSendResponse;
[self createResponse];
return false;
}
pos = [line rangeOfString: @":"].location;
if (pos == OFNotFound)
|
|
|
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
|
contentLength: contentLength];
[_timer invalidate];
[_timer release];
_timer = nil;
}
_state = stateSendResponse;
[self createResponse];
return false;
}
pos = [line rangeOfString: @":"].location;
if (pos == OFNotFound)
|
︙ | | | ︙ | |