-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Expand file tree
/
Copy pathOTRXMPPTorManager.m
More file actions
69 lines (59 loc) · 2.23 KB
/
OTRXMPPTorManager.m
File metadata and controls
69 lines (59 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
// OTRXMPPTorManager.m
// Off the Record
//
// Created by David Chiles on 1/17/14.
// Copyright (c) 2014 Chris Ballinger. All rights reserved.
//
#import "OTRXMPPTorManager.h"
#import "OTRTorManager.h"
@import XMPPFramework;
#import "OTRXMPPTorAccount.h"
#import "OTRXMPPError.h"
#import "OTRProtocol.h"
#import "OTRXMPPManager_Private.h"
#import "ProxyXMPPStream.h"
@interface OTRXMPPTorManager()
@end
@implementation OTRXMPPTorManager
- (void) connectUserInitiated:(BOOL)userInitiated {
if ([OTRTorManager sharedInstance].torManager.isConnected) {
[super connectUserInitiated:userInitiated];
} else {
NSError * error = [NSError errorWithDomain:OTRXMPPErrorDomain code:OTRXMPPErrorCodeTorError userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Need to connect to Tor first.", @"")}];
[self failedToConnect:error];
}
}
/** Override XMPPStream with XMPPProxyStream */
- (OTRXMPPStream*) newStream {
return [[ProxyXMPPStream alloc] init];
}
// override
- (void) setupStream {
[super setupStream];
NSString *proxyHost = [OTRTorManager sharedInstance].torManager.SOCKSHost;
NSUInteger proxyPort = [OTRTorManager sharedInstance].torManager.SOCKSPort;
if ([self.xmppStream isKindOfClass:[ProxyXMPPStream class]]) {
ProxyXMPPStream *proxyStream = (ProxyXMPPStream*)self.xmppStream;
[proxyStream setProxyHost:proxyHost port:proxyPort version:GCDAsyncSocketSOCKSVersion5];
[proxyStream setProxyUsername:[[NSUUID UUID] UUIDString] password:[[NSUUID UUID] UUIDString]];
} else {
@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Stream socket is of wrong class!" userInfo:nil];
}
}
- (NSString *)accountDomainWithError:(NSError**)error;
{
NSString * domainString = nil;
if (self.account.domain.length) {
domainString = self.account.domain;
}
else {
XMPPJID * jid = [XMPPJID jidWithString:self.account.username];
domainString = jid.domain;
}
if (!domainString.length && error) {
*error = [NSError errorWithDomain:OTRXMPPErrorDomain code:OTRXMPPErrorCodeDomainError userInfo:@{NSLocalizedDescriptionKey:@"Tor accounts require a valid domain"}];
}
return domainString;
}
@end