forked from jverkoey/nimbus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
_a_s_i_h_t_t_p_request_8h_source.html
1100 lines (1082 loc) · 102 KB
/
_a_s_i_h_t_t_p_request_8h_source.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Nimbus: /Users/featherless/workbench/ios/nimbus/src/ASIHTTPRequest/src/ASIHTTPRequest.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="stylesheet.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-24278774-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div id="page">
<div style="position:relative">
<div id="top"><!-- do not remove this div! -->
<div id="titlearea">
<a style="float: right;margin-right:20px;margin-top:20px" href='http://www.pledgie.com/campaigns/15519'><img alt='Click here to support Nimbus development and make a donation at www.pledgie.com !' src='http://www.pledgie.com/campaigns/15519.png?skin_name=chrome' border='0' /></a>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Nimbus
 <span id="projectnumber">0.6.0 - <a href="http://github.com/jverkoey/nimbus">Nimbus is proudly hosted on Github</a></span>
</div>
<div id="projectbrief">An iOS framework whose growth is bounded by O(documentation).</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Generated by Doxygen 1.7.4-20110629 -->
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
initNavTree('_a_s_i_h_t_t_p_request_8h.html','');
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">/Users/featherless/workbench/ios/nimbus/src/ASIHTTPRequest/src/ASIHTTPRequest.h</div> </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//</span>
<a name="l00002"></a>00002 <span class="comment">// ASIHTTPRequest.h</span>
<a name="l00003"></a>00003 <span class="comment">//</span>
<a name="l00004"></a>00004 <span class="comment">// Created by Ben Copsey on 04/10/2007.</span>
<a name="l00005"></a>00005 <span class="comment">// Copyright 2007-2011 All-Seeing Interactive. All rights reserved.</span>
<a name="l00006"></a>00006 <span class="comment">//</span>
<a name="l00007"></a>00007 <span class="comment">// A guide to the main features is available at:</span>
<a name="l00008"></a>00008 <span class="comment">// http://allseeing-i.com/ASIHTTPRequest</span>
<a name="l00009"></a>00009 <span class="comment">//</span>
<a name="l00010"></a>00010 <span class="comment">// Portions are based on the ImageClient example from Apple:</span>
<a name="l00011"></a>00011 <span class="comment">// See: http://developer.apple.com/samplecode/ImageClient/listing37.html</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="preprocessor">#import <Foundation/Foundation.h></span>
<a name="l00014"></a>00014 <span class="preprocessor">#if TARGET_OS_IPHONE</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor"> #import <CFNetwork/CFNetwork.h></span>
<a name="l00016"></a>00016 <span class="preprocessor"> #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor"> #import <UIKit/UIKit.h></span> <span class="comment">// Necessary for background task support</span>
<a name="l00018"></a>00018 <span class="preprocessor"> #endif</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#import <stdio.h></span>
<a name="l00022"></a>00022 <span class="preprocessor">#import "ASIHTTPRequestConfig.h"</span>
<a name="l00023"></a>00023 <span class="preprocessor">#import "ASIHTTPRequestDelegate.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#import "ASIProgressDelegate.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#import "ASICacheDelegate.h"</span>
<a name="l00026"></a>00026
<a name="l00027"></a>00027 <span class="keyword">@class</span> ASIDataDecompressor;
<a name="l00028"></a>00028
<a name="l00029"></a>00029 <span class="keyword">extern</span> <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *ASIHTTPRequestVersion;
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="comment">// Make targeting different platforms more reliable</span>
<a name="l00032"></a>00032 <span class="comment">// See: http://www.blumtnwerx.com/blog/2009/06/cross-sdk-code-hygiene-in-xcode/</span>
<a name="l00033"></a>00033 <span class="preprocessor">#ifndef __IPHONE_3_2</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor"> #define __IPHONE_3_2 30200</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#ifndef __IPHONE_4_0</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor"> #define __IPHONE_4_0 40000</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#ifndef __MAC_10_5</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor"> #define __MAC_10_5 1050</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#ifndef __MAC_10_6</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor"> #define __MAC_10_6 1060</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00046"></a>00046 <span class="keyword">typedef</span> <span class="keyword">enum</span> _ASIAuthenticationState {
<a name="l00047"></a>00047 ASINoAuthenticationNeededYet = 0,
<a name="l00048"></a>00048 ASIHTTPAuthenticationNeeded = 1,
<a name="l00049"></a>00049 ASIProxyAuthenticationNeeded = 2
<a name="l00050"></a>00050 } ASIAuthenticationState;
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="keyword">typedef</span> <span class="keyword">enum</span> _ASINetworkErrorType {
<a name="l00053"></a>00053 ASIConnectionFailureErrorType = 1,
<a name="l00054"></a>00054 ASIRequestTimedOutErrorType = 2,
<a name="l00055"></a>00055 ASIAuthenticationErrorType = 3,
<a name="l00056"></a>00056 ASIRequestCancelledErrorType = 4,
<a name="l00057"></a>00057 ASIUnableToCreateRequestErrorType = 5,
<a name="l00058"></a>00058 ASIInternalErrorWhileBuildingRequestType = 6,
<a name="l00059"></a>00059 ASIInternalErrorWhileApplyingCredentialsType = 7,
<a name="l00060"></a>00060 ASIFileManagementError = 8,
<a name="l00061"></a>00061 ASITooMuchRedirectionErrorType = 9,
<a name="l00062"></a>00062 ASIUnhandledExceptionError = 10,
<a name="l00063"></a>00063 ASICompressionError = 11
<a name="l00064"></a>00064
<a name="l00065"></a>00065 } ASINetworkErrorType;
<a name="l00066"></a>00066
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="comment">// The error domain that all errors generated by ASIHTTPRequest use</span>
<a name="l00069"></a>00069 <span class="keyword">extern</span> <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a>* <span class="keyword">const</span> NetworkRequestErrorDomain;
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <span class="comment">// You can use this number to throttle upload and download bandwidth in iPhone OS apps send or receive a large amount of data</span>
<a name="l00072"></a>00072 <span class="comment">// This may help apps that might otherwise be rejected for inclusion into the app store for using excessive bandwidth</span>
<a name="l00073"></a>00073 <span class="comment">// This number is not official, as far as I know there is no officially documented bandwidth limit</span>
<a name="l00074"></a>00074 <span class="keyword">extern</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keyword">const</span> ASIWWANBandwidthThrottleAmount;
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="preprocessor">#if NS_BLOCKS_AVAILABLE</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="keyword">typedef</span> void (^ASIBasicBlock)(void);
<a name="l00078"></a>00078 <span class="keyword">typedef</span> void (^ASIHeadersBlock)(NSDictionary *responseHeaders);
<a name="l00079"></a>00079 <span class="keyword">typedef</span> void (^ASISizeBlock)(<span class="keywordtype">long</span> <span class="keywordtype">long</span> size);
<a name="l00080"></a>00080 <span class="keyword">typedef</span> void (^ASIProgressBlock)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> total);
<a name="l00081"></a>00081 <span class="keyword">typedef</span> void (^ASIDataBlock)(<a class="code" href="class_n_s_data.html" title="For hashing raw data.">NSData</a> *data);
<a name="l00082"></a>00082 <span class="preprocessor">#endif</span>
<a name="l00083"></a>00083 <span class="preprocessor"></span>
<a name="l00084"></a>00084 <span class="keyword">@interface </span>ASIHTTPRequest : NSOperation <NSCopying> {
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="comment">// The url for this operation, should include GET params in the query string where appropriate</span>
<a name="l00087"></a>00087 NSURL *url;
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="comment">// Will always contain the original url used for making the request (the value of url can change when a request is redirected)</span>
<a name="l00090"></a>00090 NSURL *originalURL;
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <span class="comment">// Temporarily stores the url we are about to redirect to. Will be nil again when we do redirect</span>
<a name="l00093"></a>00093 NSURL *redirectURL;
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <span class="comment">// The delegate - will be notified of various changes in state via the ASIHTTPRequestDelegate protocol</span>
<a name="l00096"></a>00096 id <ASIHTTPRequestDelegate> delegate;
<a name="l00097"></a>00097
<a name="l00098"></a>00098 <span class="comment">// Another delegate that is also notified of request status changes and progress updates</span>
<a name="l00099"></a>00099 <span class="comment">// Generally, you won't use this directly, but ASINetworkQueue sets itself as the queue so it can proxy updates to its own delegates</span>
<a name="l00100"></a>00100 <span class="comment">// NOTE: WILL BE RETAINED BY THE REQUEST</span>
<a name="l00101"></a>00101 id <ASIHTTPRequestDelegate, ASIProgressDelegate> queue;
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="comment">// HTTP method to use (eg: GET / POST / PUT / DELETE / HEAD etc). Defaults to GET</span>
<a name="l00104"></a>00104 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *requestMethod;
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="comment">// Request body - only used when the whole body is stored in memory (shouldStreamPostDataFromDisk is false)</span>
<a name="l00107"></a>00107 NSMutableData *postBody;
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="comment">// gzipped request body used when shouldCompressRequestBody is YES</span>
<a name="l00110"></a>00110 <a class="code" href="class_n_s_data.html" title="For hashing raw data.">NSData</a> *compressedPostBody;
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="comment">// When true, post body will be streamed from a file on disk, rather than loaded into memory at once (useful for large uploads)</span>
<a name="l00113"></a>00113 <span class="comment">// Automatically set to true in ASIFormDataRequests when using setFile:forKey:</span>
<a name="l00114"></a>00114 BOOL shouldStreamPostDataFromDisk;
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="comment">// Path to file used to store post body (when shouldStreamPostDataFromDisk is true)</span>
<a name="l00117"></a>00117 <span class="comment">// You can set this yourself - useful if you want to PUT a file from local disk </span>
<a name="l00118"></a>00118 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *postBodyFilePath;
<a name="l00119"></a>00119
<a name="l00120"></a>00120 <span class="comment">// Path to a temporary file used to store a deflated post body (when shouldCompressPostBody is YES)</span>
<a name="l00121"></a>00121 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *compressedPostBodyFilePath;
<a name="l00122"></a>00122
<a name="l00123"></a>00123 <span class="comment">// Set to true when ASIHTTPRequest automatically created a temporary file containing the request body (when true, the file at postBodyFilePath will be deleted at the end of the request)</span>
<a name="l00124"></a>00124 BOOL didCreateTemporaryPostDataFile;
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="comment">// Used when writing to the post body when shouldStreamPostDataFromDisk is true (via appendPostData: or appendPostDataFromFile:)</span>
<a name="l00127"></a>00127 NSOutputStream *postBodyWriteStream;
<a name="l00128"></a>00128
<a name="l00129"></a>00129 <span class="comment">// Used for reading from the post body when sending the request</span>
<a name="l00130"></a>00130 NSInputStream *postBodyReadStream;
<a name="l00131"></a>00131
<a name="l00132"></a>00132 <span class="comment">// Dictionary for custom HTTP request headers</span>
<a name="l00133"></a>00133 NSMutableDictionary *requestHeaders;
<a name="l00134"></a>00134
<a name="l00135"></a>00135 <span class="comment">// Set to YES when the request header dictionary has been populated, used to prevent this happening more than once</span>
<a name="l00136"></a>00136 BOOL haveBuiltRequestHeaders;
<a name="l00137"></a>00137
<a name="l00138"></a>00138 <span class="comment">// Will be populated with HTTP response headers from the server</span>
<a name="l00139"></a>00139 NSDictionary *responseHeaders;
<a name="l00140"></a>00140
<a name="l00141"></a>00141 <span class="comment">// Can be used to manually insert cookie headers to a request, but it's more likely that sessionCookies will do this for you</span>
<a name="l00142"></a>00142 NSMutableArray *requestCookies;
<a name="l00143"></a>00143
<a name="l00144"></a>00144 <span class="comment">// Will be populated with cookies</span>
<a name="l00145"></a>00145 NSArray *responseCookies;
<a name="l00146"></a>00146
<a name="l00147"></a>00147 <span class="comment">// If use useCookiePersistence is true, network requests will present valid cookies from previous requests</span>
<a name="l00148"></a>00148 BOOL useCookiePersistence;
<a name="l00149"></a>00149
<a name="l00150"></a>00150 <span class="comment">// If useKeychainPersistence is true, network requests will attempt to read credentials from the keychain, and will save them in the keychain when they are successfully presented</span>
<a name="l00151"></a>00151 BOOL useKeychainPersistence;
<a name="l00152"></a>00152
<a name="l00153"></a>00153 <span class="comment">// If useSessionPersistence is true, network requests will save credentials and reuse for the duration of the session (until clearSession is called)</span>
<a name="l00154"></a>00154 BOOL useSessionPersistence;
<a name="l00155"></a>00155
<a name="l00156"></a>00156 <span class="comment">// If allowCompressedResponse is true, requests will inform the server they can accept compressed data, and will automatically decompress gzipped responses. Default is true.</span>
<a name="l00157"></a>00157 BOOL allowCompressedResponse;
<a name="l00158"></a>00158
<a name="l00159"></a>00159 <span class="comment">// If shouldCompressRequestBody is true, the request body will be gzipped. Default is false.</span>
<a name="l00160"></a>00160 <span class="comment">// You will probably need to enable this feature on your webserver to make this work. Tested with apache only.</span>
<a name="l00161"></a>00161 BOOL shouldCompressRequestBody;
<a name="l00162"></a>00162
<a name="l00163"></a>00163 <span class="comment">// When downloadDestinationPath is set, the result of this request will be downloaded to the file at this location</span>
<a name="l00164"></a>00164 <span class="comment">// If downloadDestinationPath is not set, download data will be stored in memory</span>
<a name="l00165"></a>00165 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *downloadDestinationPath;
<a name="l00166"></a>00166
<a name="l00167"></a>00167 <span class="comment">// The location that files will be downloaded to. Once a download is complete, files will be decompressed (if necessary) and moved to downloadDestinationPath</span>
<a name="l00168"></a>00168 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *temporaryFileDownloadPath;
<a name="l00169"></a>00169
<a name="l00170"></a>00170 <span class="comment">// If the response is gzipped and shouldWaitToInflateCompressedResponses is NO, a file will be created at this path containing the inflated response as it comes in</span>
<a name="l00171"></a>00171 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *temporaryUncompressedDataDownloadPath;
<a name="l00172"></a>00172
<a name="l00173"></a>00173 <span class="comment">// Used for writing data to a file when downloadDestinationPath is set</span>
<a name="l00174"></a>00174 NSOutputStream *fileDownloadOutputStream;
<a name="l00175"></a>00175
<a name="l00176"></a>00176 NSOutputStream *inflatedFileDownloadOutputStream;
<a name="l00177"></a>00177
<a name="l00178"></a>00178 <span class="comment">// When the request fails or completes successfully, complete will be true</span>
<a name="l00179"></a>00179 BOOL complete;
<a name="l00180"></a>00180
<a name="l00181"></a>00181 <span class="comment">// external "finished" indicator, subject of KVO notifications; updates after 'complete'</span>
<a name="l00182"></a>00182 BOOL finished;
<a name="l00183"></a>00183
<a name="l00184"></a>00184 <span class="comment">// True if our 'cancel' selector has been called</span>
<a name="l00185"></a>00185 BOOL cancelled;
<a name="l00186"></a>00186
<a name="l00187"></a>00187 <span class="comment">// If an error occurs, error will contain an NSError</span>
<a name="l00188"></a>00188 <span class="comment">// If error code is = ASIConnectionFailureErrorType (1, Connection failure occurred) - inspect [[error userInfo] objectForKey:NSUnderlyingErrorKey] for more information</span>
<a name="l00189"></a>00189 NSError *error;
<a name="l00190"></a>00190
<a name="l00191"></a>00191 <span class="comment">// Username and password used for authentication</span>
<a name="l00192"></a>00192 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *username;
<a name="l00193"></a>00193 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *password;
<a name="l00194"></a>00194
<a name="l00195"></a>00195 <span class="comment">// User-Agent for this request</span>
<a name="l00196"></a>00196 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *userAgent;
<a name="l00197"></a>00197
<a name="l00198"></a>00198 <span class="comment">// Domain used for NTLM authentication</span>
<a name="l00199"></a>00199 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *domain;
<a name="l00200"></a>00200
<a name="l00201"></a>00201 <span class="comment">// Username and password used for proxy authentication</span>
<a name="l00202"></a>00202 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyUsername;
<a name="l00203"></a>00203 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyPassword;
<a name="l00204"></a>00204
<a name="l00205"></a>00205 <span class="comment">// Domain used for NTLM proxy authentication</span>
<a name="l00206"></a>00206 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyDomain;
<a name="l00207"></a>00207
<a name="l00208"></a>00208 <span class="comment">// Delegate for displaying upload progress (usually an NSProgressIndicator, but you can supply a different object and handle this yourself)</span>
<a name="l00209"></a>00209 id <ASIProgressDelegate> uploadProgressDelegate;
<a name="l00210"></a>00210
<a name="l00211"></a>00211 <span class="comment">// Delegate for displaying download progress (usually an NSProgressIndicator, but you can supply a different object and handle this yourself)</span>
<a name="l00212"></a>00212 id <ASIProgressDelegate> downloadProgressDelegate;
<a name="l00213"></a>00213
<a name="l00214"></a>00214 <span class="comment">// Whether we've seen the headers of the response yet</span>
<a name="l00215"></a>00215 BOOL haveExaminedHeaders;
<a name="l00216"></a>00216
<a name="l00217"></a>00217 <span class="comment">// Data we receive will be stored here. Data may be compressed unless allowCompressedResponse is false - you should use [request responseData] instead in most cases</span>
<a name="l00218"></a>00218 NSMutableData *rawResponseData;
<a name="l00219"></a>00219
<a name="l00220"></a>00220 <span class="comment">// Used for sending and receiving data</span>
<a name="l00221"></a>00221 CFHTTPMessageRef request;
<a name="l00222"></a>00222 NSInputStream *readStream;
<a name="l00223"></a>00223
<a name="l00224"></a>00224 <span class="comment">// Used for authentication</span>
<a name="l00225"></a>00225 CFHTTPAuthenticationRef requestAuthentication;
<a name="l00226"></a>00226 NSDictionary *requestCredentials;
<a name="l00227"></a>00227
<a name="l00228"></a>00228 <span class="comment">// Used during NTLM authentication</span>
<a name="l00229"></a>00229 <span class="keywordtype">int</span> authenticationRetryCount;
<a name="l00230"></a>00230
<a name="l00231"></a>00231 <span class="comment">// Authentication scheme (Basic, Digest, NTLM)</span>
<a name="l00232"></a>00232 <span class="comment">// If you are using Basic authentication and want to force ASIHTTPRequest to send an authorization header without waiting for a 401, you must set this to (NSString *)kCFHTTPAuthenticationSchemeBasic</span>
<a name="l00233"></a>00233 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *authenticationScheme;
<a name="l00234"></a>00234
<a name="l00235"></a>00235 <span class="comment">// Realm for authentication when credentials are required</span>
<a name="l00236"></a>00236 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *authenticationRealm;
<a name="l00237"></a>00237
<a name="l00238"></a>00238 <span class="comment">// When YES, ASIHTTPRequest will present a dialog allowing users to enter credentials when no-matching credentials were found for a server that requires authentication</span>
<a name="l00239"></a>00239 <span class="comment">// The dialog will not be shown if your delegate responds to authenticationNeededForRequest:</span>
<a name="l00240"></a>00240 <span class="comment">// Default is NO.</span>
<a name="l00241"></a>00241 BOOL shouldPresentAuthenticationDialog;
<a name="l00242"></a>00242
<a name="l00243"></a>00243 <span class="comment">// When YES, ASIHTTPRequest will present a dialog allowing users to enter credentials when no-matching credentials were found for a proxy server that requires authentication</span>
<a name="l00244"></a>00244 <span class="comment">// The dialog will not be shown if your delegate responds to proxyAuthenticationNeededForRequest:</span>
<a name="l00245"></a>00245 <span class="comment">// Default is YES (basically, because most people won't want the hassle of adding support for authenticating proxies to their apps)</span>
<a name="l00246"></a>00246 BOOL shouldPresentProxyAuthenticationDialog;
<a name="l00247"></a>00247
<a name="l00248"></a>00248 <span class="comment">// Used for proxy authentication</span>
<a name="l00249"></a>00249 CFHTTPAuthenticationRef proxyAuthentication;
<a name="l00250"></a>00250 NSDictionary *proxyCredentials;
<a name="l00251"></a>00251
<a name="l00252"></a>00252 <span class="comment">// Used during authentication with an NTLM proxy</span>
<a name="l00253"></a>00253 <span class="keywordtype">int</span> proxyAuthenticationRetryCount;
<a name="l00254"></a>00254
<a name="l00255"></a>00255 <span class="comment">// Authentication scheme for the proxy (Basic, Digest, NTLM)</span>
<a name="l00256"></a>00256 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyAuthenticationScheme;
<a name="l00257"></a>00257
<a name="l00258"></a>00258 <span class="comment">// Realm for proxy authentication when credentials are required</span>
<a name="l00259"></a>00259 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyAuthenticationRealm;
<a name="l00260"></a>00260
<a name="l00261"></a>00261 <span class="comment">// HTTP status code, eg: 200 = OK, 404 = Not found etc</span>
<a name="l00262"></a>00262 <span class="keywordtype">int</span> responseStatusCode;
<a name="l00263"></a>00263
<a name="l00264"></a>00264 <span class="comment">// Description of the HTTP status code</span>
<a name="l00265"></a>00265 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *responseStatusMessage;
<a name="l00266"></a>00266
<a name="l00267"></a>00267 <span class="comment">// Size of the response</span>
<a name="l00268"></a>00268 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> contentLength;
<a name="l00269"></a>00269
<a name="l00270"></a>00270 <span class="comment">// Size of the partially downloaded content</span>
<a name="l00271"></a>00271 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> partialDownloadSize;
<a name="l00272"></a>00272
<a name="l00273"></a>00273 <span class="comment">// Size of the POST payload</span>
<a name="l00274"></a>00274 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> postLength;
<a name="l00275"></a>00275
<a name="l00276"></a>00276 <span class="comment">// The total amount of downloaded data</span>
<a name="l00277"></a>00277 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> totalBytesRead;
<a name="l00278"></a>00278
<a name="l00279"></a>00279 <span class="comment">// The total amount of uploaded data</span>
<a name="l00280"></a>00280 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> totalBytesSent;
<a name="l00281"></a>00281
<a name="l00282"></a>00282 <span class="comment">// Last amount of data read (used for incrementing progress)</span>
<a name="l00283"></a>00283 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> lastBytesRead;
<a name="l00284"></a>00284
<a name="l00285"></a>00285 <span class="comment">// Last amount of data sent (used for incrementing progress)</span>
<a name="l00286"></a>00286 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> lastBytesSent;
<a name="l00287"></a>00287
<a name="l00288"></a>00288 <span class="comment">// This lock prevents the operation from being cancelled at an inopportune moment</span>
<a name="l00289"></a>00289 NSRecursiveLock *cancelledLock;
<a name="l00290"></a>00290
<a name="l00291"></a>00291 <span class="comment">// Called on the delegate (if implemented) when the request starts. Default is requestStarted:</span>
<a name="l00292"></a>00292 <span class="keywordtype">SEL</span> didStartSelector;
<a name="l00293"></a>00293
<a name="l00294"></a>00294 <span class="comment">// Called on the delegate (if implemented) when the request receives response headers. Default is request:didReceiveResponseHeaders:</span>
<a name="l00295"></a>00295 <span class="keywordtype">SEL</span> didReceiveResponseHeadersSelector;
<a name="l00296"></a>00296
<a name="l00297"></a>00297 <span class="comment">// Called on the delegate (if implemented) when the request receives a Location header and shouldRedirect is YES</span>
<a name="l00298"></a>00298 <span class="comment">// The delegate can then change the url if needed, and can restart the request by calling [request redirectToURL:], or simply cancel it</span>
<a name="l00299"></a>00299 <span class="keywordtype">SEL</span> willRedirectSelector;
<a name="l00300"></a>00300
<a name="l00301"></a>00301 <span class="comment">// Called on the delegate (if implemented) when the request completes successfully. Default is requestFinished:</span>
<a name="l00302"></a>00302 <span class="keywordtype">SEL</span> didFinishSelector;
<a name="l00303"></a>00303
<a name="l00304"></a>00304 <span class="comment">// Called on the delegate (if implemented) when the request fails. Default is requestFailed:</span>
<a name="l00305"></a>00305 <span class="keywordtype">SEL</span> didFailSelector;
<a name="l00306"></a>00306
<a name="l00307"></a>00307 <span class="comment">// Called on the delegate (if implemented) when the request receives data. Default is request:didReceiveData:</span>
<a name="l00308"></a>00308 <span class="comment">// If you set this and implement the method in your delegate, you must handle the data yourself - ASIHTTPRequest will not populate responseData or write the data to downloadDestinationPath</span>
<a name="l00309"></a>00309 <span class="keywordtype">SEL</span> didReceiveDataSelector;
<a name="l00310"></a>00310
<a name="l00311"></a>00311 <span class="comment">// Used for recording when something last happened during the request, we will compare this value with the current date to time out requests when appropriate</span>
<a name="l00312"></a>00312 NSDate *lastActivityTime;
<a name="l00313"></a>00313
<a name="l00314"></a>00314 <span class="comment">// Number of seconds to wait before timing out - default is 10</span>
<a name="l00315"></a>00315 NSTimeInterval timeOutSeconds;
<a name="l00316"></a>00316
<a name="l00317"></a>00317 <span class="comment">// Will be YES when a HEAD request will handle the content-length before this request starts</span>
<a name="l00318"></a>00318 BOOL shouldResetUploadProgress;
<a name="l00319"></a>00319 BOOL shouldResetDownloadProgress;
<a name="l00320"></a>00320
<a name="l00321"></a>00321 <span class="comment">// Used by HEAD requests when showAccurateProgress is YES to preset the content-length for this request</span>
<a name="l00322"></a>00322 ASIHTTPRequest *mainRequest;
<a name="l00323"></a>00323
<a name="l00324"></a>00324 <span class="comment">// When NO, this request will only update the progress indicator when it completes</span>
<a name="l00325"></a>00325 <span class="comment">// When YES, this request will update the progress indicator according to how much data it has received so far</span>
<a name="l00326"></a>00326 <span class="comment">// The default for requests is YES</span>
<a name="l00327"></a>00327 <span class="comment">// Also see the comments in ASINetworkQueue.h</span>
<a name="l00328"></a>00328 BOOL showAccurateProgress;
<a name="l00329"></a>00329
<a name="l00330"></a>00330 <span class="comment">// Used to ensure the progress indicator is only incremented once when showAccurateProgress = NO</span>
<a name="l00331"></a>00331 BOOL updatedProgress;
<a name="l00332"></a>00332
<a name="l00333"></a>00333 <span class="comment">// Prevents the body of the post being built more than once (largely for subclasses)</span>
<a name="l00334"></a>00334 BOOL haveBuiltPostBody;
<a name="l00335"></a>00335
<a name="l00336"></a>00336 <span class="comment">// Used internally, may reflect the size of the internal buffer used by CFNetwork</span>
<a name="l00337"></a>00337 <span class="comment">// POST / PUT operations with body sizes greater than uploadBufferSize will not timeout unless more than uploadBufferSize bytes have been sent</span>
<a name="l00338"></a>00338 <span class="comment">// Likely to be 32KB on iPhone 3.0, 128KB on Mac OS X Leopard and iPhone 2.2.x</span>
<a name="l00339"></a>00339 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> uploadBufferSize;
<a name="l00340"></a>00340
<a name="l00341"></a>00341 <span class="comment">// Text encoding for responses that do not send a Content-Type with a charset value. Defaults to NSISOLatin1StringEncoding</span>
<a name="l00342"></a>00342 NSStringEncoding defaultResponseEncoding;
<a name="l00343"></a>00343
<a name="l00344"></a>00344 <span class="comment">// The text encoding of the response, will be defaultResponseEncoding if the server didn't specify. Can't be set.</span>
<a name="l00345"></a>00345 NSStringEncoding responseEncoding;
<a name="l00346"></a>00346
<a name="l00347"></a>00347 <span class="comment">// Tells ASIHTTPRequest not to delete partial downloads, and allows it to use an existing file to resume a download. Defaults to NO.</span>
<a name="l00348"></a>00348 BOOL allowResumeForFileDownloads;
<a name="l00349"></a>00349
<a name="l00350"></a>00350 <span class="comment">// Custom user information associated with the request (not sent to the server)</span>
<a name="l00351"></a>00351 NSDictionary *userInfo;
<a name="l00352"></a>00352 NSInteger tag;
<a name="l00353"></a>00353
<a name="l00354"></a>00354 <span class="comment">// Use HTTP 1.0 rather than 1.1 (defaults to false)</span>
<a name="l00355"></a>00355 BOOL useHTTPVersionOne;
<a name="l00356"></a>00356
<a name="l00357"></a>00357 <span class="comment">// When YES, requests will automatically redirect when they get a HTTP 30x header (defaults to YES)</span>
<a name="l00358"></a>00358 BOOL shouldRedirect;
<a name="l00359"></a>00359
<a name="l00360"></a>00360 <span class="comment">// Used internally to tell the main loop we need to stop and retry with a new url</span>
<a name="l00361"></a>00361 BOOL needsRedirect;
<a name="l00362"></a>00362
<a name="l00363"></a>00363 <span class="comment">// Incremented every time this request redirects. When it reaches 5, we give up</span>
<a name="l00364"></a>00364 <span class="keywordtype">int</span> redirectCount;
<a name="l00365"></a>00365
<a name="l00366"></a>00366 <span class="comment">// When NO, requests will not check the secure certificate is valid (use for self-signed certificates during development, DO NOT USE IN PRODUCTION) Default is YES</span>
<a name="l00367"></a>00367 BOOL validatesSecureCertificate;
<a name="l00368"></a>00368
<a name="l00369"></a>00369 <span class="comment">// If not nil and the URL scheme is https, CFNetwork configured to supply a client certificate</span>
<a name="l00370"></a>00370 SecIdentityRef clientCertificateIdentity;
<a name="l00371"></a>00371 NSArray *clientCertificates;
<a name="l00372"></a>00372
<a name="l00373"></a>00373 <span class="comment">// Details on the proxy to use - you could set these yourself, but it's probably best to let ASIHTTPRequest detect the system proxy settings</span>
<a name="l00374"></a>00374 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyHost;
<a name="l00375"></a>00375 <span class="keywordtype">int</span> proxyPort;
<a name="l00376"></a>00376
<a name="l00377"></a>00377 <span class="comment">// ASIHTTPRequest will assume kCFProxyTypeHTTP if the proxy type could not be automatically determined</span>
<a name="l00378"></a>00378 <span class="comment">// Set to kCFProxyTypeSOCKS if you are manually configuring a SOCKS proxy</span>
<a name="l00379"></a>00379 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyType;
<a name="l00380"></a>00380
<a name="l00381"></a>00381 <span class="comment">// URL for a PAC (Proxy Auto Configuration) file. If you want to set this yourself, it's probably best if you use a local file</span>
<a name="l00382"></a>00382 NSURL *PACurl;
<a name="l00383"></a>00383
<a name="l00384"></a>00384 <span class="comment">// See ASIAuthenticationState values above. 0 == default == No authentication needed yet</span>
<a name="l00385"></a>00385 ASIAuthenticationState authenticationNeeded;
<a name="l00386"></a>00386
<a name="l00387"></a>00387 <span class="comment">// When YES, ASIHTTPRequests will present credentials from the session store for requests to the same server before being asked for them</span>
<a name="l00388"></a>00388 <span class="comment">// This avoids an extra round trip for requests after authentication has succeeded, which is much for efficient for authenticated requests with large bodies, or on slower connections</span>
<a name="l00389"></a>00389 <span class="comment">// Set to NO to only present credentials when explicitly asked for them</span>
<a name="l00390"></a>00390 <span class="comment">// This only affects credentials stored in the session cache when useSessionPersistence is YES. Credentials from the keychain are never presented unless the server asks for them</span>
<a name="l00391"></a>00391 <span class="comment">// Default is YES</span>
<a name="l00392"></a>00392 <span class="comment">// For requests using Basic authentication, set authenticationScheme to (NSString *)kCFHTTPAuthenticationSchemeBasic, and credentials can be sent on the very first request when shouldPresentCredentialsBeforeChallenge is YES</span>
<a name="l00393"></a>00393 BOOL shouldPresentCredentialsBeforeChallenge;
<a name="l00394"></a>00394
<a name="l00395"></a>00395 <span class="comment">// YES when the request hasn't finished yet. Will still be YES even if the request isn't doing anything (eg it's waiting for delegate authentication). READ-ONLY</span>
<a name="l00396"></a>00396 BOOL inProgress;
<a name="l00397"></a>00397
<a name="l00398"></a>00398 <span class="comment">// Used internally to track whether the stream is scheduled on the run loop or not</span>
<a name="l00399"></a>00399 <span class="comment">// Bandwidth throttling can unschedule the stream to slow things down while a request is in progress</span>
<a name="l00400"></a>00400 BOOL readStreamIsScheduled;
<a name="l00401"></a>00401
<a name="l00402"></a>00402 <span class="comment">// Set to allow a request to automatically retry itself on timeout</span>
<a name="l00403"></a>00403 <span class="comment">// Default is zero - timeout will stop the request</span>
<a name="l00404"></a>00404 <span class="keywordtype">int</span> numberOfTimesToRetryOnTimeout;
<a name="l00405"></a>00405
<a name="l00406"></a>00406 <span class="comment">// The number of times this request has retried (when numberOfTimesToRetryOnTimeout > 0)</span>
<a name="l00407"></a>00407 <span class="keywordtype">int</span> retryCount;
<a name="l00408"></a>00408
<a name="l00409"></a>00409 <span class="comment">// Temporarily set to YES when a closed connection forces a retry (internally, this stops ASIHTTPRequest cleaning up a temporary post body)</span>
<a name="l00410"></a>00410 BOOL willRetryRequest;
<a name="l00411"></a>00411
<a name="l00412"></a>00412 <span class="comment">// When YES, requests will keep the connection to the server alive for a while to allow subsequent requests to re-use it for a substantial speed-boost</span>
<a name="l00413"></a>00413 <span class="comment">// Persistent connections will not be used if the server explicitly closes the connection</span>
<a name="l00414"></a>00414 <span class="comment">// Default is YES</span>
<a name="l00415"></a>00415 BOOL shouldAttemptPersistentConnection;
<a name="l00416"></a>00416
<a name="l00417"></a>00417 <span class="comment">// Number of seconds to keep an inactive persistent connection open on the client side</span>
<a name="l00418"></a>00418 <span class="comment">// Default is 60</span>
<a name="l00419"></a>00419 <span class="comment">// If we get a keep-alive header, this is this value is replaced with how long the server told us to keep the connection around</span>
<a name="l00420"></a>00420 <span class="comment">// A future date is created from this and used for expiring the connection, this is stored in connectionInfo's expires value</span>
<a name="l00421"></a>00421 NSTimeInterval persistentConnectionTimeoutSeconds;
<a name="l00422"></a>00422
<a name="l00423"></a>00423 <span class="comment">// Set to yes when an appropriate keep-alive header is found</span>
<a name="l00424"></a>00424 BOOL connectionCanBeReused;
<a name="l00425"></a>00425
<a name="l00426"></a>00426 <span class="comment">// Stores information about the persistent connection that is currently in use.</span>
<a name="l00427"></a>00427 <span class="comment">// It may contain:</span>
<a name="l00428"></a>00428 <span class="comment">// * The id we set for a particular connection, incremented every time we want to specify that we need a new connection</span>
<a name="l00429"></a>00429 <span class="comment">// * The date that connection should expire</span>
<a name="l00430"></a>00430 <span class="comment">// * A host, port and scheme for the connection. These are used to determine whether that connection can be reused by a subsequent request (all must match the new request)</span>
<a name="l00431"></a>00431 <span class="comment">// * An id for the request that is currently using the connection. This is used for determining if a connection is available or not (we store a number rather than a reference to the request so we don't need to hang onto a request until the connection expires)</span>
<a name="l00432"></a>00432 <span class="comment">// * A reference to the stream that is currently using the connection. This is necessary because we need to keep the old stream open until we've opened a new one.</span>
<a name="l00433"></a>00433 <span class="comment">// The stream will be closed + released either when another request comes to use the connection, or when the timer fires to tell the connection to expire</span>
<a name="l00434"></a>00434 NSMutableDictionary *connectionInfo;
<a name="l00435"></a>00435
<a name="l00436"></a>00436 <span class="comment">// When set to YES, 301 and 302 automatic redirects will use the original method and and body, according to the HTTP 1.1 standard</span>
<a name="l00437"></a>00437 <span class="comment">// Default is NO (to follow the behaviour of most browsers)</span>
<a name="l00438"></a>00438 BOOL shouldUseRFC2616RedirectBehaviour;
<a name="l00439"></a>00439
<a name="l00440"></a>00440 <span class="comment">// Used internally to record when a request has finished downloading data</span>
<a name="l00441"></a>00441 BOOL downloadComplete;
<a name="l00442"></a>00442
<a name="l00443"></a>00443 <span class="comment">// An ID that uniquely identifies this request - primarily used for debugging persistent connections</span>
<a name="l00444"></a>00444 NSNumber *requestID;
<a name="l00445"></a>00445
<a name="l00446"></a>00446 <span class="comment">// Will be ASIHTTPRequestRunLoopMode for synchronous requests, NSDefaultRunLoopMode for all other requests</span>
<a name="l00447"></a>00447 <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *runLoopMode;
<a name="l00448"></a>00448
<a name="l00449"></a>00449 <span class="comment">// This timer checks up on the request every 0.25 seconds, and updates progress</span>
<a name="l00450"></a>00450 NSTimer *statusTimer;
<a name="l00451"></a>00451
<a name="l00452"></a>00452 <span class="comment">// The download cache that will be used for this request (use [ASIHTTPRequest setDefaultCache:cache] to configure a default cache</span>
<a name="l00453"></a>00453 id <ASICacheDelegate> downloadCache;
<a name="l00454"></a>00454
<a name="l00455"></a>00455 <span class="comment">// The cache policy that will be used for this request - See ASICacheDelegate.h for possible values</span>
<a name="l00456"></a>00456 ASICachePolicy cachePolicy;
<a name="l00457"></a>00457
<a name="l00458"></a>00458 <span class="comment">// The cache storage policy that will be used for this request - See ASICacheDelegate.h for possible values</span>
<a name="l00459"></a>00459 ASICacheStoragePolicy cacheStoragePolicy;
<a name="l00460"></a>00460
<a name="l00461"></a>00461 <span class="comment">// Will be true when the response was pulled from the cache rather than downloaded</span>
<a name="l00462"></a>00462 BOOL didUseCachedResponse;
<a name="l00463"></a>00463
<a name="l00464"></a>00464 <span class="comment">// Set secondsToCache to use a custom time interval for expiring the response when it is stored in a cache</span>
<a name="l00465"></a>00465 NSTimeInterval secondsToCache;
<a name="l00466"></a>00466
<a name="l00467"></a>00467 <span class="preprocessor"> #if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0</span>
<a name="l00468"></a>00468 <span class="preprocessor"></span> BOOL shouldContinueWhenAppEntersBackground;
<a name="l00469"></a>00469 UIBackgroundTaskIdentifier backgroundTask;
<a name="l00470"></a>00470 <span class="preprocessor"> #endif</span>
<a name="l00471"></a>00471 <span class="preprocessor"></span>
<a name="l00472"></a>00472 <span class="comment">// When downloading a gzipped response, the request will use this helper object to inflate the response</span>
<a name="l00473"></a>00473 ASIDataDecompressor *dataDecompressor;
<a name="l00474"></a>00474
<a name="l00475"></a>00475 <span class="comment">// Controls how responses with a gzipped encoding are inflated (decompressed)</span>
<a name="l00476"></a>00476 <span class="comment">// When set to YES (This is the default):</span>
<a name="l00477"></a>00477 <span class="comment">// * gzipped responses for requests without a downloadDestinationPath will be inflated only when [request responseData] / [request responseString] is called</span>
<a name="l00478"></a>00478 <span class="comment">// * gzipped responses for requests with a downloadDestinationPath set will be inflated only when the request completes</span>
<a name="l00479"></a>00479 <span class="comment">//</span>
<a name="l00480"></a>00480 <span class="comment">// When set to NO</span>
<a name="l00481"></a>00481 <span class="comment">// All requests will inflate the response as it comes in</span>
<a name="l00482"></a>00482 <span class="comment">// * If the request has no downloadDestinationPath set, the raw (compressed) response is discarded and rawResponseData will contain the decompressed response</span>
<a name="l00483"></a>00483 <span class="comment">// * If the request has a downloadDestinationPath, the raw response will be stored in temporaryFileDownloadPath as normal, the inflated response will be stored in temporaryUncompressedDataDownloadPath</span>
<a name="l00484"></a>00484 <span class="comment">// Once the request completes successfully, the contents of temporaryUncompressedDataDownloadPath are moved into downloadDestinationPath</span>
<a name="l00485"></a>00485 <span class="comment">//</span>
<a name="l00486"></a>00486 <span class="comment">// Setting this to NO may be especially useful for users using ASIHTTPRequest in conjunction with a streaming parser, as it will allow partial gzipped responses to be inflated and passed on to the parser while the request is still running</span>
<a name="l00487"></a>00487 BOOL shouldWaitToInflateCompressedResponses;
<a name="l00488"></a>00488
<a name="l00489"></a>00489 <span class="comment">// Will be YES if this is a request created behind the scenes to download a PAC file - these requests do not attempt to configure their own proxies</span>
<a name="l00490"></a>00490 BOOL isPACFileRequest;
<a name="l00491"></a>00491
<a name="l00492"></a>00492 <span class="comment">// Used for downloading PAC files from http / https webservers</span>
<a name="l00493"></a>00493 ASIHTTPRequest *PACFileRequest;
<a name="l00494"></a>00494
<a name="l00495"></a>00495 <span class="comment">// Used for asynchronously reading PAC files from file:// URLs</span>
<a name="l00496"></a>00496 NSInputStream *PACFileReadStream;
<a name="l00497"></a>00497
<a name="l00498"></a>00498 <span class="comment">// Used for storing PAC data from file URLs as it is downloaded</span>
<a name="l00499"></a>00499 NSMutableData *PACFileData;
<a name="l00500"></a>00500
<a name="l00501"></a>00501 <span class="comment">// Set to YES in startSynchronous. Currently used by proxy detection to download PAC files synchronously when appropriate</span>
<a name="l00502"></a>00502 BOOL isSynchronous;
<a name="l00503"></a>00503
<a name="l00504"></a>00504 <span class="preprocessor"> #if NS_BLOCKS_AVAILABLE</span>
<a name="l00505"></a>00505 <span class="preprocessor"></span> <span class="comment">//block to execute when request starts</span>
<a name="l00506"></a>00506 ASIBasicBlock startedBlock;
<a name="l00507"></a>00507
<a name="l00508"></a>00508 <span class="comment">//block to execute when headers are received</span>
<a name="l00509"></a>00509 ASIHeadersBlock headersReceivedBlock;
<a name="l00510"></a>00510
<a name="l00511"></a>00511 <span class="comment">//block to execute when request completes successfully</span>
<a name="l00512"></a>00512 ASIBasicBlock completionBlock;
<a name="l00513"></a>00513
<a name="l00514"></a>00514 <span class="comment">//block to execute when request fails</span>
<a name="l00515"></a>00515 ASIBasicBlock failureBlock;
<a name="l00516"></a>00516
<a name="l00517"></a>00517 <span class="comment">//block for when bytes are received</span>
<a name="l00518"></a>00518 ASIProgressBlock bytesReceivedBlock;
<a name="l00519"></a>00519
<a name="l00520"></a>00520 <span class="comment">//block for when bytes are sent</span>
<a name="l00521"></a>00521 ASIProgressBlock bytesSentBlock;
<a name="l00522"></a>00522
<a name="l00523"></a>00523 <span class="comment">//block for when download size is incremented</span>
<a name="l00524"></a>00524 ASISizeBlock downloadSizeIncrementedBlock;
<a name="l00525"></a>00525
<a name="l00526"></a>00526 <span class="comment">//block for when upload size is incremented</span>
<a name="l00527"></a>00527 ASISizeBlock uploadSizeIncrementedBlock;
<a name="l00528"></a>00528
<a name="l00529"></a>00529 <span class="comment">//block for handling raw bytes received</span>
<a name="l00530"></a>00530 ASIDataBlock dataReceivedBlock;
<a name="l00531"></a>00531
<a name="l00532"></a>00532 <span class="comment">//block for handling authentication</span>
<a name="l00533"></a>00533 ASIBasicBlock authenticationNeededBlock;
<a name="l00534"></a>00534
<a name="l00535"></a>00535 <span class="comment">//block for handling proxy authentication</span>
<a name="l00536"></a>00536 ASIBasicBlock proxyAuthenticationNeededBlock;
<a name="l00537"></a>00537
<a name="l00538"></a>00538 <span class="comment">//block for handling redirections, if you want to</span>
<a name="l00539"></a>00539 ASIBasicBlock requestRedirectedBlock;
<a name="l00540"></a>00540 <span class="preprocessor"> #endif</span>
<a name="l00541"></a>00541 <span class="preprocessor"></span>}
<a name="l00542"></a>00542
<a name="l00543"></a>00543 <span class="preprocessor">#pragma mark init / dealloc</span>
<a name="l00544"></a>00544 <span class="preprocessor"></span>
<a name="l00545"></a>00545 <span class="comment">// Should be an HTTP or HTTPS url, may include username and password if appropriate</span>
<a name="l00546"></a>00546 - (id)initWithURL:(NSURL *)newURL;
<a name="l00547"></a>00547
<a name="l00548"></a>00548 <span class="comment">// Convenience constructor</span>
<a name="l00549"></a>00549 + (id)requestWithURL:(NSURL *)newURL;
<a name="l00550"></a>00550
<a name="l00551"></a>00551 + (id)requestWithURL:(NSURL *)newURL usingCache:(<span class="keywordtype">id</span> <ASICacheDelegate>)cache;
<a name="l00552"></a>00552 + (id)requestWithURL:(NSURL *)newURL usingCache:(<span class="keywordtype">id</span> <ASICacheDelegate>)cache andCachePolicy:(ASICachePolicy)policy;
<a name="l00553"></a>00553
<a name="l00554"></a>00554 <span class="preprocessor">#if NS_BLOCKS_AVAILABLE</span>
<a name="l00555"></a>00555 <span class="preprocessor"></span>- (void)setStartedBlock:(ASIBasicBlock)aStartedBlock;
<a name="l00556"></a>00556 - (void)setHeadersReceivedBlock:(ASIHeadersBlock)aReceivedBlock;
<a name="l00557"></a>00557 - (void)setCompletionBlock:(ASIBasicBlock)aCompletionBlock;
<a name="l00558"></a>00558 - (void)setFailedBlock:(ASIBasicBlock)aFailedBlock;
<a name="l00559"></a>00559 - (void)setBytesReceivedBlock:(ASIProgressBlock)aBytesReceivedBlock;
<a name="l00560"></a>00560 - (void)setBytesSentBlock:(ASIProgressBlock)aBytesSentBlock;
<a name="l00561"></a>00561 - (void)setDownloadSizeIncrementedBlock:(ASISizeBlock) aDownloadSizeIncrementedBlock;
<a name="l00562"></a>00562 - (void)setUploadSizeIncrementedBlock:(ASISizeBlock) anUploadSizeIncrementedBlock;
<a name="l00563"></a>00563 - (void)setDataReceivedBlock:(ASIDataBlock)aReceivedBlock;
<a name="l00564"></a>00564 - (void)setAuthenticationNeededBlock:(ASIBasicBlock)anAuthenticationBlock;
<a name="l00565"></a>00565 - (void)setProxyAuthenticationNeededBlock:(ASIBasicBlock)aProxyAuthenticationBlock;
<a name="l00566"></a>00566 - (void)setRequestRedirectedBlock:(ASIBasicBlock)aRedirectBlock;
<a name="l00567"></a>00567 <span class="preprocessor">#endif</span>
<a name="l00568"></a>00568 <span class="preprocessor"></span>
<a name="l00569"></a>00569 <span class="preprocessor">#pragma mark setup request</span>
<a name="l00570"></a>00570 <span class="preprocessor"></span>
<a name="l00571"></a>00571 <span class="comment">// Add a custom header to the request</span>
<a name="l00572"></a>00572 - (void)addRequestHeader:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)header value:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)value;
<a name="l00573"></a>00573
<a name="l00574"></a>00574 <span class="comment">// Called during buildRequestHeaders and after a redirect to create a cookie header from request cookies and the global store</span>
<a name="l00575"></a>00575 - (void)applyCookieHeader;
<a name="l00576"></a>00576
<a name="l00577"></a>00577 <span class="comment">// Populate the request headers dictionary. Called before a request is started, or by a HEAD request that needs to borrow them</span>
<a name="l00578"></a>00578 - (void)buildRequestHeaders;
<a name="l00579"></a>00579
<a name="l00580"></a>00580 <span class="comment">// Used to apply authorization header to a request before it is sent (when shouldPresentCredentialsBeforeChallenge is YES)</span>
<a name="l00581"></a>00581 - (void)applyAuthorizationHeader;
<a name="l00582"></a>00582
<a name="l00583"></a>00583
<a name="l00584"></a>00584 <span class="comment">// Create the post body</span>
<a name="l00585"></a>00585 - (void)buildPostBody;
<a name="l00586"></a>00586
<a name="l00587"></a>00587 <span class="comment">// Called to add data to the post body. Will append to postBody when shouldStreamPostDataFromDisk is false, or write to postBodyWriteStream when true</span>
<a name="l00588"></a>00588 - (void)appendPostData:(<a class="code" href="class_n_s_data.html" title="For hashing raw data.">NSData</a> *)data;
<a name="l00589"></a>00589 - (void)appendPostDataFromFile:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)file;
<a name="l00590"></a>00590
<a name="l00591"></a>00591 <span class="preprocessor">#pragma mark get information about this request</span>
<a name="l00592"></a>00592 <span class="preprocessor"></span>
<a name="l00593"></a>00593 <span class="comment">// Returns the contents of the result as an NSString (not appropriate for binary data - used responseData instead)</span>
<a name="l00594"></a>00594 - (<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)responseString;
<a name="l00595"></a>00595
<a name="l00596"></a>00596 <span class="comment">// Response data, automatically uncompressed where appropriate</span>
<a name="l00597"></a>00597 - (<a class="code" href="class_n_s_data.html" title="For hashing raw data.">NSData</a> *)responseData;
<a name="l00598"></a>00598
<a name="l00599"></a>00599 <span class="comment">// Returns true if the response was gzip compressed</span>
<a name="l00600"></a>00600 - (BOOL)isResponseCompressed;
<a name="l00601"></a>00601
<a name="l00602"></a>00602 <span class="preprocessor">#pragma mark running a request</span>
<a name="l00603"></a>00603 <span class="preprocessor"></span>
<a name="l00604"></a>00604
<a name="l00605"></a>00605 <span class="comment">// Run a request synchronously, and return control when the request completes or fails</span>
<a name="l00606"></a>00606 - (void)startSynchronous;
<a name="l00607"></a>00607
<a name="l00608"></a>00608 <span class="comment">// Run request in the background</span>
<a name="l00609"></a>00609 - (void)startAsynchronous;
<a name="l00610"></a>00610
<a name="l00611"></a>00611 <span class="comment">// Clears all delegates and blocks, then cancels the request</span>
<a name="l00612"></a>00612 - (void)clearDelegatesAndCancel;
<a name="l00613"></a>00613
<a name="l00614"></a>00614 <span class="preprocessor">#pragma mark HEAD request</span>
<a name="l00615"></a>00615 <span class="preprocessor"></span>
<a name="l00616"></a>00616 <span class="comment">// Used by ASINetworkQueue to create a HEAD request appropriate for this request with the same headers (though you can use it yourself)</span>
<a name="l00617"></a>00617 - (ASIHTTPRequest *)HEADRequest;
<a name="l00618"></a>00618
<a name="l00619"></a>00619 <span class="preprocessor">#pragma mark upload/download progress</span>
<a name="l00620"></a>00620 <span class="preprocessor"></span>
<a name="l00621"></a>00621 <span class="comment">// Called approximately every 0.25 seconds to update the progress delegates</span>
<a name="l00622"></a>00622 - (void)updateProgressIndicators;
<a name="l00623"></a>00623
<a name="l00624"></a>00624 <span class="comment">// Updates upload progress (notifies the queue and/or uploadProgressDelegate of this request)</span>
<a name="l00625"></a>00625 - (void)updateUploadProgress;
<a name="l00626"></a>00626
<a name="l00627"></a>00627 <span class="comment">// Updates download progress (notifies the queue and/or uploadProgressDelegate of this request)</span>
<a name="l00628"></a>00628 - (void)updateDownloadProgress;
<a name="l00629"></a>00629
<a name="l00630"></a>00630 <span class="comment">// Called when authorisation is needed, as we only find out we don't have permission to something when the upload is complete</span>
<a name="l00631"></a>00631 - (void)removeUploadProgressSoFar;
<a name="l00632"></a>00632
<a name="l00633"></a>00633 <span class="comment">// Called when we get a content-length header and shouldResetDownloadProgress is true</span>
<a name="l00634"></a>00634 - (void)incrementDownloadSizeBy:(<span class="keywordtype">long</span> <span class="keywordtype">long</span>)length;
<a name="l00635"></a>00635
<a name="l00636"></a>00636 <span class="comment">// Called when a request starts and shouldResetUploadProgress is true</span>
<a name="l00637"></a>00637 <span class="comment">// Also called (with a negative length) to remove the size of the underlying buffer used for uploading</span>
<a name="l00638"></a>00638 - (void)incrementUploadSizeBy:(<span class="keywordtype">long</span> <span class="keywordtype">long</span>)length;
<a name="l00639"></a>00639
<a name="l00640"></a>00640 <span class="comment">// Helper method for interacting with progress indicators to abstract the details of different APIS (NSProgressIndicator and UIProgressView)</span>
<a name="l00641"></a>00641 + (void)updateProgressIndicator:(<span class="keywordtype">id</span> *)indicator withProgress:(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>)progress ofTotal:(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>)total;
<a name="l00642"></a>00642
<a name="l00643"></a>00643 <span class="comment">// Helper method used for performing invocations on the main thread (used for progress)</span>
<a name="l00644"></a>00644 + (void)performSelector:(<span class="keywordtype">SEL</span>)selector onTarget:(<span class="keywordtype">id</span> *)target withObject:(<span class="keywordtype">id</span>)object amount:(<span class="keywordtype">void</span> *)amount callerToRetain:(<span class="keywordtype">id</span>)caller;
<a name="l00645"></a>00645
<a name="l00646"></a>00646 <span class="preprocessor">#pragma mark talking to delegates</span>
<a name="l00647"></a>00647 <span class="preprocessor"></span>
<a name="l00648"></a>00648 <span class="comment">// Called when a request starts, lets the delegate know via didStartSelector</span>
<a name="l00649"></a>00649 - (void)requestStarted;
<a name="l00650"></a>00650
<a name="l00651"></a>00651 <span class="comment">// Called when a request receives response headers, lets the delegate know via didReceiveResponseHeadersSelector</span>
<a name="l00652"></a>00652 - (void)requestReceivedResponseHeaders:(NSDictionary *)newHeaders;
<a name="l00653"></a>00653
<a name="l00654"></a>00654 <span class="comment">// Called when a request completes successfully, lets the delegate know via didFinishSelector</span>
<a name="l00655"></a>00655 - (void)requestFinished;
<a name="l00656"></a>00656
<a name="l00657"></a>00657 <span class="comment">// Called when a request fails, and lets the delegate know via didFailSelector</span>
<a name="l00658"></a>00658 - (void)failWithError:(NSError *)theError;
<a name="l00659"></a>00659
<a name="l00660"></a>00660 <span class="comment">// Called to retry our request when our persistent connection is closed</span>
<a name="l00661"></a>00661 <span class="comment">// Returns YES if we haven't already retried, and connection will be restarted</span>
<a name="l00662"></a>00662 <span class="comment">// Otherwise, returns NO, and nothing will happen</span>
<a name="l00663"></a>00663 - (BOOL)retryUsingNewConnection;
<a name="l00664"></a>00664
<a name="l00665"></a>00665 <span class="comment">// Can be called by delegates from inside their willRedirectSelector implementations to restart the request with a new url</span>
<a name="l00666"></a>00666 - (void)redirectToURL:(NSURL *)newURL;
<a name="l00667"></a>00667
<a name="l00668"></a>00668 <span class="preprocessor">#pragma mark parsing HTTP response headers</span>
<a name="l00669"></a>00669 <span class="preprocessor"></span>
<a name="l00670"></a>00670 <span class="comment">// Reads the response headers to find the content length, encoding, cookies for the session </span>
<a name="l00671"></a>00671 <span class="comment">// Also initiates request redirection when shouldRedirect is true</span>
<a name="l00672"></a>00672 <span class="comment">// And works out if HTTP auth is required</span>
<a name="l00673"></a>00673 - (void)readResponseHeaders;
<a name="l00674"></a>00674
<a name="l00675"></a>00675 <span class="comment">// Attempts to set the correct encoding by looking at the Content-Type header, if this is one</span>
<a name="l00676"></a>00676 - (void)parseStringEncodingFromHeaders;
<a name="l00677"></a>00677
<a name="l00678"></a>00678 + (void)parseMimeType:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> **)mimeType andResponseEncoding:(NSStringEncoding *)stringEncoding fromContentType:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)contentType;
<a name="l00679"></a>00679
<a name="l00680"></a>00680 <span class="preprocessor">#pragma mark http authentication stuff</span>
<a name="l00681"></a>00681 <span class="preprocessor"></span>
<a name="l00682"></a>00682 <span class="comment">// Apply credentials to this request</span>
<a name="l00683"></a>00683 - (BOOL)applyCredentials:(NSDictionary *)newCredentials;
<a name="l00684"></a>00684 - (BOOL)applyProxyCredentials:(NSDictionary *)newCredentials;
<a name="l00685"></a>00685
<a name="l00686"></a>00686 <span class="comment">// Attempt to obtain credentials for this request from the URL, username and password or keychain</span>
<a name="l00687"></a>00687 - (NSMutableDictionary *)findCredentials;
<a name="l00688"></a>00688 - (NSMutableDictionary *)findProxyCredentials;
<a name="l00689"></a>00689
<a name="l00690"></a>00690 <span class="comment">// Unlock (unpause) the request thread so it can resume the request</span>
<a name="l00691"></a>00691 <span class="comment">// Should be called by delegates when they have populated the authentication information after an authentication challenge</span>
<a name="l00692"></a>00692 - (void)retryUsingSuppliedCredentials;
<a name="l00693"></a>00693
<a name="l00694"></a>00694 <span class="comment">// Should be called by delegates when they wish to cancel authentication and stop</span>
<a name="l00695"></a>00695 - (void)cancelAuthentication;
<a name="l00696"></a>00696
<a name="l00697"></a>00697 <span class="comment">// Apply authentication information and resume the request after an authentication challenge</span>
<a name="l00698"></a>00698 - (void)attemptToApplyCredentialsAndResume;
<a name="l00699"></a>00699 - (void)attemptToApplyProxyCredentialsAndResume;
<a name="l00700"></a>00700
<a name="l00701"></a>00701 <span class="comment">// Attempt to show the built-in authentication dialog, returns YES if credentials were supplied, NO if user cancelled dialog / dialog is disabled / running on main thread</span>
<a name="l00702"></a>00702 <span class="comment">// Currently only used on iPhone OS</span>
<a name="l00703"></a>00703 - (BOOL)showProxyAuthenticationDialog;
<a name="l00704"></a>00704 - (BOOL)showAuthenticationDialog;
<a name="l00705"></a>00705
<a name="l00706"></a>00706 <span class="comment">// Construct a basic authentication header from the username and password supplied, and add it to the request headers</span>
<a name="l00707"></a>00707 <span class="comment">// Used when shouldPresentCredentialsBeforeChallenge is YES</span>
<a name="l00708"></a>00708 - (void)addBasicAuthenticationHeaderWithUsername:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)theUsername andPassword:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)thePassword;
<a name="l00709"></a>00709
<a name="l00710"></a>00710 <span class="preprocessor">#pragma mark stream status handlers</span>
<a name="l00711"></a>00711 <span class="preprocessor"></span>
<a name="l00712"></a>00712 <span class="comment">// CFnetwork event handlers</span>
<a name="l00713"></a>00713 - (void)handleNetworkEvent:(CFStreamEventType)type;
<a name="l00714"></a>00714 - (void)handleBytesAvailable;
<a name="l00715"></a>00715 - (void)handleStreamComplete;
<a name="l00716"></a>00716 - (void)handleStreamError;
<a name="l00717"></a>00717
<a name="l00718"></a>00718 <span class="preprocessor">#pragma mark cleanup</span>
<a name="l00719"></a>00719 <span class="preprocessor"></span>
<a name="l00720"></a>00720 <span class="comment">// Cleans up and lets the queue know this operation is finished.</span>
<a name="l00721"></a>00721 <span class="comment">// Appears in this header for subclassing only, do not call this method from outside your request!</span>
<a name="l00722"></a>00722 - (void)markAsFinished;
<a name="l00723"></a>00723
<a name="l00724"></a>00724 <span class="comment">// Cleans up temporary files. There's normally no reason to call these yourself, they are called automatically when a request completes or fails</span>
<a name="l00725"></a>00725
<a name="l00726"></a>00726 <span class="comment">// Clean up the temporary file used to store the downloaded data when it comes in (if downloadDestinationPath is set)</span>
<a name="l00727"></a>00727 - (BOOL)removeTemporaryDownloadFile;
<a name="l00728"></a>00728
<a name="l00729"></a>00729 <span class="comment">// Clean up the temporary file used to store data that is inflated (decompressed) as it comes in</span>
<a name="l00730"></a>00730 - (BOOL)removeTemporaryUncompressedDownloadFile;
<a name="l00731"></a>00731
<a name="l00732"></a>00732 <span class="comment">// Clean up the temporary file used to store the request body (when shouldStreamPostDataFromDisk is YES)</span>
<a name="l00733"></a>00733 - (BOOL)removeTemporaryUploadFile;
<a name="l00734"></a>00734
<a name="l00735"></a>00735 <span class="comment">// Clean up the temporary file used to store a deflated (compressed) request body when shouldStreamPostDataFromDisk is YES</span>
<a name="l00736"></a>00736 - (BOOL)removeTemporaryCompressedUploadFile;
<a name="l00737"></a>00737
<a name="l00738"></a>00738 <span class="comment">// Remove a file on disk, returning NO and populating the passed error pointer if it fails</span>
<a name="l00739"></a>00739 + (BOOL)removeFileAtPath:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)path error:(NSError **)err;
<a name="l00740"></a>00740
<a name="l00741"></a>00741 <span class="preprocessor">#pragma mark persistent connections</span>
<a name="l00742"></a>00742 <span class="preprocessor"></span>
<a name="l00743"></a>00743 <span class="comment">// Get the ID of the connection this request used (only really useful in tests and debugging)</span>
<a name="l00744"></a>00744 - (NSNumber *)connectionID;
<a name="l00745"></a>00745
<a name="l00746"></a>00746 <span class="comment">// Called automatically when a request is started to clean up any persistent connections that have expired</span>
<a name="l00747"></a>00747 + (void)expirePersistentConnections;
<a name="l00748"></a>00748
<a name="l00749"></a>00749 <span class="preprocessor">#pragma mark default time out</span>
<a name="l00750"></a>00750 <span class="preprocessor"></span>
<a name="l00751"></a>00751 + (NSTimeInterval)defaultTimeOutSeconds;
<a name="l00752"></a>00752 + (void)setDefaultTimeOutSeconds:(NSTimeInterval)newTimeOutSeconds;
<a name="l00753"></a>00753
<a name="l00754"></a>00754 <span class="preprocessor">#pragma mark client certificate</span>
<a name="l00755"></a>00755 <span class="preprocessor"></span>
<a name="l00756"></a>00756 - (void)setClientCertificateIdentity:(SecIdentityRef)anIdentity;
<a name="l00757"></a>00757
<a name="l00758"></a>00758 <span class="preprocessor">#pragma mark session credentials</span>
<a name="l00759"></a>00759 <span class="preprocessor"></span>
<a name="l00760"></a>00760 + (NSMutableArray *)sessionProxyCredentialsStore;
<a name="l00761"></a>00761 + (NSMutableArray *)sessionCredentialsStore;
<a name="l00762"></a>00762
<a name="l00763"></a>00763 + (void)storeProxyAuthenticationCredentialsInSessionStore:(NSDictionary *)credentials;
<a name="l00764"></a>00764 + (void)storeAuthenticationCredentialsInSessionStore:(NSDictionary *)credentials;
<a name="l00765"></a>00765
<a name="l00766"></a>00766 + (void)removeProxyAuthenticationCredentialsFromSessionStore:(NSDictionary *)credentials;
<a name="l00767"></a>00767 + (void)removeAuthenticationCredentialsFromSessionStore:(NSDictionary *)credentials;
<a name="l00768"></a>00768
<a name="l00769"></a>00769 - (NSDictionary *)findSessionProxyAuthenticationCredentials;
<a name="l00770"></a>00770 - (NSDictionary *)findSessionAuthenticationCredentials;
<a name="l00771"></a>00771
<a name="l00772"></a>00772 <span class="preprocessor">#pragma mark keychain storage</span>
<a name="l00773"></a>00773 <span class="preprocessor"></span>
<a name="l00774"></a>00774 <span class="comment">// Save credentials for this request to the keychain</span>
<a name="l00775"></a>00775 - (void)saveCredentialsToKeychain:(NSDictionary *)newCredentials;
<a name="l00776"></a>00776
<a name="l00777"></a>00777 <span class="comment">// Save credentials to the keychain</span>
<a name="l00778"></a>00778 + (void)saveCredentials:(NSURLCredential *)credentials forHost:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)host port:(<span class="keywordtype">int</span>)port protocol:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)protocol realm:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)realm;
<a name="l00779"></a>00779 + (void)saveCredentials:(NSURLCredential *)credentials forProxy:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)host port:(<span class="keywordtype">int</span>)port realm:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)realm;
<a name="l00780"></a>00780
<a name="l00781"></a>00781 <span class="comment">// Return credentials from the keychain</span>
<a name="l00782"></a>00782 + (NSURLCredential *)savedCredentialsForHost:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)host port:(<span class="keywordtype">int</span>)port protocol:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)protocol realm:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)realm;
<a name="l00783"></a>00783 + (NSURLCredential *)savedCredentialsForProxy:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)host port:(<span class="keywordtype">int</span>)port protocol:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)protocol realm:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)realm;
<a name="l00784"></a>00784
<a name="l00785"></a>00785 <span class="comment">// Remove credentials from the keychain</span>
<a name="l00786"></a>00786 + (void)removeCredentialsForHost:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)host port:(<span class="keywordtype">int</span>)port protocol:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)protocol realm:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)realm;
<a name="l00787"></a>00787 + (void)removeCredentialsForProxy:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)host port:(<span class="keywordtype">int</span>)port realm:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)realm;
<a name="l00788"></a>00788
<a name="l00789"></a>00789 <span class="comment">// We keep track of any cookies we accept, so that we can remove them from the persistent store later</span>
<a name="l00790"></a>00790 + (void)setSessionCookies:(NSMutableArray *)newSessionCookies;
<a name="l00791"></a>00791 + (NSMutableArray *)sessionCookies;
<a name="l00792"></a>00792
<a name="l00793"></a>00793 <span class="comment">// Adds a cookie to our list of cookies we've accepted, checking first for an old version of the same cookie and removing that</span>
<a name="l00794"></a>00794 + (void)addSessionCookie:(NSHTTPCookie *)newCookie;
<a name="l00795"></a>00795
<a name="l00796"></a>00796 <span class="comment">// Dump all session data (authentication and cookies)</span>
<a name="l00797"></a>00797 + (void)clearSession;
<a name="l00798"></a>00798
<a name="l00799"></a>00799 <span class="preprocessor">#pragma mark get user agent</span>
<a name="l00800"></a>00800 <span class="preprocessor"></span>
<a name="l00801"></a>00801 <span class="comment">// Will be used as a user agent if requests do not specify a custom user agent</span>
<a name="l00802"></a>00802 <span class="comment">// Is only used when you have specified a Bundle Display Name (CFDisplayBundleName) or Bundle Name (CFBundleName) in your plist</span>
<a name="l00803"></a>00803 + (<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)defaultUserAgentString;
<a name="l00804"></a>00804 + (void)setDefaultUserAgentString:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)agent;
<a name="l00805"></a>00805
<a name="l00806"></a>00806 <span class="preprocessor">#pragma mark mime-type detection</span>
<a name="l00807"></a>00807 <span class="preprocessor"></span>
<a name="l00808"></a>00808 <span class="comment">// Return the mime type for a file</span>
<a name="l00809"></a>00809 + (<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)mimeTypeForFileAtPath:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)path;
<a name="l00810"></a>00810
<a name="l00811"></a>00811 <span class="preprocessor">#pragma mark bandwidth measurement / throttling</span>
<a name="l00812"></a>00812 <span class="preprocessor"></span>
<a name="l00813"></a>00813 <span class="comment">// The maximum number of bytes ALL requests can send / receive in a second</span>
<a name="l00814"></a>00814 <span class="comment">// This is a rough figure. The actual amount used will be slightly more, this does not include HTTP headers</span>
<a name="l00815"></a>00815 + (<span class="keywordtype">unsigned</span> long)maxBandwidthPerSecond;
<a name="l00816"></a>00816 + (void)setMaxBandwidthPerSecond:(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)bytes;
<a name="l00817"></a>00817
<a name="l00818"></a>00818 <span class="comment">// Get a rough average (for the last 5 seconds) of how much bandwidth is being used, in bytes</span>
<a name="l00819"></a>00819 + (<span class="keywordtype">unsigned</span> long)averageBandwidthUsedPerSecond;
<a name="l00820"></a>00820
<a name="l00821"></a>00821 - (void)performThrottling;
<a name="l00822"></a>00822
<a name="l00823"></a>00823 <span class="comment">// Will return YES is bandwidth throttling is currently in use</span>
<a name="l00824"></a>00824 + (BOOL)isBandwidthThrottled;
<a name="l00825"></a>00825
<a name="l00826"></a>00826 <span class="comment">// Used internally to record bandwidth use, and by ASIInputStreams when uploading. It's probably best if you don't mess with this.</span>
<a name="l00827"></a>00827 + (void)incrementBandwidthUsedInLastSecond:(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)bytes;
<a name="l00828"></a>00828
<a name="l00829"></a>00829 <span class="comment">// On iPhone, ASIHTTPRequest can automatically turn throttling on and off as the connection type changes between WWAN and WiFi</span>
<a name="l00830"></a>00830
<a name="l00831"></a>00831 <span class="preprocessor">#if TARGET_OS_IPHONE</span>
<a name="l00832"></a>00832 <span class="preprocessor"></span><span class="comment">// Set to YES to automatically turn on throttling when WWAN is connected, and automatically turn it off when it isn't</span>
<a name="l00833"></a>00833 + (void)setShouldThrottleBandwidthForWWAN:(BOOL)throttle;
<a name="l00834"></a>00834
<a name="l00835"></a>00835 <span class="comment">// Turns on throttling automatically when WWAN is connected using a custom limit, and turns it off automatically when it isn't</span>
<a name="l00836"></a>00836 + (void)throttleBandwidthForWWANUsingLimit:(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)limit;
<a name="l00837"></a>00837
<a name="l00838"></a>00838 <span class="preprocessor">#pragma mark reachability</span>
<a name="l00839"></a>00839 <span class="preprocessor"></span>
<a name="l00840"></a>00840 <span class="comment">// Returns YES when an iPhone OS device is connected via WWAN, false when connected via WIFI or not connected</span>
<a name="l00841"></a>00841 + (BOOL)isNetworkReachableViaWWAN;
<a name="l00842"></a>00842
<a name="l00843"></a>00843 <span class="preprocessor">#endif</span>
<a name="l00844"></a>00844 <span class="preprocessor"></span>
<a name="l00845"></a>00845 <span class="preprocessor">#pragma mark queue</span>
<a name="l00846"></a>00846 <span class="preprocessor"></span>
<a name="l00847"></a>00847 <span class="comment">// Returns the shared queue</span>
<a name="l00848"></a>00848 + (NSOperationQueue *)sharedQueue;
<a name="l00849"></a>00849
<a name="l00850"></a>00850 <span class="preprocessor">#pragma mark cache</span>
<a name="l00851"></a>00851 <span class="preprocessor"></span>
<a name="l00852"></a>00852 + (void)setDefaultCache:(<span class="keywordtype">id</span> <ASICacheDelegate>)cache;
<a name="l00853"></a>00853 + (<span class="keywordtype">id</span> <ASICacheDelegate>)defaultCache;
<a name="l00854"></a>00854
<a name="l00855"></a>00855 <span class="comment">// Returns the maximum amount of data we can read as part of the current measurement period, and sleeps this thread if our allowance is used up</span>
<a name="l00856"></a>00856 + (<span class="keywordtype">unsigned</span> long)maxUploadReadLength;
<a name="l00857"></a>00857
<a name="l00858"></a>00858 <span class="preprocessor">#pragma mark network activity</span>
<a name="l00859"></a>00859 <span class="preprocessor"></span>
<a name="l00860"></a>00860 + (BOOL)isNetworkInUse;
<a name="l00861"></a>00861
<a name="l00862"></a>00862 + (void)setShouldUpdateNetworkActivityIndicator:(BOOL)shouldUpdate;
<a name="l00863"></a>00863
<a name="l00864"></a>00864 <span class="comment">// Shows the network activity spinner thing on iOS. You may wish to override this to do something else in Mac projects</span>
<a name="l00865"></a>00865 + (void)showNetworkActivityIndicator;
<a name="l00866"></a>00866
<a name="l00867"></a>00867 <span class="comment">// Hides the network activity spinner thing on iOS</span>
<a name="l00868"></a>00868 + (void)hideNetworkActivityIndicator;
<a name="l00869"></a>00869
<a name="l00870"></a>00870 <span class="preprocessor">#pragma mark miscellany</span>
<a name="l00871"></a>00871 <span class="preprocessor"></span>
<a name="l00872"></a>00872 <span class="comment">// Used for generating Authorization header when using basic authentication when shouldPresentCredentialsBeforeChallenge is true</span>
<a name="l00873"></a>00873 <span class="comment">// And also by ASIS3Request</span>
<a name="l00874"></a>00874 + (<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)base64forData:(<a class="code" href="class_n_s_data.html" title="For hashing raw data.">NSData</a> *)theData;
<a name="l00875"></a>00875
<a name="l00876"></a>00876 <span class="comment">// Returns the expiration date for the request.</span>
<a name="l00877"></a>00877 <span class="comment">// Calculated from the Expires response header property, unless maxAge is non-zero or</span>
<a name="l00878"></a>00878 <span class="comment">// there exists a non-zero max-age property in the Cache-Control response header.</span>
<a name="l00879"></a>00879 + (NSDate *)expiryDateForRequest:(ASIHTTPRequest *)request maxAge:(NSTimeInterval)maxAge;
<a name="l00880"></a>00880
<a name="l00881"></a>00881 <span class="comment">// Returns a date from a string in RFC1123 format</span>
<a name="l00882"></a>00882 + (NSDate *)dateFromRFC1123String:(<a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *)string;
<a name="l00883"></a>00883
<a name="l00884"></a>00884
<a name="l00885"></a>00885 <span class="comment">// Used for detecting multitasking support at runtime (for backgrounding requests)</span>
<a name="l00886"></a>00886 <span class="preprocessor">#if TARGET_OS_IPHONE</span>
<a name="l00887"></a>00887 <span class="preprocessor"></span>+ (BOOL)isMultitaskingSupported;
<a name="l00888"></a>00888 <span class="preprocessor">#endif</span>
<a name="l00889"></a>00889 <span class="preprocessor"></span>
<a name="l00890"></a>00890 <span class="preprocessor">#pragma mark threading behaviour</span>
<a name="l00891"></a>00891 <span class="preprocessor"></span>
<a name="l00892"></a>00892 <span class="comment">// In the default implementation, all requests run in a single background thread</span>
<a name="l00893"></a>00893 <span class="comment">// Advanced users only: Override this method in a subclass for a different threading behaviour</span>
<a name="l00894"></a>00894 <span class="comment">// Eg: return [NSThread mainThread] to run all requests in the main thread</span>
<a name="l00895"></a>00895 <span class="comment">// Alternatively, you can create a thread on demand, or manage a pool of threads</span>
<a name="l00896"></a>00896 <span class="comment">// Threads returned by this method will need to run the runloop in default mode (eg CFRunLoopRun())</span>
<a name="l00897"></a>00897 <span class="comment">// Requests will stop the runloop when they complete</span>
<a name="l00898"></a>00898 <span class="comment">// If you have multiple requests sharing the thread you'll need to restart the runloop when this happens</span>
<a name="l00899"></a>00899 + (NSThread *)threadForRequest:(ASIHTTPRequest *)request;
<a name="l00900"></a>00900
<a name="l00901"></a>00901
<a name="l00902"></a>00902 <span class="preprocessor">#pragma mark ===</span>
<a name="l00903"></a>00903 <span class="preprocessor"></span>
<a name="l00904"></a>00904 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *username;
<a name="l00905"></a>00905 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *password;
<a name="l00906"></a>00906 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *userAgent;
<a name="l00907"></a>00907 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *domain;
<a name="l00908"></a>00908
<a name="l00909"></a>00909 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyUsername;
<a name="l00910"></a>00910 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyPassword;
<a name="l00911"></a>00911 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyDomain;
<a name="l00912"></a>00912
<a name="l00913"></a>00913 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyHost;
<a name="l00914"></a>00914 <span class="keyword">@property</span> (assign) <span class="keywordtype">int</span> proxyPort;
<a name="l00915"></a>00915 <span class="keyword">@property</span> (retain) <a class="code" href="class_n_s_string.html" title="For manipulating NSStrings.">NSString</a> *proxyType;
<a name="l00916"></a>00916
<a name="l00917"></a>00917 <span class="keyword">@property</span> (retain,setter=setURL:, nonatomic) NSURL *url;
<a name="l00918"></a>00918 <span class="keyword">@property</span> (retain) NSURL *originalURL;
<a name="l00919"></a>00919 <span class="keyword">@property</span> (assign, nonatomic) <span class="keywordtype">id</span> delegate;
<a name="l00920"></a>00920 <span class="keyword">@property</span> (retain, nonatomic) <span class="keywordtype">id</span> queue;
<a name="l00921"></a>00921 <span class="keyword">@property</span> (assign, nonatomic) <span class="keywordtype">id</span> uploadProgressDelegate;
<a name="l00922"></a>00922 <span class="keyword">@property</span> (assign, nonatomic) <span class="keywordtype">id</span> downloadProgressDelegate;