Clementine-audio-player-Mac.../src/networkremote/bonjour.mm

68 lines
1.6 KiB
Plaintext
Raw Normal View History

2013-01-16 15:26:35 +01:00
#include "bonjour.h"
#import <Foundation/NSNetServices.h>
#import <Foundation/NSString.h>
#include "core/logging.h"
#include "core/scoped_nsautorelease_pool.h"
2013-01-16 15:26:35 +01:00
@interface NetServicePublicationDelegate : NSObject<NSNetServiceDelegate> {
}
- (void)netServiceWillPublish:(NSNetService*)netService;
- (void)netService:(NSNetService*)netService
didNotPublish:(NSDictionary*)errorDict;
- (void)netServiceDidStop:(NSNetService*)netService;
@end
@implementation NetServicePublicationDelegate
- (void)netServiceWillPublish: (NSNetService*)netService {
qLog(Debug) << "Publishing:" << [[netService name] UTF8String];
}
- (void)netService: (NSNetService*)netServie didNotPublish: (NSDictionary*)errorDict {
qLog(Debug) << "Failed to publish remote service with Bonjour";
NSLog(@"%@", errorDict);
}
- (void)netServiceDidStop: (NSNetService*)netService {
qLog(Debug) << "Unpublished:" << [[netService name] UTF8String];
}
@end
namespace {
NSString* NSStringFromQString(const QString& s) {
return [[NSString alloc] initWithUTF8String: s.toUtf8().constData()];
}
}
Bonjour::Bonjour()
: delegate_([[NetServicePublicationDelegate alloc] init]) {
}
Bonjour::~Bonjour() {
[delegate_ release];
}
2013-02-22 15:29:00 +01:00
void Bonjour::PublishInternal(
2013-01-16 15:26:35 +01:00
const QString& domain,
const QString& type,
2013-02-22 15:29:00 +01:00
const QByteArray& name,
2013-01-16 15:26:35 +01:00
quint16 port) {
ScopedNSAutoreleasePool pool;
2013-01-16 15:26:35 +01:00
NSNetService* service = [[NSNetService alloc]
initWithDomain: NSStringFromQString(domain)
type: NSStringFromQString(type)
2013-02-22 15:30:55 +01:00
name: [NSString stringWithUTF8String: name.constData()]
2013-01-16 15:26:35 +01:00
port: port];
if (service) {
[service setDelegate: delegate_];
[service publish];
}
}