@@ -55,21 +55,19 @@ { @public OFHTTPClient *_client; OFHTTPRequest *_request; unsigned int _redirects; - id _context; bool _firstLine; OFString *_version; int _status; OFMutableDictionary OF_GENERIC(OFString *, OFString *) *_serverHeaders; } - (instancetype)initWithClient: (OFHTTPClient *)client request: (OFHTTPRequest *)request - redirects: (unsigned int)redirects - context: (id)context; + redirects: (unsigned int)redirects; - (void)start; - (void)closeAndReconnect; @end @interface OFHTTPClientRequestBodyStream: OFStream @@ -103,12 +101,11 @@ OFHTTPResponse *_response; } - (instancetype)initWithClient: (OFHTTPClient *)client; - (OFHTTPResponse *)performRequest: (OFHTTPRequest *)request - redirects: (unsigned int)redirects - context: (id)context; + redirects: (unsigned int)redirects; @end static OFString * constructRequestString(OFHTTPRequest *request) { @@ -254,19 +251,17 @@ @implementation OFHTTPClientRequestHandler - (instancetype)initWithClient: (OFHTTPClient *)client request: (OFHTTPRequest *)request redirects: (unsigned int)redirects - context: (id)context { self = [super init]; @try { _client = [client retain]; _request = [request retain]; _redirects = redirects; - _context = [context retain]; _serverHeaders = [[OFMutableDictionary alloc] init]; } @catch (id e) { [self release]; @throw e; } @@ -276,11 +271,10 @@ - (void)dealloc { [_client release]; [_request release]; - [_context release]; [_version release]; [_serverHeaders release]; [super dealloc]; } @@ -289,13 +283,12 @@ { [_client close]; _client->_inProgress = false; [_client->_delegate client: _client - didEncounterException: exception - request: _request - context: _context]; + didFailWithException: exception + request: _request]; } - (void)createResponseWithSocketOrThrow: (OFTCPSocket *)sock { OFURL *URL = [_request URL]; @@ -347,17 +340,16 @@ newURL = [OFURL URLWithString: location relativeToURL: URL]; if ([_client->_delegate respondsToSelector: @selector(client: - shouldFollowRedirect:statusCode:request:response:context:)]) + shouldFollowRedirect:statusCode:request:response:)]) follow = [_client->_delegate client: _client shouldFollowRedirect: newURL statusCode: _status request: _request - response: response - context: _context]; + response: response]; else follow = defaultShouldFollow( [_request method], _status); if (follow) { @@ -399,12 +391,11 @@ [newRequest setHeaders: newHeaders]; _client->_inProgress = false; [_client asyncPerformRequest: newRequest - redirects: _redirects - 1 - context: _context]; + redirects: _redirects - 1]; return; } } _client->_inProgress = false; @@ -413,15 +404,14 @@ @throw [OFHTTPRequestFailedException exceptionWithRequest: _request response: response]; [_client->_delegate performSelector: @selector(client:didPerformRequest: - response:context:) + response:) withObject: _client withObject: _request withObject: response - withObject: _context afterDelay: 0]; } - (void)createResponseWithSocket: (OFTCPSocket *)sock { @@ -470,16 +460,15 @@ if ([line length] == 0) { [_serverHeaders makeImmutable]; if ([_client->_delegate respondsToSelector: @selector(client: - didReceiveHeaders:statusCode:request:context:)]) + didReceiveHeaders:statusCode:request:)]) [_client->_delegate client: _client didReceiveHeaders: _serverHeaders statusCode: _status - request: _request - context: _context]; + request: _request]; [sock setDelegate: nil]; [self performSelector: @selector(createResponseWithSocket:) withObject: sock @@ -582,16 +571,14 @@ OFStream *requestBody = [[[OFHTTPClientRequestBodyStream alloc] initWithHandler: self socket: stream] autorelease]; if ([_client->_delegate respondsToSelector: - @selector(client:wantsRequestBody:request:context:)]) + @selector(client:wantsRequestBody:request:)]) [_client->_delegate client: _client wantsRequestBody: requestBody - request: _request - context: _context]; - + request: _request]; } else [stream asyncReadLine]; return nil; } @@ -626,15 +613,14 @@ [self raiseException: exception]; return; } if ([_client->_delegate respondsToSelector: - @selector(client:didCreateSocket:request:context:)]) + @selector(client:didCreateSocket:request:)]) [_client->_delegate client: _client didCreateSocket: sock - request: _request - context: _context]; + request: _request]; [self performSelector: @selector(handleSocket:) withObject: sock afterDelay: 0]; } @@ -662,10 +648,12 @@ [_client->_lastURL release]; _client->_lastURL = nil; [_client->_lastResponse release]; _client->_lastResponse = nil; + + [sock setDelegate: self]; [self performSelector: @selector(handleSocket:) withObject: sock afterDelay: 0]; } else @@ -1041,41 +1029,36 @@ [super dealloc]; } - (OFHTTPResponse *)performRequest: (OFHTTPRequest *)request redirects: (unsigned int)redirects - context: (id)context { [_client asyncPerformRequest: request - redirects: redirects - context: context]; + redirects: redirects]; [[OFRunLoop currentRunLoop] run]; return _response; } - (void)client: (OFHTTPClient *)client didPerformRequest: (OFHTTPRequest *)request response: (OFHTTPResponse *)response - context: (id)context { [[OFRunLoop currentRunLoop] stop]; [_response release]; _response = [response retain]; [_delegate client: client didPerformRequest: request - response: response - context: context]; + response: response]; } -- (void)client: (OFHTTPClient *)client - didEncounterException: (id)exception - request: (OFHTTPRequest *)request - context: (id)context +- (void)client: (OFHTTPClient *)client + didFailWithException: (id)exception + request: (OFHTTPRequest *)request { /* * Restore the delegate - we're giving up, but not reaching the release * of the autorelease pool that contains us, so resetting it via * -[dealloc] might be too late. @@ -1086,63 +1069,55 @@ } - (void)client: (OFHTTPClient *)client didCreateSocket: (OF_KINDOF(OFTCPSocket *))sock request: (OFHTTPRequest *)request - context: (id)context { if ([_delegate respondsToSelector: - @selector(client:didCreateSocket:request:context:)]) + @selector(client:didCreateSocket:request:)]) [_delegate client: client didCreateSocket: sock - request: request - context: context]; + request: request]; } - (void)client: (OFHTTPClient *)client wantsRequestBody: (OFStream *)body request: (OFHTTPRequest *)request - context: (id)context { if ([_delegate respondsToSelector: - @selector(client:wantsRequestBody:request:context:)]) + @selector(client:wantsRequestBody:request:)]) [_delegate client: client wantsRequestBody: body - request: request - context: context]; + request: request]; } - (void)client: (OFHTTPClient *)client didReceiveHeaders: (OFDictionary OF_GENERIC(OFString *, OFString *) *)headers statusCode: (int)statusCode request: (OFHTTPRequest *)request - context: (id)context { if ([_delegate respondsToSelector: - @selector(client:didReceiveHeaders:statusCode:request:context:)]) + @selector(client:didReceiveHeaders:statusCode:request:)]) [_delegate client: client didReceiveHeaders: headers statusCode: statusCode - request: request - context: context]; + request: request]; } - (bool)client: (OFHTTPClient *)client shouldFollowRedirect: (OFURL *)URL statusCode: (int)statusCode request: (OFHTTPRequest *)request response: (OFHTTPResponse *)response - context: (id)context { if ([_delegate respondsToSelector: @selector(client: - shouldFollowRedirect:statusCode:request:response:context:)]) + shouldFollowRedirect:statusCode:request:response:)]) return [_delegate client: client shouldFollowRedirect: URL statusCode: statusCode request: request - response: response - context: context]; + response: response]; else return defaultShouldFollow([request method], statusCode); } @end @@ -1163,60 +1138,38 @@ } - (OFHTTPResponse *)performRequest: (OFHTTPRequest *)request { return [self performRequest: request - redirects: REDIRECTS_DEFAULT - context: nil]; + redirects: REDIRECTS_DEFAULT]; } - (OFHTTPResponse *)performRequest: (OFHTTPRequest *)request redirects: (unsigned int)redirects { - return [self performRequest: request - redirects: redirects - context: nil]; -} - -- (OFHTTPResponse *)performRequest: (OFHTTPRequest *)request - context: (id)context -{ - return [self performRequest: request - redirects: REDIRECTS_DEFAULT - context: context]; -} - -- (OFHTTPResponse *)performRequest: (OFHTTPRequest *)request - redirects: (unsigned int)redirects - context: (id)context -{ void *pool = objc_autoreleasePoolPush(); OFHTTPClient_SyncPerformer *syncPerformer = [[[OFHTTPClient_SyncPerformer alloc] initWithClient: self] autorelease]; OFHTTPResponse *response = [syncPerformer performRequest: request - redirects: redirects - context: context]; + redirects: redirects]; [response retain]; objc_autoreleasePoolPop(pool); return [response autorelease]; } - (void)asyncPerformRequest: (OFHTTPRequest *)request - context: (id)context { [self asyncPerformRequest: request - redirects: REDIRECTS_DEFAULT - context: context]; + redirects: REDIRECTS_DEFAULT]; } - (void)asyncPerformRequest: (OFHTTPRequest *)request redirects: (unsigned int)redirects - context: (id)context { void *pool = objc_autoreleasePoolPush(); OFURL *URL = [request URL]; OFString *scheme = [URL scheme]; @@ -1230,12 +1183,11 @@ _inProgress = true; [[[[OFHTTPClientRequestHandler alloc] initWithClient: self request: request - redirects: redirects - context: context] autorelease] start]; + redirects: redirects] autorelease] start]; objc_autoreleasePoolPop(pool); } - (void)close