예제 #1
0
파일: zconfig.py 프로젝트: usermonk/sabnzbd
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')
예제 #2
0
파일: zconfig.py 프로젝트: xphillyx/sabnzbd
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")