Exemple #1
0
    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)
Exemple #5
0
 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)