id<NSURLProtocolClient> client([self client]);
NSURLRequest *request([self request]);
NSURL *url([request URL]);
- NSString *href([url absoluteString]);
- NSString *path([href substringFromIndex:13]);
- if (path == nil || ![path hasSuffix:@".php"])
+ NSString *path([url path]);
+ if (path == nil || ![path hasSuffix:@".php"]) {
[client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorResourceUnavailable userInfo:nil]];
+ return;
+ }
NSFileManager *manager([NSFileManager defaultManager]);
- if (![manager fileExistsAtPath:path])
+ if (![manager fileExistsAtPath:path]) {
[client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil]];
+ return;
+ }
+
+ NSLog(@"%@::%@", path, [url query]);
int fds[2];
_assert(pipe(fds) != -1);
pid_t pid(fork());
if (pid == 0) {
+ setenv("GATEWAY_INTERFACE", "CGI/1.1", true);
+ setenv("SCRIPT_FILENAME", [path UTF8String], true);
+ NSString *query([url query]);
+ if (query != nil)
+ setenv("QUERY_STRING", [query UTF8String], true);
+
_assert(dup2(fds[1], 1) != -1);
_assert(close(fds[0]) != -1);
_assert(close(fds[1]) != -1);
- execl("/usr/bin/php", "php", [path UTF8String], NULL);
+
+ execl("/usr/bin/php-cgi", "php-cgi", NULL);
exit(1);
_assert(false);
}
_assert(close(fds[1]) != -1);
- NSMutableData *data([NSMutableData dataWithCapacity:16*1024]);
+ CFHTTPMessageRef http(CFHTTPMessageCreateEmpty(kCFAllocatorDefault, FALSE));
+
+ CFHTTPMessageAppendBytes(http, (const uint8_t *) "HTTP/1.1 200 OK\r\n", 17);
if (FILE *file = fdopen(fds[0], "r")) {
- char buffer[16*1024];
+ uint8_t buffer[16*1024];
read:
size_t count(fread(buffer, 1, sizeof(buffer), file));
- if (count != 0)
- [data appendBytes:buffer length:count];
+ if (count != 0) {
+ fwrite(buffer, 1, count, stderr);
+ CFHTTPMessageAppendBytes(http, buffer, count);
+ }
if (count == sizeof(buffer))
goto read;
- if (ferror(file))
+ if (ferror(file)) {
[client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorNetworkConnectionLost userInfo:nil]];
+ fclose(file);
+ goto fail;
+ }
fclose(file);
} else _assert(close(fds[0]));
- NSURLResponse *response([[[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"text/html" expectedContentLength:-1 textEncodingName:nil] autorelease]);
+ {
+ CFStringRef mime(CFHTTPMessageCopyHeaderFieldValue(http, CFSTR("Content-type")));
+ if (mime == NULL) {
+ [client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorBadServerResponse userInfo:nil]];
+ goto fail;
+ }
+
+ NSURLResponse *response([[[NSURLResponse alloc] initWithURL:[request URL] MIMEType:(NSString *)mime expectedContentLength:-1 textEncodingName:nil] autorelease]);
+ CFRelease(mime);
+
+ [client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
+
+ CFDataRef data(CFHTTPMessageCopyBody(http));
+ [client URLProtocol:self didLoadData:(NSData *)data];
+ CFRelease(data);
+
+ [client URLProtocolDidFinishLoading:self];
+ }
- [client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
- [client URLProtocol:self didLoadData:data];
- [client URLProtocolDidFinishLoading:self];
+ fail:
+ CFRelease(http);
}
- (void) stopLoading {
ldid -S $@
WebCycriptLockScreen: LockScreen.mm makefile $(base)/../mobilesubstrate/substrate.h
- $(target)g++ -F. -bundle -mthumb -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -lobjc -I$(base)/../mobilesubstrate $(link) $(flags) -framework CoreGraphics -framework QuartzCore -framework SpringBoardUI -framework WebCore -framework GraphicsServices -framework TelephonyUI -I$(jscore) -iquote$(webcore)/{bindings/js,dom,loader,platform{,/animation,/cf,/network{,/cf},/text},/rendering/style} -iquote$(jscore)/{bytecode,debugger,interpreter,jit,parser,runtime} -lapr-1 -weak_reference_mismatches weak -framework JavaScriptCore -lpcre -DNDEBUG
+ $(target)g++ -F. -bundle -mthumb -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -lobjc -I$(base)/../mobilesubstrate $(link) $(flags) -framework CoreGraphics -framework QuartzCore -framework SpringBoardUI -framework WebCore -framework GraphicsServices -framework TelephonyUI -I$(jscore) -iquote$(webcore)/{bindings/js,dom,loader,platform{,/animation,/cf,/network{,/cf},/text},/rendering/style} -iquote$(jscore)/{bytecode,debugger,interpreter,jit,parser,runtime} -lapr-1 -weak_reference_mismatches weak -framework JavaScriptCore -lpcre -DNDEBUG -framework CFNetwork
ldid -S $@
extra: