Добавление поддержки 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.

Что мне здесь не хватает?

0 ответов

Другие вопросы по тегам