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 |