home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / hplip / base / slp.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  4.0 KB  |  152 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import sys
  5. import time
  6. import socket
  7. import select
  8. import struct
  9. import random
  10. import re
  11. from g import *
  12. prod_pat = re.compile('\\(\\s*x-hp-prod_id\\s*=\\s*(.*?)\\s*\\)', re.IGNORECASE)
  13. mac_pat = re.compile('\\(\\s*x-hp-mac\\s*=\\s*(.*?)\\s*\\)', re.IGNORECASE)
  14. num_port_pat = re.compile('\\(\\s*x-hp-num_port\\s*=\\s*(.*?)\\s*\\)', re.IGNORECASE)
  15. ip_pat = re.compile('\\(\\s*x-hp-ip\\s*=\\s*(.*?)\\s*\\)', re.IGNORECASE)
  16. p1_pat = re.compile('\\(\\s*x-hp-p1\\s*=(?:\\d\\)|\\s*(.*?)\\s*\\))', re.IGNORECASE)
  17. p2_pat = re.compile('\\(\\s*x-hp-p2\\s*=(?:\\d\\)|\\s*(.*?)\\s*\\))', re.IGNORECASE)
  18. p3_pat = re.compile('\\(\\s*x-hp-p3\\s*=(?:\\d\\)|\\s*(.*?)\\s*\\))', re.IGNORECASE)
  19. hn_pat = re.compile('\\(\\s*x-hp-hn\\s*=\\s*(.*?)\\s*\\)', re.IGNORECASE)
  20.  
  21. def detectNetworkDevices(mcast_addr = '224.0.1.60', mcast_port = 427, ttl = 4, timeout = 5, xid = None, qappobj = None):
  22.     found_devices = { }
  23.     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  24.     
  25.     try:
  26.         addr = socket.gethostname()
  27.         intf = socket.gethostbyname(addr)
  28.     except socket.error:
  29.         x = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  30.         x.connect(('1.2.3.4', 56))
  31.         intf = x.getsockname()[0]
  32.         x.close()
  33.  
  34.     s.setblocking(0)
  35.     ttl = struct.pack('b', ttl)
  36.     
  37.     try:
  38.         s.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_TTL, ttl)
  39.         s.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(intf) + socket.inet_aton('0.0.0.0'))
  40.     except:
  41.         log.error('Unable to setup multicast socket for SLP.')
  42.         return { }
  43.  
  44.     if not xid:
  45.         pass
  46.     packet = ''.join([
  47.         '\x01\x06\x00,\x00\x00en\x00\x03',
  48.         struct.pack('!H', random.randint(1, 65535)),
  49.         '\x00\x00\x00\x18service:x-hpnp-discover:\x00\x00\x00\x00'])
  50.     
  51.     try:
  52.         s.sendto(packet, (mcast_addr, mcast_port))
  53.     except socket.error:
  54.         e = None
  55.         log.error('Unable to send broadcast SLP packet: %s' % e)
  56.  
  57.     time_left = timeout
  58.     while time_left > 0:
  59.         if qappobj is not None:
  60.             qappobj.processEvents(0)
  61.         
  62.         start_time = time.time()
  63.         (r, w, e) = select.select([
  64.             s], [], [], time_left)
  65.         time_left -= time.time() - start_time
  66.         if qappobj is not None:
  67.             qappobj.processEvents(0)
  68.         
  69.         if r == []:
  70.             continue
  71.         
  72.         (data, addr) = s.recvfrom(1024)
  73.         (ver, func, length, flags, dialect, lang_code, char_encode, recv_xid, status_code, attr_length) = struct.unpack('!BBHBBHHHHH', data[:16])
  74.         x = struct.unpack('!%ds' % attr_length, data[16:])[0].strip()
  75.         y = { }
  76.         
  77.         try:
  78.             num_ports = int(num_port_pat.search(x).group(1))
  79.         except (AttributeError, ValueError):
  80.             num_ports = 1
  81.  
  82.         if num_ports == 0:
  83.             num_ports = 1
  84.         
  85.         y['num_ports'] = num_ports
  86.         y['num_devices'] = 0
  87.         y['device1'] = '0'
  88.         y['device2'] = '0'
  89.         y['device3'] = '0'
  90.         
  91.         try:
  92.             y['device1'] = p1_pat.search(x).group(1)
  93.         except AttributeError:
  94.             y['device1'] = '0'
  95.  
  96.         y['num_devices'] += 1
  97.         if num_ports > 1:
  98.             
  99.             try:
  100.                 y['device2'] = p2_pat.search(x).group(1)
  101.             except AttributeError:
  102.                 y['device2'] = '0'
  103.  
  104.             y['num_devices'] += 1
  105.             if num_ports > 2:
  106.                 
  107.                 try:
  108.                     y['device3'] = p3_pat.search(x).group(1)
  109.                 except AttributeError:
  110.                     y['device3'] = '0'
  111.  
  112.                 y['num_devices'] += 1
  113.             
  114.         
  115.         if y['device1'] is None:
  116.             y['device1'] = '0'
  117.         
  118.         if y['device2'] is None:
  119.             y['device2'] = '0'
  120.         
  121.         if y['device3'] is None:
  122.             y['device3'] = '0'
  123.         
  124.         
  125.         try:
  126.             y['product_id'] = prod_pat.search(x).group(1)
  127.         except AttributeError:
  128.             y['product_id'] = ''
  129.  
  130.         
  131.         try:
  132.             y['mac'] = mac_pat.search(x).group(1)
  133.         except AttributeError:
  134.             y['mac'] = ''
  135.  
  136.         
  137.         try:
  138.             y['ip'] = ip_pat.search(x).group(1)
  139.         except AttributeError:
  140.             y['ip'] = ''
  141.  
  142.         
  143.         try:
  144.             y['hn'] = hn_pat.search(x).group(1)
  145.         except AttributeError:
  146.             y['hn'] = ''
  147.  
  148.         y['status_code'] = status_code
  149.         found_devices[addr[0]] = y
  150.     return found_devices
  151.  
  152.