-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathXboxProxyController.m
More file actions
130 lines (117 loc) · 3.57 KB
/
Copy pathXboxProxyController.m
File metadata and controls
130 lines (117 loc) · 3.57 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//
// XboxProxyController.m
// Slink
//
// Created by Tim Wu on 7/15/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "XboxProxyController.h"
@implementation XboxProxyController
@synthesize xboxProxy;
- (void) startup
{
NSUserDefaultsController * userDefaultsController = [NSUserDefaultsController sharedUserDefaultsController];
NSLog(@"Starting up");
[deviceSelection removeAllItems];
[deviceSelection addItemsWithTitles:[PcapListener getAvailableInterfaces]];
[deviceSelection selectItemWithTitle:[[NSUserDefaults standardUserDefaults] objectForKey:@"listenDevice"]];
self.xboxProxy = [XboxProxy new];
[self.xboxProxy bind:@"dev" toObject:userDefaultsController withKeyPath:@"values.listenDevice" options:nil];
NSString * externalIp = [PortMapper findPublicAddress];
if(externalIp)
self.xboxProxy.ip = externalIp;
[self bind:@"externalPort" toObject:userDefaultsController withKeyPath:@"values.externalPort" options:nil];
[self bind:@"mapExternalPort" toObject:userDefaultsController withKeyPath:@"values.mapExternalPort" options:nil];
portMapper = [[PortMapper alloc] initWithPort:[self.externalPort intValue]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePortMappingFinished)
name:PortMapperChangedNotification object:portMapper];
portMapper.mapUDP = YES;
portMapper.mapTCP = NO;
//[portMappingError setHidden:YES];
if([self.mapExternalPort boolValue]) {
[self openPortMapper];
}
}
- (void) shutdown
{
[xboxProxy close];
[portMapper close];
}
#pragma mark Interface builder actions
- (IBAction) toggleProxyState:(id) sender
{
// If it's running, shut it down
if (self.xboxProxy.running) {
[self.xboxProxy close];
[startStopButton setState:0];
return;
}
if (![self.xboxProxy start] || !self.xboxProxy.running) {
[[NSAlert alertWithMessageText:nil
defaultButton:nil
alternateButton:nil
otherButton:nil
informativeTextWithFormat:@"Failed to start xbox proxy, check console for errors."] runModal];
}
[startStopButton setState:1];
}
- (IBAction) connectToProxy:(id) sender
{
NSArray * splitConnectionInfo = [[connectInfo stringValue] componentsSeparatedByString:@":"];
NSString * ip = [splitConnectionInfo objectAtIndex:0];
int port = [[splitConnectionInfo objectAtIndex:1] intValue];
if(port <= 0 || port > 65535) {
[[NSAlert alertWithMessageText:nil
defaultButton:nil
alternateButton:nil
otherButton:nil
informativeTextWithFormat:@"Invalid port"] runModal];
return;
}
if(self.xboxProxy == nil || self.xboxProxy.running == NO) {
[self toggleProxyState:sender];
}
[self.xboxProxy connectTo:ip port:port];
[connectInfo setStringValue:@""];
}
- (NSNumber *) externalPort
{
return self.xboxProxy.port;
}
- (void) setExternalPort:(NSNumber *) port
{
self.xboxProxy.port = port;
portMapper.desiredPublicPort = [port intValue];
if([self.mapExternalPort boolValue]) {
[portMapper close];
[portMapper open];
}
}
- (NSNumber *) mapExternalPort
{
return mapExternalPort;
}
- (void) setMapExternalPort:(NSNumber *) map
{
if(self.mapExternalPort != nil && [map isEqualToNumber:self.mapExternalPort]) return;
[portMappingError setHidden:YES];
mapExternalPort = map;
if([self.mapExternalPort boolValue]) {
[self openPortMapper];
} else {
[portMapper close];
}
}
- (void) openPortMapper
{
[portMappingError setHidden:YES];
[portMappingSpinner setHidden:NO];
if(portMapper.isMapped == NO)
[portMapper open];
}
- (void) handlePortMappingFinished
{
[portMappingSpinner setHidden:YES];
[portMappingError setHidden:portMapper.isMapped];
}
@end