home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / system-config-printer / troubleshoot / CheckNetworkServerSanity.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  4.8 KB  |  162 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import cups
  5. import os
  6. import smburi
  7. import socket
  8. import subprocess
  9. from timedops import TimedSubprocess, TimedOperation
  10. from base import *
  11.  
  12. try:
  13.     import smbc
  14. except:
  15.     pass
  16.  
  17.  
  18. class CheckNetworkServerSanity(Question):
  19.     
  20.     def __init__(self, troubleshooter):
  21.         Question.__init__(self, troubleshooter, 'Check network server sanity')
  22.         troubleshooter.new_page(gtk.Label(), self)
  23.  
  24.     
  25.     def display(self):
  26.         self.answers = { }
  27.         answers = self.troubleshooter.answers
  28.         if not answers.has_key('remote_server_name') and not answers.has_key('remote_server_ip_address'):
  29.             return False
  30.         parent = self.troubleshooter.get_window()
  31.         server_name = answers['remote_server_name']
  32.         server_port = answers.get('remote_server_port', 631)
  33.         if server_name:
  34.             
  35.             try:
  36.                 ai = socket.getaddrinfo(server_name, server_port)
  37.                 resolves = map((lambda .0: (family, socktype, proto, canonname, sockaddr) = .0sockaddr[0]), ai)
  38.             except socket.gaierror:
  39.                 not answers.has_key('remote_server_ip_address')
  40.                 not answers.has_key('remote_server_ip_address')
  41.                 resolves = False
  42.             except:
  43.                 not answers.has_key('remote_server_ip_address')
  44.  
  45.             self.answers['remote_server_name_resolves'] = resolves
  46.             if resolves:
  47.                 ipaddr = answers.get('remote_server_ip_address', '')
  48.                 if ipaddr:
  49.                     
  50.                     try:
  51.                         resolves.index(ipaddr)
  52.                     except ValueError:
  53.                         not answers.has_key('remote_server_ip_address')
  54.                         not answers.has_key('remote_server_ip_address')
  55.                         server_name = ipaddr
  56.                     except:
  57.                         not answers.has_key('remote_server_ip_address')<EXCEPTION MATCH>ValueError
  58.                     
  59.  
  60.                 not answers.has_key('remote_server_ip_address')<EXCEPTION MATCH>ValueError
  61.             
  62.         else:
  63.             server_name = answers['remote_server_ip_address']
  64.             
  65.             try:
  66.                 ai = socket.getaddrinfo(server_name, server_port)
  67.                 resolves = map((lambda .0: (family, socktype, proto, canonname, sockaddr) = .0sockaddr[0]), ai)
  68.             except socket.gaierror:
  69.                 resolves = False
  70.  
  71.             self.answers['remote_server_name_resolves'] = resolves
  72.         self.answers['remote_server_try_connect'] = server_name
  73.         if self.answers['remote_server_name_resolves'] and answers.get('cups_device_uri_scheme', 'ipp') == 'ipp':
  74.             
  75.             try:
  76.                 cups.setServer(server_name)
  77.                 cups.setPort(server_port)
  78.                 self.op = TimedOperation(cups.Connection, parent = parent)
  79.                 c = self.op.run()
  80.                 ipp_connect = True
  81.             except RuntimeError:
  82.                 ipp_connect = False
  83.  
  84.             self.answers['remote_server_connect_ipp'] = ipp_connect
  85.             if ipp_connect:
  86.                 
  87.                 try:
  88.                     self.op = TimedOperation(c.getPrinters, parent = parent)
  89.                     self.op.run()
  90.                     cups_server = True
  91.                 except:
  92.                     cups_server = False
  93.  
  94.                 self.answers['remote_server_cups'] = cups_server
  95.                 if cups_server and answers.get('cups_queue', False):
  96.                     
  97.                     try:
  98.                         self.op = TimedOperation(c.getPrinterAttributes, args = (answers['cups_queue'],), parent = parent)
  99.                         attr = self.op.run()
  100.                         self.answers['remote_cups_queue_attributes'] = attr
  101.  
  102.                 
  103.             
  104.         
  105.         if self.answers['remote_server_name_resolves'] and not self.answers.get('remote_server_connect_ipp', False):
  106.             context = None
  107.             
  108.             try:
  109.                 context = smbc.Context()
  110.                 name = self.answers['remote_server_try_connect']
  111.                 self.op = TimedOperation(context.opendir, args = ('smb://%s/' % name,), parent = parent)
  112.                 dir = self.op.run()
  113.                 self.op = TimedOperation(dir.getdents, parent = parent)
  114.                 shares = self.op.run()
  115.                 self.answers['remote_server_smb'] = True
  116.                 self.answers['remote_server_smb_shares'] = shares
  117.             except NameError:
  118.                 pass
  119.             except RuntimeError:
  120.                 (e, s) = None
  121.                 self.answers['remote_server_smb_shares'] = (e, s)
  122.  
  123.             if context != None and answers.has_key('cups_printer_dict'):
  124.                 uri = answers['cups_printer_dict'].get('device-uri', '')
  125.                 u = smburi.SMBURI(uri)
  126.                 (group, host, share, user, password) = u.separate()
  127.                 accessible = False
  128.                 
  129.                 try:
  130.                     self.op = TimedOperation(context.open, args = ('smb://%s/%s' % (host, share), os.O_RDWR, 511), parent = parent)
  131.                     f = self.op.run()
  132.                     accessible = True
  133.                 except RuntimeError:
  134.                     (e, s) = None
  135.                     accessible = (e, s)
  136.  
  137.                 self.answers['remote_server_smb_share_anon_access'] = accessible
  138.             
  139.         
  140.         if self.answers['remote_server_name_resolves'] and not answers.has_key('remote_server_traceroute'):
  141.             
  142.             try:
  143.                 self.op = TimedSubprocess(parent = parent, args = [
  144.                     'traceroute',
  145.                     '-w',
  146.                     '1',
  147.                     server_name], stdin = file('/dev/null'), stdout = subprocess.PIPE, stderr = subprocess.PIPE)
  148.                 self.answers['remote_server_traceroute'] = self.op.run()
  149.  
  150.         
  151.         return False
  152.  
  153.     
  154.     def collect_answer(self):
  155.         return self.answers
  156.  
  157.     
  158.     def cancel_operation(self):
  159.         self.op.cancel()
  160.  
  161.  
  162.