Fixed headers not being parsed properly when not received all at once

This commit is contained in:
Pierre-Olivier Latour
2013-03-28 13:09:24 -07:00
parent e00f4e1cdf
commit bcd9654330
+7 -2
View File
@@ -95,17 +95,22 @@ static dispatch_queue_t _formatterQueue = NULL;
- (void)_readHeadersWithCompletionBlock:(ReadHeadersCompletionBlock)block { - (void)_readHeadersWithCompletionBlock:(ReadHeadersCompletionBlock)block {
DCHECK(_requestMessage); DCHECK(_requestMessage);
NSMutableData* data = [NSMutableData dataWithCapacity:kHeadersReadBuffer];
[self _readBufferWithLength:SIZE_T_MAX completionBlock:^(dispatch_data_t buffer) { [self _readBufferWithLength:SIZE_T_MAX completionBlock:^(dispatch_data_t buffer) {
if (buffer) { if (buffer) {
NSMutableData* data = [NSMutableData dataWithCapacity:kHeadersReadBuffer];
dispatch_data_apply(buffer, ^bool(dispatch_data_t region, size_t offset, const void* buffer, size_t size) { dispatch_data_apply(buffer, ^bool(dispatch_data_t region, size_t offset, const void* buffer, size_t size) {
[data appendBytes:buffer length:size]; [data appendBytes:buffer length:size];
return true; return true;
}); });
NSRange range = [data rangeOfData:_separatorData options:0 range:NSMakeRange(0, data.length)]; NSRange range = [data rangeOfData:_separatorData options:0 range:NSMakeRange(0, data.length)];
if (range.location == NSNotFound) { if (range.location == NSNotFound) {
[self _readHeadersWithCompletionBlock:block]; if (CFHTTPMessageAppendBytes(_requestMessage, data.bytes, data.length)) {
[self _readHeadersWithCompletionBlock:block];
} else {
LOG_ERROR(@"Failed appending request headers data from socket %i", _socket);
block(nil);
}
} else { } else {
NSUInteger length = range.location + range.length; NSUInteger length = range.location + range.length;
if (CFHTTPMessageAppendBytes(_requestMessage, data.bytes, length)) { if (CFHTTPMessageAppendBytes(_requestMessage, data.bytes, length)) {