Showing
15 changed files
with
501 additions
and
0 deletions
ASIHTTPRequest.h
0 → 100644
1 | +// | ||
2 | +// ASIHTTPRequest.h | ||
3 | +// | ||
4 | +// Created by Ben Copsey on 04/10/2007. | ||
5 | +// Copyright 2007-2008 All-Seeing Interactive. All rights reserved. | ||
6 | +// | ||
7 | +// Portions are based on the ImageClient example from Apple: | ||
8 | +// See: http://developer.apple.com/samplecode/ImageClient/listing37.html | ||
9 | + | ||
10 | +#import <Cocoa/Cocoa.h> | ||
11 | +#import "ASIProgressDelegate.h" | ||
12 | + | ||
13 | +@interface ASIHTTPRequest : NSOperation { | ||
14 | + | ||
15 | + //The url for this operation, should include get params in the query string where appropriate | ||
16 | + NSURL *url; | ||
17 | + | ||
18 | + //The delegate, you need to manage setting and talking to your delegate in your subclasses | ||
19 | + id delegate; | ||
20 | + | ||
21 | + //Parameters that will be POSTed to the url | ||
22 | + NSMutableDictionary *postData; | ||
23 | + | ||
24 | + //Files that will be POSTed to the url | ||
25 | + NSMutableDictionary *fileData; | ||
26 | + | ||
27 | + //Dictionary for custom request headers | ||
28 | + NSMutableDictionary *requestHeaders; | ||
29 | + | ||
30 | + //If usesKeychain is true, network requests will attempt to read credentials from the keychain, and will save them in the keychain when they are successfully presented | ||
31 | + BOOL usesKeychain; | ||
32 | + | ||
33 | + //When downloadDestinationPath is set, the result of this request will be downloaded to the file at this location | ||
34 | + //If downloadDestinationPath is not set, download data will be stored in memory | ||
35 | + NSString *downloadDestinationPath; | ||
36 | + | ||
37 | + //Used for writing data to a file when downloadDestinationPath is set | ||
38 | + NSOutputStream *outputStream; | ||
39 | + | ||
40 | + //When the request fails or completes successfully, complete will be true | ||
41 | + BOOL complete; | ||
42 | + | ||
43 | + //If an error occurs, error will contain an NSError | ||
44 | + NSError *error; | ||
45 | + | ||
46 | + //If an authentication error occurs, we give the delegate a chance to handle it, ignoreError will be set to true | ||
47 | + BOOL ignoreError; | ||
48 | + | ||
49 | + //Username and password used for authentication | ||
50 | + NSString *username; | ||
51 | + NSString *password; | ||
52 | + | ||
53 | + //Delegate for displaying upload progress (usually an NSProgressIndicator, but you can supply a different object and handle this yourself) | ||
54 | + NSObject <ASIProgressDelegate> *uploadProgressDelegate; | ||
55 | + | ||
56 | + //Delegate for displaying download progress (usually an NSProgressIndicator, but you can supply a different object and handle this yourself) | ||
57 | + NSObject <ASIProgressDelegate> *downloadProgressDelegate; | ||
58 | + | ||
59 | + // Whether we've seen the headers of the response yet | ||
60 | + BOOL haveExaminedHeaders; | ||
61 | + | ||
62 | + //Data we receive will be stored here | ||
63 | + CFMutableDataRef receivedData; | ||
64 | + | ||
65 | + //Used for sending and receiving data | ||
66 | + CFHTTPMessageRef request; | ||
67 | + CFReadStreamRef readStream; | ||
68 | + | ||
69 | + // Authentication currently being used for prompting and resuming | ||
70 | + CFHTTPAuthenticationRef authentication; | ||
71 | + | ||
72 | + // Credentials associated with the authentication (reused until server says no) | ||
73 | + CFMutableDictionaryRef credentials; | ||
74 | + | ||
75 | + //Size of the response | ||
76 | + double contentLength; | ||
77 | + | ||
78 | + //Size of the POST payload | ||
79 | + double postLength; | ||
80 | + | ||
81 | + //Timer used to update the progress delegates | ||
82 | + NSTimer *progressTimer; | ||
83 | + | ||
84 | + //The total amount of downloaded data | ||
85 | + double totalBytesRead; | ||
86 | + | ||
87 | + //Realm for authentication when credentials are required | ||
88 | + NSString *authenticationRealm; | ||
89 | + | ||
90 | + //Called on the delegate when the request completes successfully | ||
91 | + SEL didFinishSelector; | ||
92 | + | ||
93 | + //Called on the delegate when the request fails | ||
94 | + SEL didFailSelector; | ||
95 | + | ||
96 | + //This lock will block the request until the delegate supplies authentication info | ||
97 | + NSConditionLock *authenticationLock; | ||
98 | +} | ||
99 | + | ||
100 | +// Should be an HTTP or HTTPS url, may include username and password if appropriate | ||
101 | +- (id)initWithURL:(NSURL *)newURL; | ||
102 | + | ||
103 | +//Add a POST variable to the request | ||
104 | +- (void)setPostValue:(id)value forKey:(NSString *)key; | ||
105 | + | ||
106 | +//Add the contents of a local file as a POST variable to the request | ||
107 | +- (void)setFile:(NSString *)filePath forKey:(NSString *)key; | ||
108 | + | ||
109 | +//Add a custom header to the request | ||
110 | +- (void)addRequestHeader:(NSString *)header value:(NSString *)value; | ||
111 | + | ||
112 | +//the results of this request will be saved to downloadDestinationPath, if it is set | ||
113 | +- (void)setDownloadDestinationPath:(NSString *)newDestinationPath; | ||
114 | +- (NSString *)downloadDestinationPath; | ||
115 | + | ||
116 | +// When set, username and password will be presented for HTTP authentication | ||
117 | +- (void)setUsername:(NSString *)newUsername andPassword:(NSString *)newPassword; | ||
118 | + | ||
119 | +// Delegate will get messages when the request completes, fails or when authentication is required | ||
120 | +- (void)setDelegate:(id)newDelegate; | ||
121 | + | ||
122 | +// Called on the delegate when the request completes successfully | ||
123 | +- (void)setDidFinishSelector:(SEL)selector; | ||
124 | + | ||
125 | +// Called on the delegate when the request fails | ||
126 | +- (void)setDidFailSelector:(SEL)selector; | ||
127 | + | ||
128 | +// upload progress delegate (usually an NSProgressIndicator) is sent information on upload progress | ||
129 | +- (void)setUploadProgressDelegate:(id)newDelegate; | ||
130 | + | ||
131 | +// download progress delegate (usually an NSProgressIndicator) is sent information on download progress | ||
132 | +- (void)setDownloadProgressDelegate:(id)newDelegate; | ||
133 | + | ||
134 | +// When true, authentication information will automatically be stored in (and re-used from) the keychain | ||
135 | +- (void)setUsesKeychain:(BOOL)shouldUseKeychain; | ||
136 | + | ||
137 | +// Will be true when the request is complete (success or failure) | ||
138 | +- (BOOL)complete; | ||
139 | + | ||
140 | +// Returns the contents of the result as an NSString (not appropriate for binary data!) | ||
141 | +- (NSString *)dataString; | ||
142 | + | ||
143 | +// Accessors for getting information about the request (useful for auth dialogs) | ||
144 | +- (NSString *)authenticationRealm; | ||
145 | +- (NSString *)host; | ||
146 | + | ||
147 | +// Contains a description of the error that occurred if the request failed | ||
148 | +- (NSError *)error; | ||
149 | + | ||
150 | + | ||
151 | +// CFnetwork event handlers | ||
152 | +- (void)handleStreamComplete; | ||
153 | +- (void)handleStreamError; | ||
154 | +- (void)handleBytesAvailable; | ||
155 | +- (void)handleNetworkEvent:(CFStreamEventType)type; | ||
156 | + | ||
157 | +// Start loading the request | ||
158 | +- (void)loadRequest; | ||
159 | + | ||
160 | +// Reads the response headers to find the content length, and returns true if the request needs a username and password (or if those supplied were incorrect) | ||
161 | +- (BOOL)isAuthorizationFailure; | ||
162 | + | ||
163 | +// Apply authentication information and resume the request after an authentication challenge | ||
164 | +- (void)applyCredentialsAndResume; | ||
165 | + | ||
166 | +// Unlock (unpause) the request thread so it can resume the request | ||
167 | +// Should be called by delegates when they have populated the authentication information after an authentication challenge | ||
168 | +- (void)retryWithAuthentication; | ||
169 | + | ||
170 | +// Cancel loading and clean up | ||
171 | +- (void)cancelLoad; | ||
172 | + | ||
173 | +// Called from timer on main thread to update progress delegates | ||
174 | +- (void)updateUploadProgress; | ||
175 | +- (void)updateDownloadProgress; | ||
176 | + | ||
177 | +#pragma mark keychain stuff | ||
178 | + | ||
179 | +//Save credentials to the keychain | ||
180 | ++ (void)saveCredentials:(NSURLCredential *)credentials forHost:(NSString *)host port:(int)port protocol:(NSString *)protocol realm:(NSString *)realm; | ||
181 | + | ||
182 | +//Return credentials from the keychain | ||
183 | ++ (NSURLCredential *)savedCredentialsForHost:(NSString *)host port:(int)port protocol:(NSString *)protocol realm:(NSString *)realm; | ||
184 | + | ||
185 | +//Called when a request completes successfully | ||
186 | +- (void)requestFinished; | ||
187 | + | ||
188 | +//Called when a request fails | ||
189 | +- (void)failWithProblem:(NSString *)problem; | ||
190 | + | ||
191 | +@end |
ASIHTTPRequest.m
0 → 100644
This diff is collapsed. Click to expand it.
ASIProgressDelegate.h
0 → 100644
1 | +// | ||
2 | +// ASIProgressDelegate.h | ||
3 | +// | ||
4 | +// Created by Ben Copsey on 28/03/2008. | ||
5 | +// Copyright 2008 All-Seeing Interactive. All rights reserved | ||
6 | +// | ||
7 | + | ||
8 | +#import <Cocoa/Cocoa.h> | ||
9 | + | ||
10 | +@protocol ASIProgressDelegate | ||
11 | + | ||
12 | +- (void)incrementProgress; | ||
13 | +- (void)setDoubleValue:(double)newValue; | ||
14 | +- (void)incrementBy:(double)amount; | ||
15 | +- (void)setMaxValue:(double)newMax; | ||
16 | +@end |
AppDelegate.h
0 → 100644
1 | +// | ||
2 | +// AppDelegate.h | ||
3 | +// | ||
4 | +// Created by Ben Copsey on 09/07/2008. | ||
5 | +// Copyright 2008 All-Seeing Interactive Ltd. All rights reserved. | ||
6 | +// | ||
7 | + | ||
8 | +#import <Cocoa/Cocoa.h> | ||
9 | +@class ASIHTTPRequest; | ||
10 | + | ||
11 | +@interface AppDelegate : NSObject { | ||
12 | + NSOperationQueue *networkQueue; | ||
13 | + IBOutlet NSProgressIndicator *progressIndicator; | ||
14 | + IBOutlet NSTextView *htmlSource; | ||
15 | + IBOutlet NSTextField *fileLocation; | ||
16 | + IBOutlet NSWindow *window; | ||
17 | + IBOutlet NSWindow *loginWindow; | ||
18 | + | ||
19 | + IBOutlet NSTextField *host; | ||
20 | + IBOutlet NSTextField *realm; | ||
21 | + IBOutlet NSTextField *username; | ||
22 | + IBOutlet NSTextField *password; | ||
23 | + | ||
24 | + IBOutlet NSTextField *topSecretInfo; | ||
25 | + IBOutlet NSButton *keychainCheckbox; | ||
26 | + | ||
27 | + IBOutlet NSImageView *imageView1; | ||
28 | + IBOutlet NSImageView *imageView2; | ||
29 | + IBOutlet NSImageView *imageView3; | ||
30 | +} | ||
31 | + | ||
32 | +- (IBAction)simpleURLFetch:(id)sender; | ||
33 | +- (IBAction)URLFetchWithProgress:(id)sender; | ||
34 | + | ||
35 | + | ||
36 | +- (IBAction)fetchThreeImages:(id)sender; | ||
37 | + | ||
38 | +- (void)authorizationNeededForRequest:(ASIHTTPRequest *)request; | ||
39 | +- (IBAction)dismissAuthSheet:(id)sender; | ||
40 | +- (IBAction)fetchTopSecretInformation:(id)sender; | ||
41 | + | ||
42 | +- (IBAction)postWithProgress:(id)sender; | ||
43 | +@end |
AppDelegate.m
0 → 100644
1 | +// | ||
2 | +// AppDelegate.m | ||
3 | +// | ||
4 | +// Created by Ben Copsey on 09/07/2008. | ||
5 | +// Copyright 2008 All-Seeing Interactive Ltd. All rights reserved. | ||
6 | +// | ||
7 | + | ||
8 | +#import "AppDelegate.h" | ||
9 | +#import "ASIHTTPRequest.h" | ||
10 | + | ||
11 | +@implementation AppDelegate | ||
12 | + | ||
13 | +- (id)init | ||
14 | +{ | ||
15 | + [super init]; | ||
16 | + networkQueue = [[NSOperationQueue alloc] init]; | ||
17 | + return self; | ||
18 | +} | ||
19 | + | ||
20 | +- (void)dealloc | ||
21 | +{ | ||
22 | + [networkQueue release]; | ||
23 | + [super dealloc]; | ||
24 | +} | ||
25 | + | ||
26 | + | ||
27 | +- (IBAction)simpleURLFetch:(id)sender | ||
28 | +{ | ||
29 | + ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com"]] autorelease]; | ||
30 | + [request start]; | ||
31 | + if ([request dataString]) { | ||
32 | + [htmlSource setString:[request dataString]]; | ||
33 | + } | ||
34 | +} | ||
35 | + | ||
36 | + | ||
37 | +- (IBAction)URLFetchWithProgress:(id)sender | ||
38 | +{ | ||
39 | + [networkQueue cancelAllOperations]; | ||
40 | + ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://trails-network.net/Downloads/MemexTrails_1.0b1.zip"]] autorelease]; | ||
41 | + [request setDelegate:self]; | ||
42 | + [request setDownloadProgressDelegate:progressIndicator]; | ||
43 | + [request setDidFinishSelector:@selector(URLFetchWithProgressComplete:)]; | ||
44 | + [request setDownloadDestinationPath:[[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"MemexTrails_1.0b1.zip"]]; | ||
45 | + [networkQueue addOperation:request]; | ||
46 | +} | ||
47 | + | ||
48 | +- (void)URLFetchWithProgressComplete:(ASIHTTPRequest *)request | ||
49 | +{ | ||
50 | + if ([request error]) { | ||
51 | + [fileLocation setStringValue:[NSString stringWithFormat:@"An error occurred: %@",[[[request error] userInfo] objectForKey:@"Title"]]]; | ||
52 | + } else { | ||
53 | + [fileLocation setStringValue:[NSString stringWithFormat:@"File downloaded to %@",[request downloadDestinationPath]]]; | ||
54 | + } | ||
55 | +} | ||
56 | + | ||
57 | +- (IBAction)fetchThreeImages:(id)sender | ||
58 | +{ | ||
59 | + [imageView1 setImage:nil]; | ||
60 | + [imageView2 setImage:nil]; | ||
61 | + [imageView3 setImage:nil]; | ||
62 | + | ||
63 | + [networkQueue cancelAllOperations]; | ||
64 | + [progressIndicator setDoubleValue:0]; | ||
65 | + [progressIndicator setMaxValue:3]; | ||
66 | + ASIHTTPRequest *request; | ||
67 | + request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/logo.png"]] autorelease]; | ||
68 | + [request setDelegate:self]; | ||
69 | + [request setDidFinishSelector:@selector(imageFetchComplete:)]; | ||
70 | + [request setDownloadDestinationPath:[[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"1.png"]]; | ||
71 | + [networkQueue addOperation:request]; | ||
72 | + | ||
73 | + request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/trailsnetwork.png"]] autorelease]; | ||
74 | + [request setDelegate:self]; | ||
75 | + [request setDidFinishSelector:@selector(imageFetchComplete:)]; | ||
76 | + [request setDownloadDestinationPath:[[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"2.png"]]; | ||
77 | + [networkQueue addOperation:request]; | ||
78 | + | ||
79 | + request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/sharedspace20.png"]] autorelease]; | ||
80 | + [request setDelegate:self]; | ||
81 | + [request setDidFinishSelector:@selector(imageFetchComplete:)]; | ||
82 | + [request setDownloadDestinationPath:[[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"3.png"]]; | ||
83 | + [networkQueue addOperation:request]; | ||
84 | +} | ||
85 | + | ||
86 | + | ||
87 | +- (void)imageFetchComplete:(ASIHTTPRequest *)request | ||
88 | +{ | ||
89 | + NSImage *img = [[[NSImage alloc] initWithContentsOfFile:[request downloadDestinationPath]] autorelease]; | ||
90 | + if (img) { | ||
91 | + if ([imageView1 image]) { | ||
92 | + if ([imageView2 image]) { | ||
93 | + [imageView3 setImage:img]; | ||
94 | + } else { | ||
95 | + [imageView2 setImage:img]; | ||
96 | + } | ||
97 | + } else { | ||
98 | + [imageView1 setImage:img]; | ||
99 | + } | ||
100 | + } | ||
101 | + [progressIndicator incrementBy:1]; | ||
102 | + | ||
103 | +} | ||
104 | + | ||
105 | + | ||
106 | +- (IBAction)fetchTopSecretInformation:(id)sender | ||
107 | +{ | ||
108 | + [networkQueue cancelAllOperations]; | ||
109 | + [progressIndicator setDoubleValue:0]; | ||
110 | + ASIHTTPRequest *request; | ||
111 | + request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/top_secret/"]] autorelease]; | ||
112 | + [request setDelegate:self]; | ||
113 | + [request setDidFinishSelector:@selector(topSecretFetchComplete:)]; | ||
114 | + [request setUsesKeychain:[keychainCheckbox state]]; | ||
115 | + [networkQueue addOperation:request]; | ||
116 | + | ||
117 | +} | ||
118 | + | ||
119 | +- (IBAction)topSecretFetchComplete:(ASIHTTPRequest *)request | ||
120 | +{ | ||
121 | + if (![request error]) { | ||
122 | + [topSecretInfo setStringValue:[request dataString]]; | ||
123 | + [topSecretInfo setFont:[NSFont boldSystemFontOfSize:13]]; | ||
124 | + } | ||
125 | +} | ||
126 | + | ||
127 | +- (void)authorizationNeededForRequest:(ASIHTTPRequest *)request | ||
128 | +{ | ||
129 | + [realm setStringValue:[request authenticationRealm]]; | ||
130 | + [host setStringValue:[request host]]; | ||
131 | + | ||
132 | + [NSApp beginSheet: loginWindow | ||
133 | + modalForWindow: window | ||
134 | + modalDelegate: self | ||
135 | + didEndSelector: @selector(authSheetDidEnd:returnCode:contextInfo:) | ||
136 | + contextInfo: request]; | ||
137 | +} | ||
138 | + | ||
139 | +- (IBAction)dismissAuthSheet:(id)sender { | ||
140 | + [[NSApplication sharedApplication] endSheet: loginWindow returnCode: [(NSControl*)sender tag]]; | ||
141 | +} | ||
142 | + | ||
143 | +- (void)authSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { | ||
144 | + ASIHTTPRequest *request = (ASIHTTPRequest *)contextInfo; | ||
145 | + if (returnCode == NSOKButton) { | ||
146 | + [request setUsername:[[[username stringValue] copy] autorelease] andPassword:[[[password stringValue] copy] autorelease]]; | ||
147 | + [request retryWithAuthentication]; | ||
148 | + } else { | ||
149 | + [request cancelLoad]; | ||
150 | + } | ||
151 | + [loginWindow orderOut: self]; | ||
152 | +} | ||
153 | + | ||
154 | +- (IBAction)postWithProgress:(id)sender | ||
155 | +{ | ||
156 | + //Create a 1mb file | ||
157 | + NSMutableData *data = [NSMutableData dataWithLength:1024*1024]; | ||
158 | + NSString *path = [[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"bigfile"]; | ||
159 | + [data writeToFile:path atomically:NO]; | ||
160 | + | ||
161 | + [networkQueue cancelAllOperations]; | ||
162 | + [progressIndicator setDoubleValue:0]; | ||
163 | + ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ignore"]] autorelease]; | ||
164 | + [request setDelegate:self]; | ||
165 | + [request setUploadProgressDelegate:progressIndicator]; | ||
166 | + [request setPostValue:@"test" forKey:@"value1"]; | ||
167 | + [request setPostValue:@"test" forKey:@"value2"]; | ||
168 | + [request setPostValue:@"test" forKey:@"value3"]; | ||
169 | + | ||
170 | + [request setFile:path forKey:@"file"]; | ||
171 | + | ||
172 | + [networkQueue addOperation:request]; | ||
173 | + | ||
174 | +} | ||
175 | + | ||
176 | + | ||
177 | + | ||
178 | +@end |
English.lproj/InfoPlist.strings
0 → 100644
English.lproj/MainMenu.nib/designable.nib
0 → 100644
This diff could not be displayed because it is too large.
English.lproj/MainMenu.nib/keyedobjects.nib
0 → 100644
No preview for this file type
Info.plist
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
3 | +<plist version="1.0"> | ||
4 | +<dict> | ||
5 | + <key>CFBundleDevelopmentRegion</key> | ||
6 | + <string>English</string> | ||
7 | + <key>CFBundleExecutable</key> | ||
8 | + <string>${EXECUTABLE_NAME}</string> | ||
9 | + <key>CFBundleIconFile</key> | ||
10 | + <string></string> | ||
11 | + <key>CFBundleIdentifier</key> | ||
12 | + <string>com.allseeing-i.asi-http-request</string> | ||
13 | + <key>CFBundleInfoDictionaryVersion</key> | ||
14 | + <string>6.0</string> | ||
15 | + <key>CFBundleName</key> | ||
16 | + <string>${PRODUCT_NAME}</string> | ||
17 | + <key>CFBundlePackageType</key> | ||
18 | + <string>APPL</string> | ||
19 | + <key>CFBundleSignature</key> | ||
20 | + <string>????</string> | ||
21 | + <key>CFBundleVersion</key> | ||
22 | + <string>1.0</string> | ||
23 | + <key>NSMainNibFile</key> | ||
24 | + <string>MainMenu</string> | ||
25 | + <key>NSPrincipalClass</key> | ||
26 | + <string>NSApplication</string> | ||
27 | +</dict> | ||
28 | +</plist> |
LICENSE
0 → 100644
1 | +* Copyright (c) 2007-2008, All-Seeing Interactive | ||
2 | +* All rights reserved. | ||
3 | +* | ||
4 | +* Redistribution and use in source and binary forms, with or without | ||
5 | +* modification, are permitted provided that the following conditions are met: | ||
6 | +* * Redistributions of source code must retain the above copyright | ||
7 | +* notice, this list of conditions and the following disclaimer. | ||
8 | +* * Redistributions in binary form must reproduce the above copyright | ||
9 | +* notice, this list of conditions and the following disclaimer in the | ||
10 | +* documentation and/or other materials provided with the distribution. | ||
11 | +* * Neither the name of the All-Seeing Interactive nor the | ||
12 | +* names of its contributors may be used to endorse or promote products | ||
13 | +* derived from this software without specific prior written permission. | ||
14 | +* | ||
15 | +* THIS SOFTWARE IS PROVIDED BY All-Seeing Interactive ''AS IS'' AND ANY | ||
16 | +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
17 | +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
18 | +* DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY | ||
19 | +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
20 | +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
21 | +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
22 | +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
23 | +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
24 | +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
asi-http-request.xcodeproj/ben.mode1v3
0 → 100644
This diff is collapsed. Click to expand it.
asi-http-request.xcodeproj/ben.pbxuser
0 → 100644
This diff could not be displayed because it is too large.
asi-http-request.xcodeproj/project.pbxproj
0 → 100644
This diff was suppressed by a .gitattributes entry.
asi-http-request_Prefix.pch
0 → 100644
main.m
0 → 100644
1 | +// | ||
2 | +// main.m | ||
3 | +// asi-http-request | ||
4 | +// | ||
5 | +// Created by Ben Copsey on 09/07/2008. | ||
6 | +// Copyright __MyCompanyName__ 2008. All rights reserved. | ||
7 | +// | ||
8 | + | ||
9 | +#import <Cocoa/Cocoa.h> | ||
10 | + | ||
11 | +int main(int argc, char *argv[]) | ||
12 | +{ | ||
13 | + return NSApplicationMain(argc, (const char **) argv); | ||
14 | +} |
-
Please register or login to post a comment