// // OpenCachingRequest.m // Geopher OpenCaching // // Created by Jeremy on 12/29/10. // Copyright 2010 Stone Software. All rights reserved. // #import "OpenCachingRequest.h" @interface OpenCachingRequest () - (id) init; - (void) dealloc; @end @implementation OpenCachingRequest @synthesize delegate; - (id) init { self = [super init]; if (self != nil) { delegate = nil; responseData = [[NSMutableData alloc] init]; } return self; } - (void) dealloc { [responseData release]; [delegate release]; [self cancelProgress]; [super dealloc]; } - (BOOL) requestIsInProgress { return connection != nil; } // returns NO if the request is invalid - (BOOL) makeGetRequest:(NSString*)inRequest withDelegate:(id )inDelegate { if (connection != nil || inRequest == nil || inDelegate == nil) return NO; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:inRequest]]; connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; self.delegate = inDelegate; return YES; } - (void) cancelProgress { if (connection) { [connection cancel]; [connection autorelease]; connection = nil; } } #pragma mark - #pragma mark request delegate - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [responseData setLength:0]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [responseData appendData:data]; } - (void)connection:(NSURLConnection *)inConnection didFailWithError:(NSError *)error { if (delegate && [delegate respondsToSelector:@selector(passBackError:)]) [delegate passBackError:error]; else NSLog(@"connection error: %hi, %@", [error code], [error localizedDescription]); [connection autorelease]; connection = nil; } - (void)connectionDidFinishLoading:(NSURLConnection *)inConnection { if (delegate) [delegate returnDataComplete:[NSData dataWithData:responseData]]; [connection release]; // remember, we are releasing this here. Prob should make this a member variable. connection = nil; } @end