︙ | | | ︙ | |
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
|
} _state;
uint8_t _HTTPMinorVersion;
of_http_request_method_t _method;
OFString *_host, *_path;
uint16_t _port;
OFMutableDictionary *_headers;
size_t _contentLength;
OFDataArray *_entity;
}
- initWithSocket: (OFTCPSocket*)socket
server: (OFHTTPServer*)server;
- (bool)socket: (OFTCPSocket*)socket
didReadLine: (OFString*)line
exception: (OFException*)exception;
|
|
|
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
|
} _state;
uint8_t _HTTPMinorVersion;
of_http_request_method_t _method;
OFString *_host, *_path;
uint16_t _port;
OFMutableDictionary *_headers;
size_t _contentLength;
OFDataArray *_body;
}
- initWithSocket: (OFTCPSocket*)socket
server: (OFHTTPServer*)server;
- (bool)socket: (OFTCPSocket*)socket
didReadLine: (OFString*)line
exception: (OFException*)exception;
|
︙ | | | ︙ | |
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
|
[_timer invalidate];
[_timer release];
[_host release];
[_path release];
[_headers release];
[_entity release];
[super dealloc];
}
- (bool)socket: (OFTCPSocket*)socket
didReadLine: (OFString*)line
exception: (OFException*)exception
|
|
|
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
|
[_timer invalidate];
[_timer release];
[_host release];
[_path release];
[_headers release];
[_body release];
[super dealloc];
}
- (bool)socket: (OFTCPSocket*)socket
didReadLine: (OFString*)line
exception: (OFException*)exception
|
︙ | | | ︙ | |
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
|
return [self sendErrorAndClose: 400];
}
if (contentLength > 0) {
char *buffer;
buffer = [self allocMemoryWithSize: BUFFER_SIZE];
_entity = [[OFDataArray alloc] init];
[_socket asyncReadIntoBuffer: buffer
length: BUFFER_SIZE
target: self
selector: @selector(socket:
didReadIntoBuffer:
length:exception:)];
|
|
|
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
|
return [self sendErrorAndClose: 400];
}
if (contentLength > 0) {
char *buffer;
buffer = [self allocMemoryWithSize: BUFFER_SIZE];
_body = [[OFDataArray alloc] init];
[_socket asyncReadIntoBuffer: buffer
length: BUFFER_SIZE
target: self
selector: @selector(socket:
didReadIntoBuffer:
length:exception:)];
|
︙ | | | ︙ | |
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
|
didReadIntoBuffer: (char*)buffer
length: (size_t)length
exception: (OFException*)exception
{
if ([socket isAtEndOfStream] || exception != nil)
return false;
[_entity addItems: buffer
count: length];
if ([_entity count] >= _contentLength) {
/*
* Manually free the buffer here. While this is not required
* now as the async read is the only thing referencing self and
* the buffer is allocated on self, it is required once
* Connection: keep-alive is implemented.
*/
[self freeMemory: buffer];
|
|
|
|
|
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
|
didReadIntoBuffer: (char*)buffer
length: (size_t)length
exception: (OFException*)exception
{
if ([socket isAtEndOfStream] || exception != nil)
return false;
[_body addItems: buffer
count: length];
if ([_body count] >= _contentLength) {
/*
* Manually free the buffer here. While this is not required
* now as the async read is the only thing referencing self and
* the buffer is allocated on self, it is required once
* Connection: keep-alive is implemented.
*/
[self freeMemory: buffer];
|
︙ | | | ︙ | |
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
|
[URL setPath: _path];
request = [OFHTTPRequest requestWithURL: URL];
[request setMethod: _method];
[request setProtocolVersion:
(of_http_request_protocol_version_t){ 1, _HTTPMinorVersion }];
[request setHeaders: _headers];
[request setEntity: _entity];
[request setRemoteAddress: [_socket remoteAddress]];
response = [[[OFHTTPServerResponse alloc]
initWithSocket: _socket
server: _server] autorelease];
[[_server delegate] server: _server
|
|
|
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
|
[URL setPath: _path];
request = [OFHTTPRequest requestWithURL: URL];
[request setMethod: _method];
[request setProtocolVersion:
(of_http_request_protocol_version_t){ 1, _HTTPMinorVersion }];
[request setHeaders: _headers];
[request setBody: _body];
[request setRemoteAddress: [_socket remoteAddress]];
response = [[[OFHTTPServerResponse alloc]
initWithSocket: _socket
server: _server] autorelease];
[[_server delegate] server: _server
|
︙ | | | ︙ | |