/* 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 . **/ /* }}} */ #include "CyteKit/UCPlatform.h" #include "CyteKit/URLProtocol.h" #include "iPhonePrivate.h" #include @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 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 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