def stopResolving(self): """Stop advertising the service.""" # Remove the Reader Deallocate the serviceReference self.reactor.removeReader(self.bonjourDesc) if self.sdRef is not None: bonjour.DNSServiceRefDeallocate(self.sdRef) self.sdRef = None
def __BrowseCallback(self, sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain, userdata): if flags & bonjour.kDNSServiceFlagsAdd: sdRef2 = bonjour.AllocateDNSServiceRef() ret = bonjour.pyDNSServiceResolve(sdRef2, 0, 0, serviceName, regtype, replyDomain, self.__ResolveCallback, serviceName) bonjour.DNSServiceProcessResult(sdRef2) bonjour.DNSServiceRefDeallocate(sdRef2) elif flags == 0: self.lock.acquire() del self.serviceUrls[serviceName] self.lock.release() # Call callback (if registered) to signal delete if self.browseCallback: self.browseCallback(self.DELETE, serviceName)
def BrowseServices(): # Allocate a service discovery ref and browse for the specified service type serviceRef = bonjour.AllocateDNSServiceRef() ret = bonjour.pyDNSServiceQueryRecord(serviceRef, 0, # no flags 0, # all network interfaces "_services._dns-sd._udp.local.", # meta-query record name PTR_RECORD_TYPE, INTERNET_CLASS_TYPE, QueryCallback, # callback function ptr None) if ret != bonjour.kDNSServiceErr_NoError: print "ret = %d; exiting" % ret sys.exit(1) # Get socket descriptor and loop fd = bonjour.DNSServiceRefSockFD(serviceRef) while 1: ret = select.select([fd],[],[]) ret = bonjour.DNSServiceProcessResult(serviceRef) # Deallocate the service discovery ref bonjour.DNSServiceRefDeallocate(serviceRef)
hostname = socket.gethostname() # Allocate a service discovery reference and register the specified service serviceRef = bonjour.AllocateDNSServiceRef() ret = bonjour.pyDNSServiceRegister( serviceRef, # DNSServiceRef *sdRef, 0, # DNSServiceFlags flags, /* may be 0 */ 0, # uint32_t interfaceIndex,/* may be 0 */ servicename, # const char *name, /* may be NULL */ regtype, # const char *regtype, 'local.', # const char *domain, /* may be NULL */ hostname, # const char *host, /* may be NULL */ port, # uint16_t port, 0, # uint16_t txtLen, "", # const void *txtRecord, /* may be NULL */ RegisterCallback, # DNSServiceRegisterReply callBack, /* may be NULL */ userdata) if ret != bonjour.kDNSServiceErr_NoError: print "error %d returned; exiting" % ret sys.exit(ret) # Get the socket and loop fd = bonjour.DNSServiceRefSockFD(serviceRef) while 1: ret = select.select([fd], [], []) ret = bonjour.DNSServiceProcessResult(serviceRef) # Deallocate the service discovery ref bonjour.DNSServiceRefDeallocate(serviceRef)
def connectionLost(self, reason): """Called by the Twisted event loop when things are shutting down.""" log.msg("Stopping Bonjour Advertisement") if self.sdRef is not None: bonjour.DNSServiceRefDeallocate(self.sdRef) self.sdRef = None
def __del__(self): # Deallocate the service discovery ref if self.serviceRef: bonjour.DNSServiceRefDeallocate(self.serviceRef)