213 lines
4.6 KiB
Mathematica
213 lines
4.6 KiB
Mathematica
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
|
||
|
#import "OCTToxOptions+Private.h"
|
||
|
#import <toxcore/tox.h>
|
||
|
|
||
|
@interface OCTToxOptions ()
|
||
|
|
||
|
@property (nonatomic, assign, readonly) struct Tox_Options *options;
|
||
|
|
||
|
// Used to retain proxy_host option.
|
||
|
@property (nonatomic, copy) NSString *proxyHostStorage;
|
||
|
|
||
|
@end
|
||
|
|
||
|
@implementation OCTToxOptions
|
||
|
|
||
|
#pragma mark - Lifecycle
|
||
|
|
||
|
- (instancetype)init
|
||
|
{
|
||
|
self = [super init];
|
||
|
|
||
|
if (! self) {
|
||
|
return nil;
|
||
|
}
|
||
|
|
||
|
_options = tox_options_new(NULL);
|
||
|
|
||
|
return self;
|
||
|
}
|
||
|
|
||
|
- (void)dealloc
|
||
|
{
|
||
|
tox_options_free(_options);
|
||
|
}
|
||
|
|
||
|
#pragma mark - Description
|
||
|
|
||
|
- (NSString *)description
|
||
|
{
|
||
|
return [NSString stringWithFormat:@"OCTToxOptions:\n"
|
||
|
@"ipv6Enabled %d\n"
|
||
|
@"udpEnabled %d\n"
|
||
|
@"localDiscoveryEnabled %d\n"
|
||
|
@"proxyType %lu\n"
|
||
|
@"proxyHost %@\n"
|
||
|
@"proxyPort %d\n"
|
||
|
@"startPort %d\n"
|
||
|
@"endPort %d\n"
|
||
|
@"tcpPort %d\n"
|
||
|
@"holePunchingEnabled %d\n",
|
||
|
self.ipv6Enabled,
|
||
|
self.udpEnabled,
|
||
|
self.localDiscoveryEnabled,
|
||
|
self.proxyType,
|
||
|
self.proxyHost,
|
||
|
self.proxyPort,
|
||
|
self.startPort,
|
||
|
self.endPort,
|
||
|
self.tcpPort,
|
||
|
self.holePunchingEnabled];
|
||
|
}
|
||
|
|
||
|
#pragma mark - Properties
|
||
|
|
||
|
- (BOOL)ipv6Enabled
|
||
|
{
|
||
|
return tox_options_get_ipv6_enabled(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setIpv6Enabled:(BOOL)enabled
|
||
|
{
|
||
|
tox_options_set_ipv6_enabled(self.options, enabled);
|
||
|
}
|
||
|
|
||
|
- (BOOL)udpEnabled
|
||
|
{
|
||
|
return tox_options_get_udp_enabled(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setUdpEnabled:(BOOL)enabled
|
||
|
{
|
||
|
tox_options_set_udp_enabled(self.options, enabled);
|
||
|
}
|
||
|
|
||
|
- (BOOL)localDiscoveryEnabled
|
||
|
{
|
||
|
return tox_options_get_local_discovery_enabled(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setLocalDiscoveryEnabled:(BOOL)enabled
|
||
|
{
|
||
|
tox_options_set_local_discovery_enabled(self.options, enabled);
|
||
|
}
|
||
|
|
||
|
- (OCTToxProxyType)proxyType
|
||
|
{
|
||
|
switch (tox_options_get_proxy_type(self.options)) {
|
||
|
case TOX_PROXY_TYPE_NONE:
|
||
|
return OCTToxProxyTypeNone;
|
||
|
case TOX_PROXY_TYPE_HTTP:
|
||
|
return OCTToxProxyTypeHTTP;
|
||
|
case TOX_PROXY_TYPE_SOCKS5:
|
||
|
return OCTToxProxyTypeSocks5;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- (void)setProxyType:(OCTToxProxyType)type
|
||
|
{
|
||
|
switch (type) {
|
||
|
case OCTToxProxyTypeNone:
|
||
|
tox_options_set_proxy_type(self.options, TOX_PROXY_TYPE_NONE);
|
||
|
break;
|
||
|
case OCTToxProxyTypeHTTP:
|
||
|
tox_options_set_proxy_type(self.options, TOX_PROXY_TYPE_HTTP);
|
||
|
break;
|
||
|
case OCTToxProxyTypeSocks5:
|
||
|
tox_options_set_proxy_type(self.options, TOX_PROXY_TYPE_SOCKS5);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- (NSString *)proxyHost
|
||
|
{
|
||
|
const char *cHost = tox_options_get_proxy_host(self.options);
|
||
|
|
||
|
if (cHost) {
|
||
|
return [NSString stringWithCString:cHost encoding:NSUTF8StringEncoding];
|
||
|
}
|
||
|
|
||
|
return nil;
|
||
|
}
|
||
|
|
||
|
- (void)setProxyHost:(NSString *)host
|
||
|
{
|
||
|
self.proxyHostStorage = host;
|
||
|
tox_options_set_proxy_host(self.options, self.proxyHostStorage.UTF8String);
|
||
|
}
|
||
|
|
||
|
- (uint16_t)proxyPort
|
||
|
{
|
||
|
return tox_options_get_proxy_port(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setProxyPort:(uint16_t)port
|
||
|
{
|
||
|
tox_options_set_proxy_port(self.options, port);
|
||
|
}
|
||
|
|
||
|
- (uint16_t)startPort
|
||
|
{
|
||
|
return tox_options_get_start_port(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setStartPort:(uint16_t)port
|
||
|
{
|
||
|
tox_options_set_start_port(self.options, port);
|
||
|
}
|
||
|
|
||
|
- (uint16_t)endPort
|
||
|
{
|
||
|
return tox_options_get_end_port(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setEndPort:(uint16_t)port
|
||
|
{
|
||
|
tox_options_set_end_port(self.options, port);
|
||
|
}
|
||
|
|
||
|
- (uint16_t)tcpPort
|
||
|
{
|
||
|
return tox_options_get_tcp_port(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setTcpPort:(uint16_t)port
|
||
|
{
|
||
|
tox_options_set_tcp_port(self.options, port);
|
||
|
}
|
||
|
|
||
|
- (BOOL)holePunchingEnabled
|
||
|
{
|
||
|
return tox_options_get_hole_punching_enabled(self.options);
|
||
|
}
|
||
|
|
||
|
- (void)setHolePunchingEnabled:(BOOL)enabled
|
||
|
{
|
||
|
tox_options_set_hole_punching_enabled(self.options, enabled);
|
||
|
}
|
||
|
|
||
|
#pragma mark - NSCopying
|
||
|
|
||
|
- (id)copyWithZone:(NSZone *)zone
|
||
|
{
|
||
|
OCTToxOptions *options = [[[self class] allocWithZone:zone] init];
|
||
|
|
||
|
options.ipv6Enabled = self.ipv6Enabled;
|
||
|
options.udpEnabled = self.udpEnabled;
|
||
|
options.localDiscoveryEnabled = self.localDiscoveryEnabled;
|
||
|
options.proxyType = self.proxyType;
|
||
|
options.proxyHost = self.proxyHost;
|
||
|
options.proxyPort = self.proxyPort;
|
||
|
options.startPort = self.startPort;
|
||
|
options.endPort = self.endPort;
|
||
|
options.tcpPort = self.tcpPort;
|
||
|
options.holePunchingEnabled = self.holePunchingEnabled;
|
||
|
|
||
|
return options;
|
||
|
}
|
||
|
|
||
|
@end
|