home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1412 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  2.4 KB  |  95 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from __future__ import with_statement
  5. __license__ = 'GPL 3'
  6. __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
  7. __docformat__ = 'restructuredtext en'
  8. import socket
  9. import time
  10. import atexit
  11. _server = None
  12.  
  13. def _get_external_ip():
  14.     
  15.     try:
  16.         ipaddr = socket.gethostbyname(socket.gethostname())
  17.     except:
  18.         ipaddr = '127.0.0.1'
  19.  
  20.     if ipaddr == '127.0.0.1':
  21.         for addr in ('192.0.2.0', '198.51.100.0', 'google.com'):
  22.             
  23.             try:
  24.                 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  25.                 s.connect((addr, 0))
  26.                 ipaddr = s.getsockname()[0]
  27.                 if ipaddr != '127.0.0.1':
  28.                     return ipaddr
  29.             continue
  30.             time.sleep(0.3)
  31.             continue
  32.  
  33.         
  34.     
  35.     return ipaddr
  36.  
  37. _ext_ip = None
  38.  
  39. def get_external_ip():
  40.     global _ext_ip
  41.     if _ext_ip is None:
  42.         _ext_ip = _get_external_ip()
  43.     
  44.     return _ext_ip
  45.  
  46.  
  47. def start_server():
  48.     global _server, _server
  49.     if _server is None:
  50.         Zeroconf = Zeroconf
  51.         import calibre.utils.Zeroconf
  52.         
  53.         try:
  54.             _server = Zeroconf()
  55.         except:
  56.             time.sleep(0.2)
  57.             _server = Zeroconf()
  58.  
  59.         atexit.register(stop_server)
  60.     
  61.     return _server
  62.  
  63.  
  64. def publish(desc, type, port, properties = None, add_hostname = True):
  65.     port = int(port)
  66.     server = start_server()
  67.     if add_hostname:
  68.         
  69.         try:
  70.             hostname = socket.gethostname().partition('.')[0]
  71.         except:
  72.             hostname = 'Unknown'
  73.  
  74.         desc += ' (on %s)' % hostname
  75.     
  76.     local_ip = get_external_ip()
  77.     type = type + '.local.'
  78.     ServiceInfo = ServiceInfo
  79.     import calibre.utils.Zeroconf
  80.     service = ServiceInfo(type, desc + '.' + type, address = socket.inet_aton(local_ip), port = port, properties = properties, server = hostname + '.local.')
  81.     server.registerService(service)
  82.  
  83.  
  84. def stop_server():
  85.     global _server
  86.     if _server is not None:
  87.         
  88.         try:
  89.             _server.close()
  90.         finally:
  91.             _server = None
  92.  
  93.     
  94.  
  95.