Statistics
| Branch: | Tag: | Revision:

root / Classes / ASINetworkQueue.m @ master

History | View | Annotate | Download (11.1 kB)

1 700184fb Miltiadis Vasilakis
//
2 700184fb Miltiadis Vasilakis
//  ASINetworkQueue.m
3 700184fb Miltiadis Vasilakis
//  Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRequest
4 700184fb Miltiadis Vasilakis
//
5 700184fb Miltiadis Vasilakis
//  Created by Ben Copsey on 07/11/2008.
6 700184fb Miltiadis Vasilakis
//  Copyright 2008-2009 All-Seeing Interactive. All rights reserved.
7 700184fb Miltiadis Vasilakis
//
8 700184fb Miltiadis Vasilakis
9 700184fb Miltiadis Vasilakis
#import "ASINetworkQueue.h"
10 700184fb Miltiadis Vasilakis
#import "ASIHTTPRequest.h"
11 700184fb Miltiadis Vasilakis
12 700184fb Miltiadis Vasilakis
// Private stuff
13 700184fb Miltiadis Vasilakis
@interface ASINetworkQueue ()
14 700184fb Miltiadis Vasilakis
	- (void)resetProgressDelegate:(id *)progressDelegate;
15 700184fb Miltiadis Vasilakis
	@property (assign) int requestsCount;
