@@ -54,11 +54,10 @@ @interface OFHTTPClientRequestHandler: OFObject { @public OFHTTPClient *_client; OFHTTPRequest *_request; - OFString *_requestString; unsigned int _redirects; id _context; bool _firstLine; OFString *_version; int _status; @@ -277,11 +276,10 @@ - (void)dealloc { [_client release]; [_request release]; - [_requestString release]; [_context release]; [_version release]; [_serverHeaders release]; [super dealloc]; @@ -555,51 +553,48 @@ } return ret; } -- (size_t)stream: (OF_KINDOF(OFStream *))sock - didWriteBuffer: (const void **)request - length: (size_t)length - exception: (id)exception +- (OFData *)stream: (OF_KINDOF(OFStream *))stream + didWriteData: (OFData *)data + bytesWritten: (size_t)bytesWritten + exception: (id)exception { if (exception != nil) { if ([exception isKindOfClass: [OFWriteFailedException class]] && ([exception errNo] == ECONNRESET || [exception errNo] == EPIPE)) { /* In case a keep-alive connection timed out */ [self closeAndReconnect]; - return 0; + return nil; } [self raiseException: exception]; - return 0; + return nil; } _firstLine = true; - [_requestString release]; - _requestString = nil; - if ([[_request headers] objectForKey: @"Content-Length"] != nil) { - [sock setDelegate: nil]; + [stream setDelegate: nil]; OFStream *requestBody = [[[OFHTTPClientRequestBodyStream alloc] initWithHandler: self - socket: sock] autorelease]; + socket: stream] autorelease]; if ([_client->_delegate respondsToSelector: @selector(client:wantsRequestBody:request:context:)]) [_client->_delegate client: _client wantsRequestBody: requestBody request: _request context: _context]; } else - [sock asyncReadLine]; + [stream asyncReadLine]; - return 0; + return nil; } - (void)handleSocket: (OFTCPSocket *)sock { /* @@ -610,15 +605,16 @@ * We do not use the socket's write buffer in case we need to resend * the entire request (e.g. in case a keep-alive connection timed out). */ @try { - [_requestString release]; - _requestString = [constructRequestString(_request) retain]; + OFString *requestString = constructRequestString(_request); + OFData *requestData = [OFData + dataWithItems: [requestString UTF8String] + count: [requestString UTF8StringLength]]; - [sock asyncWriteBuffer: [_requestString UTF8String] - length: [_requestString UTF8StringLength]]; + [sock asyncWriteData: requestData]; } @catch (id e) { [self raiseException: e]; return; } }