Refactor pac proxy.

This commit is contained in:
Charlie Qiu
2016-10-18 23:35:17 +08:00
parent 7ad9dc42a0
commit d0ad272198
5 changed files with 120 additions and 130 deletions

View File

@ -114,14 +114,14 @@ GCDWebServer *webServer =nil;
}
}
+ (void)enablePACProxy:(NSString*) PACFilePath {
+ (void)enablePACProxy {
//start server here and then using the string next line
//next two lines can open gcdwebserver and work around pac file
NSString *PACURLString = [self startPACServer: PACFilePath];//hi pac使
NSURL* url = [NSURL URLWithString: PACURLString];
// NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
// NSURL* url = [NSURL fileURLWithPath:urlString];
NSString* PACFilePath = [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"];
[self startPACServer: PACFilePath];
NSURL* url = [NSURL URLWithString: [self getHttpPACUrl]];
NSMutableArray* args = [@[@"--mode", @"auto", @"--pac-url", [url absoluteString]]mutableCopy];
[self addArguments4ManualSpecifyNetworkServices:args];
@ -146,12 +146,9 @@ GCDWebServer *webServer =nil;
[self stopPACServer];
}
+ (void)disableProxy:(NSString*) PACFilePath {
// ssx-ng
// NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
// NSURL* url = [NSURL fileURLWithPath:urlString];
NSString *PACURLString = [self startPACServer: PACFilePath];//hi pac使
NSURL* url = [NSURL URLWithString: PACURLString];
+ (void)disableProxy {
// ssx-ng
NSURL* url = [NSURL URLWithString: [self getHttpPACUrl]];
NSUInteger port = [[NSUserDefaults standardUserDefaults]integerForKey:@"LocalSocks5.ListenPort"];
NSMutableArray* args = [@[@"--mode", @"off"
@ -163,28 +160,43 @@ GCDWebServer *webServer =nil;
[self stopPACServer];
}
+ (NSString*)startPACServer:(NSString*) PACFilePath {
//使PAC
NSData * originalPACData;
+ (NSString*)getHttpPACUrl {
NSString * routerPath = @"/proxy.pac";
if ([PACFilePath isEqual: @"hi"]) {//
PACFilePath = [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"];
originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"]];
}else{//
originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG", PACFilePath]];
routerPath = [NSString stringWithFormat:@"/%@",PACFilePath];
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString * address = @"127.0.0.1";
int port = (short)[defaults integerForKey:@"PacServer.ListenPort"];
return [NSString stringWithFormat:@"%@%@:%d%@",@"http://",address,port,routerPath];
}
+ (void)startPACServer:(NSString*) PACFilePath {
//使PAC
NSString * routerPath = @"/proxy.pac";
[self stopPACServer];
webServer = [[GCDWebServer alloc] init];
[webServer addHandlerForMethod:@"GET" path:routerPath requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {
return [GCDWebServerDataResponse responseWithData: originalPACData contentType:@"application/x-ns-proxy-autoconfig"];
[webServer addHandlerForMethod:@"GET"
path:routerPath
requestClass:[GCDWebServerRequest class]
processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request)
{
NSLog(@"get proxy.pac");
NSData* originalPACData = [NSData dataWithContentsOfFile:PACFilePath];
GCDWebServerDataResponse* resp = [GCDWebServerDataResponse responseWithData:originalPACData
contentType:@"application/x-ns-proxy-autoconfig"];
resp.cacheControlMaxAge = 0;
return resp;
}
];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString * address = [defaults stringForKey:@"PacServer.ListenAddress"];
int port = (short)[defaults integerForKey:@"PacServer.ListenPort"];
[webServer startWithOptions:@{@"BindToLocalhost":@YES, @"Port":@(port)} error:nil];
return [NSString stringWithFormat:@"%@%@:%d%@",@"http://",address,port,routerPath];
}
+ (void)stopPACServer {