Добавление поддержки SOCKS Proxy в CocoaAsyncSocket
Я добавил способность SOCKS в CocoaAsyncSocket. Сначала я попытался сделать это на GCDAsyncSocket, но не получилось.
Для CocoaAsyncSocket я просто устанавливаю свойства SOCKS для потока чтения / записи в этом методе (в GCDAsyncSocket только iOS использовала сокеты чтения / записи с использованием CFSocket) Это было вставлено в метод - (BOOL) createStreamsToHost: (NSString ) hostname onPort:(UInt16) ошибка порта: (NSError *) errPtr
NSLog(@"Setting SOCKS proxy: %@:%d", theProxyHost, theProxyPort);
CFDictionaryRef proxyDict = CFNetworkCopySystemProxySettings();
CFMutableDictionaryRef socksConfig = CFDictionaryCreateMutableCopy(NULL, 0, proxyDict);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyHost, (CFStringRef)theProxyHost);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyPort, (__bridge CFNumberRef)[NSNumber numberWithInteger:theProxyPort]);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion4);
CFReadStreamSetProperty((CFReadStreamRef)theReadStream, kCFStreamPropertySOCKSProxy, socksConfig);
CFWriteStreamSetProperty((CFWriteStreamRef)theWriteStream, kCFStreamPropertySOCKSProxy, socksConfig);
CFRelease(proxyDict);
Это работает хорошо, так как маршрутизирует весь трафик через Прокси. Но либо я не понимаю, как работают прокси, либо я сделал что-то не так, потому что:
if(![socket connectToHost:@"somedomain.com" onPort:9567 error:&error]) {
NSLog(@"Could not connect: %@", [error localizedDescription]);
}
Это всегда возвращает истину, независимо от того, отвечает ли сервер. Потому что прокси отвечает. Метод делегата CocoaAsyncSocket
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
вызывается с хостом и портом прокси-сервера, а не с того сервера, который я назвал connectToHost:onPort:error on.
Что мне здесь не хватает?