jens@27: // jens@27: // MYDNSService.h jens@27: // MYNetwork jens@27: // jens@27: // Created by Jens Alfke on 4/23/09. jens@27: // Copyright 2009 Jens Alfke. All rights reserved. jens@27: // jens@27: jens@27: #import jens@27: #import jens@27: jens@27: jens@27: /** Abstract superclass for services based on DNSServiceRefs, such as MYPortMapper. */ jens@27: @interface MYDNSService : NSObject jens@27: { jens@27: @private jens@27: struct _DNSServiceRef_t *_serviceRef; jens@27: CFSocketRef _socket; jens@27: CFRunLoopSourceRef _socketSource; jens@27: SInt32 _error; jens@28: BOOL _continuous; jens@27: } jens@27: jens@28: /** If NO (the default), the service will stop after it gets a result. jens@28: If YES, it will continue to run until stopped. */ jens@28: @property BOOL continuous; jens@28: jens@27: /** Starts the service. jens@27: Returns immediately; you can find out when the service actually starts (or fails to) jens@27: by observing the isOpen and error properties. jens@27: It's very unlikely that this call itself will fail (return NO). If it does, it jens@27: probably means that the mDNSResponder process isn't working. */ jens@28: - (BOOL) start; jens@27: jens@28: /** Stops the service. */ jens@28: - (void) stop; jens@27: jens@27: jens@27: /** The error status, a DNSServiceErrorType enum; nonzero if something went wrong. jens@27: This property is KV observable. */ jens@28: @property int32_t error; jens@27: jens@27: // PROTECTED: jens@27: jens@27: /** Subclass must implement this abstract method to create a new DNSServiceRef. jens@27: This method is called by -open. jens@27: If an error occurs, the method should set self.error and return NULL.*/ jens@27: - (struct _DNSServiceRef_t*) createServiceRef; jens@27: jens@28: @property (readonly) struct _DNSServiceRef_t* serviceRef; jens@28: jens@28: /** Same as -stop, but does not clear the error property. jens@28: (The stop method actually calls this first.) */ jens@28: - (void) cancel; jens@28: jens@28: /** Block until a message is received from the daemon. jens@28: This will cause the service's callback (defined by the subclass) to be invoked. jens@28: @return YES if a message is received, NO on error (or if the service isn't started) */ jens@28: - (BOOL) waitForReply; jens@27: jens@27: @end