Removed network from MP OS X + initial STM code MP iOS.
[REMOVED] OS X: Removed networking code. We're going to use SendToMac instead. [ADDED] iOS: Initial code for communicating with SendToMac hosts.
This commit is contained in:
9
SendToMac/SendToMac-Prefix.pch
Normal file
9
SendToMac/SendToMac-Prefix.pch
Normal file
@@ -0,0 +1,9 @@
|
||||
//
|
||||
// Prefix header for all source files of the 'SendToMac' target in the 'SendToMac' project
|
||||
//
|
||||
|
||||
#ifdef __OBJC__
|
||||
#import <Foundation/Foundation.h>
|
||||
#endif
|
||||
|
||||
#import "Pearl-Prefix.pch"
|
17
SendToMac/SendToMac.h
Normal file
17
SendToMac/SendToMac.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// SendToMac.h
|
||||
// SendToMac
|
||||
//
|
||||
// Created by Maarten Billemont on 13/03/12.
|
||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface SendToMac : NSObject <NSNetServiceDelegate>
|
||||
|
||||
@property (assign) NSTimeInterval timeout;
|
||||
@property (strong) NSNetServiceBrowser *netServiceBrowser;
|
||||
@property (strong) NSMutableDictionary *messageQueues;
|
||||
|
||||
@end
|
107
SendToMac/SendToMac.m
Normal file
107
SendToMac/SendToMac.m
Normal file
@@ -0,0 +1,107 @@
|
||||
//
|
||||
// SendToMac.m
|
||||
// SendToMac
|
||||
//
|
||||
// Created by Maarten Billemont on 13/03/12.
|
||||
// Copyright (c) 2012 Lyndir. All rights reserved.
|
||||
//
|
||||
|
||||
#import "SendToMac.h"
|
||||
|
||||
#import <SystemConfiguration/SystemConfiguration.h>
|
||||
#import <netinet/in.h>
|
||||
#import <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
@implementation SendToMac
|
||||
@synthesize timeout, netServiceBrowser, messageQueues;
|
||||
|
||||
- (id)initWithDelegate:(id<NSNetServiceBrowserDelegate>)delegate {
|
||||
|
||||
if (!(self = [super init]))
|
||||
return nil;
|
||||
|
||||
self.timeout = 10;
|
||||
self.messageQueues = [NSMutableDictionary dictionaryWithCapacity:1];
|
||||
|
||||
self.netServiceBrowser = [NSNetServiceBrowser new];
|
||||
self.netServiceBrowser.delegate = delegate;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)start {
|
||||
|
||||
[self.netServiceBrowser searchForServicesOfType:@"_sendtomac._tcp." inDomain:@""];
|
||||
}
|
||||
|
||||
- (void)stop {
|
||||
|
||||
[self.netServiceBrowser stop];
|
||||
}
|
||||
|
||||
- (void)send:(NSString *)string toMac:(NSNetService *)service {
|
||||
|
||||
NSMutableArray *messageQueue = [self.messageQueues objectForKey:service];
|
||||
if (!messageQueue)
|
||||
[self.messageQueues setObject:messageQueue = [NSMutableArray arrayWithCapacity:3] forKey:service];
|
||||
[messageQueue addObject:string];
|
||||
|
||||
service.delegate = self;
|
||||
[service resolveWithTimeout:self.timeout];
|
||||
}
|
||||
|
||||
- (void)netServiceDidResolveAddress:(NSNetService *)sender {
|
||||
|
||||
struct sockaddr *senderAddress = NULL;
|
||||
for (NSData *address in sender.addresses) {
|
||||
struct sockaddr *socketAddress = (struct sockaddr *)address.bytes;
|
||||
char *addressName = inet_ntoa((((struct sockaddr_in *)socketAddress)->sin_addr));
|
||||
|
||||
SCNetworkReachabilityRef target = SCNetworkReachabilityCreateWithAddress(NULL, socketAddress);
|
||||
SCNetworkReachabilityFlags flags;
|
||||
if (!SCNetworkReachabilityGetFlags(target, &flags)) {
|
||||
err(@"Couldn't determine reachability for address: %s", addressName);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(flags & kSCNetworkReachabilityFlagsReachable)) {
|
||||
err(@"Not reachable: %s", addressName);
|
||||
continue;
|
||||
}
|
||||
|
||||
senderAddress = socketAddress;
|
||||
break;
|
||||
}
|
||||
if (senderAddress == NULL) {
|
||||
dbg(@"Couldn't determine a reachable address for: %@", sender);
|
||||
return;
|
||||
}
|
||||
|
||||
NSSocketNativeHandle socketHandle;
|
||||
if (0 > (socketHandle = socket(senderAddress->sa_family, SOCK_STREAM, 0))) {
|
||||
err(@"Couldn't create socket: %@", errstr());
|
||||
return;
|
||||
}
|
||||
if (0 > connect(socketHandle, senderAddress, senderAddress->sa_len)) {
|
||||
err(@"Couldn't connect socket: %@", errstr());
|
||||
close(socketHandle);
|
||||
return;
|
||||
}
|
||||
if (0 > close(socketHandle)) {
|
||||
err(@"Couldn't close socket: %@", errstr());
|
||||
return;
|
||||
}
|
||||
|
||||
for (NSString *messange in [self.messageQueues objectForKey:sender]) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict {
|
||||
|
||||
err(@"%@%@", NSStringFromSelector(_cmd), errorDict);
|
||||
}
|
||||
|
||||
|
||||
@end
|
Reference in New Issue
Block a user