home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- from __future__ import with_statement
- __license__ = 'GPL 3'
- __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
- __docformat__ = 'restructuredtext en'
- import socket
- import time
- import atexit
- _server = None
-
- def _get_external_ip():
-
- try:
- ipaddr = socket.gethostbyname(socket.gethostname())
- except:
- ipaddr = '127.0.0.1'
-
- if ipaddr == '127.0.0.1':
- for addr in ('192.0.2.0', '198.51.100.0', 'google.com'):
-
- try:
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- s.connect((addr, 0))
- ipaddr = s.getsockname()[0]
- if ipaddr != '127.0.0.1':
- return ipaddr
- continue
- time.sleep(0.3)
- continue
-
-
-
- return ipaddr
-
- _ext_ip = None
-
- def get_external_ip():
- global _ext_ip
- if _ext_ip is None:
- _ext_ip = _get_external_ip()
-
- return _ext_ip
-
-
- def start_server():
- global _server, _server
- if _server is None:
- Zeroconf = Zeroconf
- import calibre.utils.Zeroconf
-
- try:
- _server = Zeroconf()
- except:
- time.sleep(0.2)
- _server = Zeroconf()
-
- atexit.register(stop_server)
-
- return _server
-
-
- def publish(desc, type, port, properties = None, add_hostname = True):
- port = int(port)
- server = start_server()
- if add_hostname:
-
- try:
- hostname = socket.gethostname().partition('.')[0]
- except:
- hostname = 'Unknown'
-
- desc += ' (on %s)' % hostname
-
- local_ip = get_external_ip()
- type = type + '.local.'
- ServiceInfo = ServiceInfo
- import calibre.utils.Zeroconf
- service = ServiceInfo(type, desc + '.' + type, address = socket.inet_aton(local_ip), port = port, properties = properties, server = hostname + '.local.')
- server.registerService(service)
-
-
- def stop_server():
- global _server
- if _server is not None:
-
- try:
- _server.close()
- finally:
- _server = None
-
-
-
-