Bonjour/MYBonjourRegistration.h
author Jens Alfke <jens@mooseyard.com>
Tue Jul 21 15:06:15 2009 -0700 (2009-07-21)
changeset 62 8713f2d6a4c5
parent 60 dd637bdd214e
permissions -rw-r--r--
Added -[MYBonjourRegistration updateTXTRecord]
jens@31
     1
//
jens@31
     2
//  MYBonjourRegistration.h
jens@31
     3
//  MYNetwork
jens@31
     4
//
jens@31
     5
//  Created by Jens Alfke on 4/27/09.
jens@31
     6
//  Copyright 2009 Jens Alfke. All rights reserved.
jens@31
     7
//
jens@31
     8
jens@31
     9
#import "MYDNSService.h"
jens@31
    10
@class MYBonjourService;
jens@31
    11
jens@31
    12
jens@31
    13
/** Registers a local network service with Bonjour, so it can be browsed by other computers. */
jens@31
    14
@interface MYBonjourRegistration : MYDNSService
jens@31
    15
{
jens@31
    16
    NSString *_name, *_type, *_domain;
jens@31
    17
    UInt16 _port;
jens@31
    18
    BOOL _autoRename;
jens@31
    19
    BOOL _registered;
jens@31
    20
    NSMutableDictionary *_txtRecord;
jens@60
    21
    NSData *_nullRecord;
jens@60
    22
    struct _DNSRecordRef_t *_nullRecordReg;
jens@31
    23
}
jens@31
    24
jens@31
    25
/** Initializes a new registration.
jens@31
    26
    If you're also browsing for the same service type, you should instead get an instance of this via
jens@31
    27
    the MYBonjourBrowser's 'myRegistration' property -- that way the browser knows about the
jens@31
    28
    registration and won't echo it back to you.
jens@31
    29
    Either way, don't forget to call -start! */
jens@31
    30
- (id) initWithServiceType: (NSString*)serviceType port: (UInt16)port;
jens@31
    31
jens@31
    32
/** The name to register this service under.
jens@31
    33
    This is often left nil, in which case the user's chosen "Computer Name" (from the Sharing system
jens@31
    34
    pref pane) will be used.
jens@31
    35
    This can only be set before calling -start! */
jens@31
    36
@property (copy) NSString *name;
jens@31
    37
jens@31
    38
/** The registration's service type. */
jens@31
    39
@property (readonly) NSString *type;
jens@31
    40
jens@31
    41
/** The registration's IP port number.
jens@31
    42
    You'll need to set this if you got this object from MYBonjourBrowser's 'myRegistration' property,
jens@31
    43
    as that object doesn't have a pre-set port number yet.
jens@31
    44
    This can only be set before calling -start!  */
jens@31
    45
@property UInt16 port;
jens@31
    46
jens@31
    47
/** The registration's full name -- the name, type and domain concatenated together. */
jens@31
    48
@property (readonly) NSString *fullName;
jens@31
    49
jens@59
    50
jens@31
    51
/** Is the registration currently active? */
jens@31
    52
@property (readonly) BOOL registered;
jens@31
    53
jens@59
    54
jens@31
    55
/** The service's metadata dictionary, stored in its DNS TXT record */
jens@62
    56
@property (copy) NSDictionary *TXTRecord;
jens@31
    57
jens@31
    58
/** Convenience to store a string value in a single TXT record key. */
jens@62
    59
- (void) setString: (NSString*)value forTXTKey: (NSString*)key;
jens@31
    60
jens@31
    61
jens@31
    62
/** @name Expert
jens@31
    63
 *  Advanced methods you likely won't need
jens@31
    64
 */
jens@31
    65
//@{
jens@31
    66
jens@31
    67
/** The registration's domain name.
jens@31
    68
    This is almost always left nil, in which case the default registration domain is used
jens@31
    69
    (usually ".local".)
jens@31
    70
    This can only be set before calling -start!  */
jens@31
    71
@property (copy) NSString *domain;
jens@31
    72
jens@31
    73
/** Determines what to do if there's a name conflict with an already-registered service on the
jens@31
    74
    network.
jens@31
    75
    If set to YES (the default), a number will be appended to the name to make it unique.
jens@31
    76
    If set to NO, the registration will fail, and you can choose a different name and try again.
jens@31
    77
    This can only be set before calling -start!  */
jens@31
    78
@property BOOL autoRename;
jens@31
    79
jens@31
    80
/** Is this browsed service an echo of this local registration? (Compares fullNames.) */
jens@31
    81
- (BOOL) isSameAsService: (MYBonjourService*)service;
jens@31
    82
jens@62
    83
/** Immediately broadcast the current TXT record. (Normally, there is a 0.1 second delay
jens@62
    84
    after you make changes, in order to coalesce multiple changes.) */
jens@62
    85
- (void) updateTXTRecord;
jens@62
    86
jens@59
    87
/** Converts a TXT record dictionary to data in a consistent way.
jens@59
    88
    This is used when signing (and verifying signatures of) TXT records. */
jens@59
    89
+ (NSData*) canonicalFormOfTXTRecordDictionary: (NSDictionary*)txtDict;
jens@59
    90
jens@60
    91
/** A DNS 'NULL' record that can be used to publish other metadata about the service.
jens@60
    92
    For example, iChat uses this to store the user's buddy icon.
jens@60
    93
    As with all DNS records, try not to exceed 1500 bytes in size. */
jens@60
    94
@property (copy) NSData *nullRecord;
jens@60
    95
jens@31
    96
//@}
jens@31
    97
jens@31
    98
@end