@@ -58,12 +58,12 @@ { OFArray OF_GENERIC(OFString *) *_URLs; size_t _URLIndex; int _errorCode; OFString *_outputPath, *_currentFileName; - bool _continue, _force, _detectFileName, _detectedFileName; - bool _quiet, _verbose, _insecure; + bool _continue, _force, _detectFileName, _detectFileNameRequest; + bool _detectedFileName, _quiet, _verbose, _insecure; OFStream *_body; of_http_request_method_t _method; OFMutableDictionary *_clientHeaders; OFHTTPClient *_HTTPClient; char *_buffer; @@ -513,21 +513,19 @@ } - (void)client: (OFHTTPClient *)client didCreateSocket: (OF_KINDOF(OFTCPSocket *))sock request: (OFHTTPRequest *)request - context: (id)context { if (_insecure && [sock respondsToSelector: @selector(setCertificateVerificationEnabled:)]) [sock setCertificateVerificationEnabled: false]; } - (void)client: (OFHTTPClient *)client wantsRequestBody: (OFStream *)body request: (OFHTTPRequest *)request - context: (id)context { /* TODO: Do asynchronously and print status */ while (![_body isAtEndOfStream]) { char buffer[4096]; size_t length; @@ -542,11 +540,10 @@ - (bool)client: (OFHTTPClient *)client shouldFollowRedirect: (OFURL *)URL statusCode: (int)statusCode request: (OFHTTPRequest *)request response: (OFHTTPResponse *)response - context: (id)context { if (_verbose) { void *pool = objc_autoreleasePoolPush(); OFDictionary OF_GENERIC(OFString *, OFString *) *headers = [response headers]; @@ -567,14 +564,13 @@ [of_stdout writeFormat: @"☇ %@", [URL string]]; return true; } -- (void)client: (OFHTTPClient *)client - didEncounterException: (id)e - request: (OFHTTPRequest *)request - context: (id)context +- (void)client: (OFHTTPClient *)client + didFailWithException: (id)e + request: (OFHTTPRequest *)request { if ([e isKindOfClass: [OFResolveHostFailedException class]]) { if (!_quiet) [of_stdout writeString: @"\n"]; @@ -713,11 +709,10 @@ - (void)client: (OFHTTPClient *)client didReceiveHeaders: (OFDictionary OF_GENERIC(OFString *, OFString *) *)headers statusCode: (int)statusCode request: (OFHTTPRequest *)request - context: (id)context { if (!_quiet) { OFString *lengthString = [headers objectForKey: @"Content-Length"]; OFString *type = [headers objectForKey: @"Content-Type"]; @@ -803,13 +798,12 @@ } - (void)client: (OFHTTPClient *)client didPerformRequest: (OFHTTPRequest *)request response: (OFHTTPResponse *)response - context: (id)context { - if ([context isEqual: @"detectFileName"]) { + if (_detectFileNameRequest) { _currentFileName = [fileNameFromContentDisposition( [[response headers] objectForKey: @"Content-Disposition"]) copy]; _detectedFileName = true; @@ -928,12 +922,12 @@ request = [OFHTTPRequest requestWithURL: URL]; [request setHeaders: clientHeaders]; [request setMethod: OF_HTTP_REQUEST_METHOD_HEAD]; - [_HTTPClient asyncPerformRequest: request - context: @"detectFileName"]; + _detectFileNameRequest = true; + [_HTTPClient asyncPerformRequest: request]; return; } [_currentFileName release]; _currentFileName = nil; @@ -969,14 +963,14 @@ request = [OFHTTPRequest requestWithURL: URL]; [request setHeaders: clientHeaders]; [request setMethod: _method]; - [_HTTPClient asyncPerformRequest: request - context: nil]; + _detectFileNameRequest = false; + [_HTTPClient asyncPerformRequest: request]; return; next: [self performSelector: @selector(downloadNextURL) afterDelay: 0]; } @end