summaryrefslogtreecommitdiff
path: root/CyteKit/URLProtocol.mm
diff options
context:
space:
mode:
Diffstat (limited to 'CyteKit/URLProtocol.mm')
-rw-r--r--CyteKit/URLProtocol.mm98
1 files changed, 98 insertions, 0 deletions
diff --git a/CyteKit/URLProtocol.mm b/CyteKit/URLProtocol.mm
new file mode 100644
index 0000000..eccd2f7
--- /dev/null
+++ b/CyteKit/URLProtocol.mm
@@ -0,0 +1,98 @@
+/* Cydia - iPhone UIKit Front-End for Debian APT
+ * Copyright (C) 2008-2015 Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cydia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cydia is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cydia. If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#include "CyteKit/UCPlatform.h"
+
+#include "CyteKit/URLProtocol.h"
+
+#include "iPhonePrivate.h"
+#include <Menes/ObjectHandle.h>
+
+@implementation CyteURLProtocol {
+}
+
++ (NSString *) scheme {
+ return NULL;
+}
+
++ (BOOL) canInitWithRequest:(NSURLRequest *)request {
+ NSURL *url([request URL]);
+ if (url == nil)
+ return NO;
+
+ auto local([self scheme]);
+ _assert(local != NULL);
+
+ NSString *scheme([[url scheme] lowercaseString]);
+ if (scheme != nil && [scheme isEqualToString:local])
+ return YES;
+ if ([[url absoluteString] hasPrefix:[NSString stringWithFormat:@"about:%@-", local]])
+ return YES;
+
+ return NO;
+}
+
++ (NSURLRequest *) canonicalRequestForRequest:(NSURLRequest *)request {
+ return request;
+}
+
+- (void) _returnPNGWithImage:(UIImage *)icon forRequest:(NSURLRequest *)request {
+ id<NSURLProtocolClient> client([self client]);
+ if (icon == nil)
+ [client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil]];
+ else {
+ NSData *data(UIImagePNGRepresentation(icon));
+
+ NSURLResponse *response([[[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"image/png" expectedContentLength:-1 textEncodingName:nil] autorelease]);
+ [client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
+ [client URLProtocol:self didLoadData:data];
+ [client URLProtocolDidFinishLoading:self];
+ }
+}
+
+- (bool) loadForPath:(NSString *)path ofRequest:(NSURLRequest *)request {
+ return false;
+}
+
+- (void) startLoading {
+ id<NSURLProtocolClient> client([self client]);
+ NSURLRequest *request([self request]);
+
+ NSURL *url([request URL]);
+ NSString *href([url absoluteString]);
+ NSString *scheme([[url scheme] lowercaseString]);
+
+ NSString *path;
+
+ if ([scheme isEqualToString:@"cydia"])
+ path = [href substringFromIndex:8];
+ else if ([scheme isEqualToString:@"about"])
+ path = [href substringFromIndex:12];
+ else _assert(false);
+
+ if (![self loadForPath:path ofRequest:request])
+ [client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorResourceUnavailable userInfo:nil]];
+}
+
+- (void) stopLoading {
+}
+
+@end