def set_bonjour(host=None, port=None): """ Publish host/port combo through Bonjour """ global _HOST_PORT, _BONJOUR_OBJECT if not _HAVE_BONJOUR or not cfg.enable_bonjour(): logging.info('No Bonjour/ZeroConfig support installed') return if host is None and port is None: host, port = _HOST_PORT else: _HOST_PORT = (host, port) scope = pybonjour.kDNSServiceInterfaceIndexAny zhost = None domain = None if match_str(host, ('localhost', '127.0.', '::1')): logging.info('Bonjour/ZeroConfig does not support "localhost"') # All implementations fail to implement "localhost" properly # A false address is published even when scope==kDNSServiceInterfaceIndexLocalOnly return name = hostname() if '.local' in name: suffix = '' else: suffix = '.local' logging.debug('Try to publish in Bonjour as "%s" (%s:%s)', name, host, port) try: refObject = pybonjour.DNSServiceRegister( interfaceIndex=scope, name='SABnzbd on %s:%s' % (name, port), regtype='_http._tcp', domain=domain, host=zhost, port=int(port), txtRecord=pybonjour.TXTRecord({ 'path': cfg.url_base(), 'https': cfg.enable_https() }), callBack=_zeroconf_callback) except sabnzbd.utils.pybonjour.BonjourError as e: _BONJOUR_OBJECT = None logging.debug('Failed to start Bonjour service: %s', str(e)) except: _BONJOUR_OBJECT = None logging.debug( 'Failed to start Bonjour service due to non-pybonjour related problem', exc_info=True) else: Thread(target=_bonjour_server, args=(refObject, )) _BONJOUR_OBJECT = refObject logging.debug('Successfully started Bonjour service')
def set_bonjour(host=None, port=None): """ Publish host/port combo through Bonjour """ global _HOST_PORT, _BONJOUR_OBJECT if not _HAVE_BONJOUR or not cfg.enable_broadcast(): logging.info("No bonjour/zeroconf support installed") return if host is None and port is None: host, port = _HOST_PORT else: _HOST_PORT = (host, port) scope = pybonjour.kDNSServiceInterfaceIndexAny zhost = None domain = None if is_localhost(host): logging.info("Cannot setup bonjour/zeroconf for localhost (%s)", host) # All implementations fail to implement "localhost" properly # A false address is published even when scope==kDNSServiceInterfaceIndexLocalOnly return name = socket.gethostname() logging.debug('Try to publish in Bonjour as "%s" (%s:%s)', name, host, port) try: refObject = pybonjour.DNSServiceRegister( interfaceIndex=scope, name="SABnzbd on %s:%s" % (name, port), regtype="_http._tcp", domain=domain, host=zhost, port=int(port), txtRecord=pybonjour.TXTRecord({ "path": cfg.url_base(), "https": cfg.enable_https() }), callBack=_zeroconf_callback, ) except sabnzbd.utils.pybonjour.BonjourError as e: _BONJOUR_OBJECT = None logging.debug("Failed to start Bonjour service: %s", str(e)) except: _BONJOUR_OBJECT = None logging.debug( "Failed to start Bonjour service due to non-pybonjour related problem", exc_info=True) else: Thread(target=_bonjour_server, args=(refObject, )) _BONJOUR_OBJECT = refObject logging.debug("Successfully started Bonjour service")