16 700184fb Miltiadis Vasilakis
@end
17 700184fb Miltiadis Vasilakis
18 700184fb Miltiadis Vasilakis
@implementation ASINetworkQueue
19 700184fb Miltiadis Vasilakis
20 700184fb Miltiadis Vasilakis
- (id)init
21 700184fb Miltiadis Vasilakis
{
22 700184fb Miltiadis Vasilakis
	self = [super init];
23 700184fb Miltiadis Vasilakis
	[self setShouldCancelAllRequestsOnFailure:YES];
24 700184fb Miltiadis Vasilakis
	[self setMaxConcurrentOperationCount:4];
25 700184fb Miltiadis Vasilakis
	[self setSuspended:YES];
26 700184fb Miltiadis Vasilakis
	
27 700184fb Miltiadis Vasilakis
	return self;
28 700184fb Miltiadis Vasilakis
}
29 700184fb Miltiadis Vasilakis
30 700184fb Miltiadis Vasilakis
+ (id)queue
31 700184fb Miltiadis Vasilakis
{
32 700184fb Miltiadis Vasilakis
	return [[[self alloc] init] autorelease];
33 700184fb Miltiadis Vasilakis
}
34 700184fb Miltiadis Vasilakis
35 700184fb Miltiadis Vasilakis
- (void)dealloc
36 700184fb Miltiadis Vasilakis
{
37 700184fb Miltiadis Vasilakis
	//We need to clear the queue on any requests that haven't got around to cleaning up yet, as otherwise they'll try to let us know if something goes wrong, and we'll be long gone by then
38 700184fb Miltiadis Vasilakis
	for (ASIHTTPRequest *request in [self operations]) {
39 700184fb Miltiadis Vasilakis
		[request setQueue:nil];
40 700184fb Miltiadis Vasilakis
	}
41 700184fb Miltiadis Vasilakis
	[userInfo release];
42 700184fb Miltiadis Vasilakis
	[super dealloc];
43 700184fb Miltiadis Vasilakis
}
44 700184fb Miltiadis Vasilakis
45 700184fb Miltiadis Vasilakis
- (void)setSuspended:(BOOL)suspend
46 700184fb Miltiadis Vasilakis
{
47 700184fb Miltiadis Vasilakis
	[super setSuspended:suspend];
48 700184fb Miltiadis Vasilakis
}
49 700184fb Miltiadis Vasilakis
50 700184fb Miltiadis Vasilakis
- (void)reset
51 700184fb Miltiadis Vasilakis
{
52 700184fb Miltiadis Vasilakis
	[self cancelAllOperations];
53 700184fb Miltiadis Vasilakis
	[self setDelegate:nil];
54 700184fb Miltiadis Vasilakis
	[self setDownloadProgressDelegate:nil];
55 700184fb Miltiadis Vasilakis
	[self setUploadProgressDelegate:nil];
56 700184fb Miltiadis Vasilakis
	[self setRequestDidStartSelector:NULL];
57 700184fb Miltiadis Vasilakis
	[self setRequestDidReceiveResponseHeadersSelector:NULL];
58 700184fb Miltiadis Vasilakis
	[self setRequestDidFailSelector:NULL];
59 700184fb Miltiadis Vasilakis
	[self setRequestDidFinishSelector:NULL];
60 700184fb Miltiadis Vasilakis
	[self setQueueDidFinishSelector:NULL];
61 700184fb Miltiadis Vasilakis
	[self setSuspended:YES];
62 700184fb Miltiadis Vasilakis
}
63 700184fb Miltiadis Vasilakis
64 700184fb Miltiadis Vasilakis
65 700184fb Miltiadis Vasilakis
- (void)go
66 700184fb Miltiadis Vasilakis
{
67 700184fb Miltiadis Vasilakis
	[self setSuspended:NO];
68 700184fb Miltiadis Vasilakis
}
69 700184fb Miltiadis Vasilakis
70 700184fb Miltiadis Vasilakis
- (void)cancelAllOperations
71 700184fb Miltiadis Vasilakis
{
72 700184fb Miltiadis Vasilakis
	[self setBytesUploadedSoFar:0];
73 700184fb Miltiadis Vasilakis
	[self setTotalBytesToUpload:0];
74 700184fb Miltiadis Vasilakis
	[self setBytesDownloadedSoFar:0];
75 700184fb Miltiadis Vasilakis
	[self setTotalBytesToDownload:0];
76 700184fb Miltiadis Vasilakis
	[super cancelAllOperations];
77 700184fb Miltiadis Vasilakis
}
78 700184fb Miltiadis Vasilakis
79 700184fb Miltiadis Vasilakis
- (void)setUploadProgressDelegate:(id)newDelegate
80 700184fb Miltiadis Vasilakis
{
81 700184fb Miltiadis Vasilakis
	uploadProgressDelegate = newDelegate;
82 700184fb Miltiadis Vasilakis
	[self resetProgressDelegate:&uploadProgressDelegate];
83 700184fb Miltiadis Vasilakis
84 700184fb Miltiadis Vasilakis
}
85 700184fb Miltiadis Vasilakis
86 700184fb Miltiadis Vasilakis
- (void)setDownloadProgressDelegate:(id)newDelegate
87 700184fb Miltiadis Vasilakis
{
88 700184fb Miltiadis Vasilakis
	downloadProgressDelegate = newDelegate;
89 700184fb Miltiadis Vasilakis
	[self resetProgressDelegate:&downloadProgressDelegate];
90 700184fb Miltiadis Vasilakis
}
91 700184fb Miltiadis Vasilakis
92 700184fb Miltiadis Vasilakis
- (void)resetProgressDelegate:(id *)progressDelegate
93 700184fb Miltiadis Vasilakis
{
94 700184fb Miltiadis Vasilakis
#if !TARGET_OS_IPHONE
95 700184fb Miltiadis Vasilakis
	// If the uploadProgressDelegate is an NSProgressIndicator, we set its MaxValue to 1.0 so we can treat it similarly to UIProgressViews
96 700184fb Miltiadis Vasilakis
	SEL selector = @selector(setMaxValue:);
97 700184fb Miltiadis Vasilakis
	if ([*progressDelegate respondsToSelector:selector]) {
98 700184fb Miltiadis Vasilakis
		double max = 1.0;
99 700184fb Miltiadis Vasilakis
		[ASIHTTPRequest performSelector:selector onTarget:progressDelegate withObject:nil amount:&max callerToRetain:nil];
100 700184fb Miltiadis Vasilakis
	}
101 700184fb Miltiadis Vasilakis
	selector = @selector(setDoubleValue:);
102 700184fb Miltiadis Vasilakis
	if ([*progressDelegate respondsToSelector:selector]) {
103 700184fb Miltiadis Vasilakis
		double value = 0.0;
104 700184fb Miltiadis Vasilakis
		[ASIHTTPRequest performSelector:selector onTarget:progressDelegate withObject:nil amount:&value callerToRetain:nil];
105 700184fb Miltiadis Vasilakis
	}
106 700184fb Miltiadis Vasilakis
#else
107 700184fb Miltiadis Vasilakis
	SEL selector = @selector(setProgress:);
108 700184fb Miltiadis Vasilakis
	if ([*progressDelegate respondsToSelector:selector]) {
109 700184fb Miltiadis Vasilakis
		float value = 0.0f;
110 700184fb Miltiadis Vasilakis
		[ASIHTTPRequest performSelector:selector onTarget:progressDelegate withObject:nil amount:&value callerToRetain:nil];
111 700184fb Miltiadis Vasilakis
	}
112 700184fb Miltiadis Vasilakis
#endif
113 700184fb Miltiadis Vasilakis
}
114 700184fb Miltiadis Vasilakis
115 700184fb Miltiadis Vasilakis
- (void)addHEADOperation:(NSOperation *)operation
116 700184fb Miltiadis Vasilakis
{
117 700184fb Miltiadis Vasilakis
	if ([operation isKindOfClass:[ASIHTTPRequest class]]) {
118 700184fb Miltiadis Vasilakis
		
119 700184fb Miltiadis Vasilakis
		ASIHTTPRequest *request = (ASIHTTPRequest *)operation;
120 700184fb Miltiadis Vasilakis
		[request setRequestMethod:@"HEAD"];
121 700184fb Miltiadis Vasilakis
		[request setQueuePriority:10];
122 700184fb Miltiadis Vasilakis
		[request setShowAccurateProgress:YES];
123 700184fb Miltiadis Vasilakis
		[request setQueue:self];
124 700184fb Miltiadis Vasilakis
		
125 700184fb Miltiadis Vasilakis
		// Important - we are calling NSOperation's add method - we don't want to add this as a normal request!
126 700184fb Miltiadis Vasilakis
		[super addOperation:request];
127 700184fb Miltiadis Vasilakis
	}
128 700184fb Miltiadis Vasilakis
}
129 700184fb Miltiadis Vasilakis
130 700184fb Miltiadis Vasilakis
// Only add ASIHTTPRequests to this queue!!
131 700184fb Miltiadis Vasilakis
- (void)addOperation:(NSOperation *)operation
132 700184fb Miltiadis Vasilakis
{
133 700184fb Miltiadis Vasilakis
	if (![operation isKindOfClass:[ASIHTTPRequest class]]) {
134 700184fb Miltiadis Vasilakis
		[NSException raise:@"AttemptToAddInvalidRequest" format:@"Attempted to add an object that was not an ASIHTTPRequest to an ASINetworkQueue"];
135 700184fb Miltiadis Vasilakis
	}
136 700184fb Miltiadis Vasilakis
		
137 700184fb Miltiadis Vasilakis
	[self setRequestsCount:[self requestsCount]+1];
138 700184fb Miltiadis Vasilakis
	
139 700184fb Miltiadis Vasilakis
	ASIHTTPRequest *request = (ASIHTTPRequest *)operation;
140 700184fb Miltiadis Vasilakis
	
141 700184fb Miltiadis Vasilakis
	if ([self showAccurateProgress]) {
142 700184fb Miltiadis Vasilakis
		
143 700184fb Miltiadis Vasilakis
		// Force the request to build its body (this may change requestMethod)
144 700184fb Miltiadis Vasilakis
		[request buildPostBody];
145 700184fb Miltiadis Vasilakis
		
146 700184fb Miltiadis Vasilakis
		// If this is a GET request and we want accurate progress, perform a HEAD request first to get the content-length
147 700184fb Miltiadis Vasilakis
		// We'll only do this before the queue is started
148 700184fb Miltiadis Vasilakis
		// If requests are added after the queue is started they will probably move the overall progress backwards anyway, so there's no value performing the HEAD requests first
149 700184fb Miltiadis Vasilakis
		// Instead, they'll update the total progress if and when they receive a content-length header
150 700184fb Miltiadis Vasilakis
		if ([[request requestMethod] isEqualToString:@"GET"]) {
151 700184fb Miltiadis Vasilakis
			if ([self isSuspended]) {
152 700184fb Miltiadis Vasilakis
				ASIHTTPRequest *HEADRequest = [request HEADRequest];
153 700184fb Miltiadis Vasilakis
				[self addHEADOperation:HEADRequest];
154 700184fb Miltiadis Vasilakis
				[request addDependency:HEADRequest];
155 700184fb Miltiadis Vasilakis
				if ([request shouldResetDownloadProgress]) {
156 700184fb Miltiadis Vasilakis
					[self resetProgressDelegate:&downloadProgressDelegate];
157 700184fb Miltiadis Vasilakis
					[request setShouldResetDownloadProgress:NO];
158 700184fb Miltiadis Vasilakis
				}
159 700184fb Miltiadis Vasilakis
			}
160 700184fb Miltiadis Vasilakis
		}
161 700184fb Miltiadis Vasilakis
		[request buildPostBody];
162 700184fb Miltiadis Vasilakis
		[self request:nil incrementUploadSizeBy:[request postLength]];
163 700184fb Miltiadis Vasilakis
164 700184fb Miltiadis Vasilakis
165 700184fb Miltiadis Vasilakis
	} else {
166 700184fb Miltiadis Vasilakis
		[self request:nil incrementDownloadSizeBy:1];
167 700184fb Miltiadis Vasilakis
		[self request:nil incrementUploadSizeBy:1];
168 700184fb Miltiadis Vasilakis
	}
169 700184fb Miltiadis Vasilakis
	// Tell the request not to increment the upload size when it starts, as we've already added its length
170 700184fb Miltiadis Vasilakis
	if ([request shouldResetUploadProgress]) {
171 700184fb Miltiadis Vasilakis
		[self resetProgressDelegate:&uploadProgressDelegate];
172 700184fb Miltiadis Vasilakis
		[request setShouldResetUploadProgress:NO];
173 700184fb Miltiadis Vasilakis
	}
174 700184fb Miltiadis Vasilakis
	
175 700184fb Miltiadis Vasilakis
	[request setShowAccurateProgress:[self showAccurateProgress]];
176 700184fb Miltiadis Vasilakis
	
177 700184fb Miltiadis Vasilakis
	[request setQueue:self];
178 700184fb Miltiadis Vasilakis
	[super addOperation:request];
179 700184fb Miltiadis Vasilakis
180 700184fb Miltiadis Vasilakis
}
181 700184fb Miltiadis Vasilakis
182 700184fb Miltiadis Vasilakis
- (void)requestStarted:(ASIHTTPRequest *)request
183 700184fb Miltiadis Vasilakis
{
184 700184fb Miltiadis Vasilakis
	if ([self requestDidStartSelector]) {
185 700184fb Miltiadis Vasilakis
		[[self delegate] performSelector:[self requestDidStartSelector] withObject:request];
186 700184fb Miltiadis Vasilakis
	}
187 700184fb Miltiadis Vasilakis
}
188 700184fb Miltiadis Vasilakis
189 700184fb Miltiadis Vasilakis
- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders
190 700184fb Miltiadis Vasilakis
{
191 700184fb Miltiadis Vasilakis
	if ([self requestDidReceiveResponseHeadersSelector]) {
192 700184fb Miltiadis Vasilakis
		[[self delegate] performSelector:[self requestDidReceiveResponseHeadersSelector] withObject:request withObject:responseHeaders];
193 700184fb Miltiadis Vasilakis
	}
194 700184fb Miltiadis Vasilakis
}
195 700184fb Miltiadis Vasilakis
196 700184fb Miltiadis Vasilakis
- (void)request:(ASIHTTPRequest *)request willRedirectToURL:(NSURL *)newURL
197 700184fb Miltiadis Vasilakis
{
198 700184fb Miltiadis Vasilakis
	if ([self requestWillRedirectSelector]) {
199 700184fb Miltiadis Vasilakis
		[[self delegate] performSelector:[self requestWillRedirectSelector] withObject:request withObject:newURL];
200 700184fb Miltiadis Vasilakis
	}
201 700184fb Miltiadis Vasilakis
}
202 700184fb Miltiadis Vasilakis
203 700184fb Miltiadis Vasilakis
- (void)requestFinished:(ASIHTTPRequest *)request
204 700184fb Miltiadis Vasilakis
{
205 700184fb Miltiadis Vasilakis
	[self setRequestsCount:[self requestsCount]-1];
206 700184fb Miltiadis Vasilakis
	if ([self requestDidFinishSelector]) {
207 700184fb Miltiadis Vasilakis
		[[self delegate] performSelector:[self requestDidFinishSelector] withObject:request];
208 700184fb Miltiadis Vasilakis
	}
209 700184fb Miltiadis Vasilakis
	if ([self requestsCount] == 0) {
210 700184fb Miltiadis Vasilakis
		if ([self queueDidFinishSelector]) {
211 700184fb Miltiadis Vasilakis
			[[self delegate] performSelector:[self queueDidFinishSelector] withObject:self];
212 700184fb Miltiadis Vasilakis
		}
213 700184fb Miltiadis Vasilakis
	}
214 700184fb Miltiadis Vasilakis
}
215 700184fb Miltiadis Vasilakis
216 700184fb Miltiadis Vasilakis
- (void)requestFailed:(ASIHTTPRequest *)request
217 700184fb Miltiadis Vasilakis
{
218 700184fb Miltiadis Vasilakis
	[self setRequestsCount:[self requestsCount]-1];
219 700184fb Miltiadis Vasilakis
	if ([self requestDidFailSelector]) {
220 700184fb Miltiadis Vasilakis
		[[self delegate] performSelector:[self requestDidFailSelector] withObject:request];
221 700184fb Miltiadis Vasilakis
	}
222 700184fb Miltiadis Vasilakis
	if ([self requestsCount] == 0) {
223 700184fb Miltiadis Vasilakis
		if ([self queueDidFinishSelector]) {
224 700184fb Miltiadis Vasilakis
			[[self delegate] performSelector:[self queueDidFinishSelector] withObject:self];
225 700184fb Miltiadis Vasilakis
		}
226 700184fb Miltiadis Vasilakis
	}
227 700184fb Miltiadis Vasilakis
	if ([self shouldCancelAllRequestsOnFailure] && [self requestsCount] > 0) {
228 700184fb Miltiadis Vasilakis
		[self cancelAllOperations];
229 700184fb Miltiadis Vasilakis
	}
230 700184fb Miltiadis Vasilakis
	
231 700184fb Miltiadis Vasilakis
}
232 700184fb Miltiadis Vasilakis
233 700184fb Miltiadis Vasilakis
234 700184fb Miltiadis Vasilakis
- (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes
235 700184fb Miltiadis Vasilakis
{
236 700184fb Miltiadis Vasilakis
	[self setBytesDownloadedSoFar:[self bytesDownloadedSoFar]+bytes];
237 700184fb Miltiadis Vasilakis
	if ([self downloadProgressDelegate]) {
238 700184fb Miltiadis Vasilakis
		[ASIHTTPRequest updateProgressIndicator:&downloadProgressDelegate withProgress:[self bytesDownloadedSoFar] ofTotal:[self totalBytesToDownload]];
239 700184fb Miltiadis Vasilakis
	}
240 700184fb Miltiadis Vasilakis
}
241 700184fb Miltiadis Vasilakis
242 700184fb Miltiadis Vasilakis
- (void)request:(ASIHTTPRequest *)request didSendBytes:(long long)bytes
243 700184fb Miltiadis Vasilakis
{
244 700184fb Miltiadis Vasilakis
	[self setBytesUploadedSoFar:[self bytesUploadedSoFar]+bytes];
245 700184fb Miltiadis Vasilakis
	if ([self uploadProgressDelegate]) {
246 700184fb Miltiadis Vasilakis
		[ASIHTTPRequest updateProgressIndicator:&uploadProgressDelegate withProgress:[self bytesUploadedSoFar] ofTotal:[self totalBytesToUpload]];
247 700184fb Miltiadis Vasilakis
	}
248 700184fb Miltiadis Vasilakis
}
249 700184fb Miltiadis Vasilakis
250 700184fb Miltiadis Vasilakis
- (void)request:(ASIHTTPRequest *)request incrementDownloadSizeBy:(long long)newLength
251 700184fb Miltiadis Vasilakis
{
252 700184fb Miltiadis Vasilakis
	[self setTotalBytesToDownload:[self totalBytesToDownload]+newLength];
253 700184fb Miltiadis Vasilakis
}
254 700184fb Miltiadis Vasilakis
255 700184fb Miltiadis Vasilakis
- (void)request:(ASIHTTPRequest *)request incrementUploadSizeBy:(long long)newLength
256 700184fb Miltiadis Vasilakis
{
257 700184fb Miltiadis Vasilakis
	[self setTotalBytesToUpload:[self totalBytesToUpload]+newLength];
258 700184fb Miltiadis Vasilakis
}
259 700184fb Miltiadis Vasilakis
260 700184fb Miltiadis Vasilakis
261 700184fb Miltiadis Vasilakis
// Since this queue takes over as the delegate for all requests it contains, it should forward authorisation requests to its own delegate
262 700184fb Miltiadis Vasilakis
- (void)authenticationNeededForRequest:(ASIHTTPRequest *)request
263 700184fb Miltiadis Vasilakis
{
264 700184fb Miltiadis Vasilakis
	if ([[self delegate] respondsToSelector:@selector(authenticationNeededForRequest:)]) {
265 700184fb Miltiadis Vasilakis
		[[self delegate] performSelector:@selector(authenticationNeededForRequest:) withObject:request];
266 700184fb Miltiadis Vasilakis
	}
267 700184fb Miltiadis Vasilakis
}
268 700184fb Miltiadis Vasilakis
269 700184fb Miltiadis Vasilakis
- (void)proxyAuthenticationNeededForRequest:(ASIHTTPRequest *)request
270 700184fb Miltiadis Vasilakis
{
271 700184fb Miltiadis Vasilakis
	if ([[self delegate] respondsToSelector:@selector(proxyAuthenticationNeededForRequest:)]) {
272 700184fb Miltiadis Vasilakis
		[[self delegate] performSelector:@selector(proxyAuthenticationNeededForRequest:) withObject:request];
273 700184fb Miltiadis Vasilakis
	}
274 700184fb Miltiadis Vasilakis
}
275 700184fb Miltiadis Vasilakis
276 700184fb Miltiadis Vasilakis
277 700184fb Miltiadis Vasilakis
- (BOOL)respondsToSelector:(SEL)selector
278 700184fb Miltiadis Vasilakis
{
279 700184fb Miltiadis Vasilakis
	// We handle certain methods differently because whether our delegate implements them or not can affect how the request should behave
280 700184fb Miltiadis Vasilakis
281 700184fb Miltiadis Vasilakis
	// If the delegate implements this, the request will stop to wait for credentials
282 700184fb Miltiadis Vasilakis
	if (selector == @selector(authenticationNeededForRequest:)) {
283 700184fb Miltiadis Vasilakis
		if ([[self delegate] respondsToSelector:@selector(authenticationNeededForRequest:)]) {
284 700184fb Miltiadis Vasilakis
			return YES;
285 700184fb Miltiadis Vasilakis
		}
286 700184fb Miltiadis Vasilakis
		return NO;
287 700184fb Miltiadis Vasilakis
288 700184fb Miltiadis Vasilakis
	// If the delegate implements this, the request will to wait for credentials
289 700184fb Miltiadis Vasilakis
	} else if (selector == @selector(proxyAuthenticationNeededForRequest:)) {
290 700184fb Miltiadis Vasilakis
		if ([[self delegate] respondsToSelector:@selector(proxyAuthenticationNeededForRequest:)]) {
291 700184fb Miltiadis Vasilakis
			return YES;
292 700184fb Miltiadis Vasilakis
		}
293 700184fb Miltiadis Vasilakis
		return NO;
294 700184fb Miltiadis Vasilakis
295 700184fb Miltiadis Vasilakis
	// If the delegate implements requestWillRedirectSelector, the request will stop to allow the delegate to change the url
296 700184fb Miltiadis Vasilakis
	} else if (selector == @selector(request:willRedirectToURL:)) {
297 700184fb Miltiadis Vasilakis
		if ([self requestWillRedirectSelector] && [[self delegate] respondsToSelector:[self requestWillRedirectSelector]]) {
298 700184fb Miltiadis Vasilakis
			return YES;
299 700184fb Miltiadis Vasilakis
		}
300 700184fb Miltiadis Vasilakis
		return NO;
301 700184fb Miltiadis Vasilakis
	}
302 700184fb Miltiadis Vasilakis
	return [super respondsToSelector:selector];
303 700184fb Miltiadis Vasilakis
}
304 700184fb Miltiadis Vasilakis
305 700184fb Miltiadis Vasilakis
#pragma mark NSCopying
306 700184fb Miltiadis Vasilakis
307 700184fb Miltiadis Vasilakis
- (id)copyWithZone:(NSZone *)zone
308 700184fb Miltiadis Vasilakis
{
309 700184fb Miltiadis Vasilakis
	ASINetworkQueue *newQueue = [[[self class] alloc] init];
310 700184fb Miltiadis Vasilakis
	[newQueue setDelegate:[self delegate]];
311 700184fb Miltiadis Vasilakis
	[newQueue setRequestDidStartSelector:[self requestDidStartSelector]];
312 700184fb Miltiadis Vasilakis
	[newQueue setRequestWillRedirectSelector:[self requestWillRedirectSelector]];
313 700184fb Miltiadis Vasilakis
	[newQueue setRequestDidReceiveResponseHeadersSelector:[self requestDidReceiveResponseHeadersSelector]];
314 700184fb Miltiadis Vasilakis
	[newQueue setRequestDidFinishSelector:[self requestDidFinishSelector]];
315 700184fb Miltiadis Vasilakis
	[newQueue setRequestDidFailSelector:[self requestDidFailSelector]];
316 700184fb Miltiadis Vasilakis
	[newQueue setQueueDidFinishSelector:[self queueDidFinishSelector]];
317 700184fb Miltiadis Vasilakis
	[newQueue setUploadProgressDelegate:[self uploadProgressDelegate]];
318 700184fb Miltiadis Vasilakis
	[newQueue setDownloadProgressDelegate:[self downloadProgressDelegate]];
319 700184fb Miltiadis Vasilakis
	[newQueue setShouldCancelAllRequestsOnFailure:[self shouldCancelAllRequestsOnFailure]];
320 700184fb Miltiadis Vasilakis
	[newQueue setShowAccurateProgress:[self showAccurateProgress]];
321 700184fb Miltiadis Vasilakis
	[newQueue setUserInfo:[[[self userInfo] copyWithZone:zone] autorelease]];
322 700184fb Miltiadis Vasilakis
	return newQueue;
323 700184fb Miltiadis Vasilakis
}
324 700184fb Miltiadis Vasilakis
325 700184fb Miltiadis Vasilakis
326 700184fb Miltiadis Vasilakis
@synthesize requestsCount;
327 700184fb Miltiadis Vasilakis
@synthesize bytesUploadedSoFar;
328 700184fb Miltiadis Vasilakis
@synthesize totalBytesToUpload;
329 700184fb Miltiadis Vasilakis
@synthesize bytesDownloadedSoFar;
330 700184fb Miltiadis Vasilakis
@synthesize totalBytesToDownload;
331 700184fb Miltiadis Vasilakis
@synthesize shouldCancelAllRequestsOnFailure;
332 700184fb Miltiadis Vasilakis
@synthesize uploadProgressDelegate;
333 700184fb Miltiadis Vasilakis
@synthesize downloadProgressDelegate;
334 700184fb Miltiadis Vasilakis
@synthesize requestDidStartSelector;
335 700184fb Miltiadis Vasilakis
@synthesize requestDidReceiveResponseHeadersSelector;
336 700184fb Miltiadis Vasilakis
@synthesize requestWillRedirectSelector;
337 700184fb Miltiadis Vasilakis
@synthesize requestDidFinishSelector;
338 700184fb Miltiadis Vasilakis
@synthesize requestDidFailSelector;
339 700184fb Miltiadis Vasilakis
@synthesize queueDidFinishSelector;
340 700184fb Miltiadis Vasilakis
@synthesize delegate;
341 700184fb Miltiadis Vasilakis
@synthesize showAccurateProgress;
342 700184fb Miltiadis Vasilakis
@synthesize userInfo;
343 700184fb Miltiadis Vasilakis
@end