Bonjour/MYBonjourService.h
author Jens Alfke <jens@mooseyard.com>
Fri Apr 24 10:10:32 2009 -0700 (2009-04-24)
changeset 27 92581f26073e
child 28 732576fa8a0d
permissions -rw-r--r--
* Refactored MYPortMapper to use a new abstract base class MYDNSService; that way I can re-use it later for implementing Bonjour.
* Fixed issue #1: a memory leak in BLIPProperties, reported by codechemist.
jens@26
     1
//
jens@26
     2
//  MYBonjourService.h
jens@26
     3
//  MYNetwork
jens@26
     4
//
jens@26
     5
//  Created by Jens Alfke on 1/22/08.
jens@26
     6
//  Copyright 2008 Jens Alfke. All rights reserved.
jens@26
     7
//
jens@26
     8
jens@26
     9
#import <Foundation/Foundation.h>
jens@26
    10
#import "ConcurrentOperation.h"
jens@26
    11
@class MYBonjourResolveOperation;
jens@26
    12
jens@26
    13
jens@26
    14
/** Represents a Bonjour service discovered by a BonjourBrowser. */
jens@26
    15
@interface MYBonjourService : NSObject 
jens@26
    16
{
jens@26
    17
    @private
jens@26
    18
    NSNetService *_netService;
jens@26
    19
    NSDictionary *_txtRecord;
jens@26
    20
    NSSet *_addresses;
jens@26
    21
    CFAbsoluteTime _addressesExpireAt;
jens@26
    22
    MYBonjourResolveOperation *_resolveOp;
jens@26
    23
}
jens@26
    24
jens@26
    25
/** The service's name. */
jens@26
    26
@property (readonly) NSString *name;
jens@26
    27
jens@26
    28
/** The service's metadata dictionary, from its DNS TXT record */
jens@26
    29
@property (readonly,copy) NSDictionary *txtRecord;
jens@26
    30
jens@26
    31
/** A convenience to access a single property from the TXT record. */
jens@26
    32
- (NSString*) txtStringForKey: (NSString*)key;
jens@26
    33
jens@26
    34
/** Returns a set of IPAddress objects; may be the empty set if address resolution failed,
jens@26
    35
    or nil if addresses have not been resolved yet (or expired).
jens@26
    36
    In the latter case, call -resolve and wait for the returned Operation to finish. */
jens@26
    37
@property (readonly,copy) NSSet* addresses;
jens@26
    38
jens@26
    39
/** Starts looking up the IP address(es) of this service.
jens@26
    40
    @return  The NSOperation representing the lookup; you can observe this to see when it
jens@26
    41
        completes, or you can observe the service's 'addresses' property. */
jens@26
    42
- (MYBonjourResolveOperation*) resolve;
jens@26
    43
jens@26
    44
/** The underlying NSNetSerice object. */
jens@26
    45
@property (readonly) NSNetService *netService;
jens@26
    46
jens@26
    47
jens@26
    48
// Protected methods, for subclass use only:
jens@26
    49
jens@26
    50
- (id) initWithNetService: (NSNetService*)netService;
jens@26
    51
jens@26
    52
// (for subclasses to override, but not call):
jens@26
    53
- (void) added;
jens@26
    54
- (void) removed;
jens@26
    55
- (void) txtRecordChanged;
jens@26
    56
jens@26
    57
@end
jens@26
    58
jens@26
    59
jens@26
    60
jens@26
    61
@interface MYBonjourResolveOperation : ConcurrentOperation
jens@26
    62
{
jens@26
    63
    MYBonjourService *_service;
jens@26
    64
    NSSet *_addresses;
jens@26
    65
}
jens@26
    66
jens@26
    67
@property (readonly) MYBonjourService *service;
jens@26
    68
@property (readonly,retain) NSSet *addresses;
jens@26
    69
jens@26
    70
@end