home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CMCD0704.ISO / Software / Shareware / Comunicatii / jyte / jyte.exe / rasutil.py < prev    next >
Text File  |  2000-10-16  |  3KB  |  89 lines

  1. # A demo of using the RAS API from Python
  2. import sys
  3. import string
  4. import win32ras
  5.  
  6. # The error raised if we can not
  7. class ConnectionError(Exception):
  8.     pass
  9.     
  10. def Connect(rasEntryName, numRetries = 5):
  11.     """Make a connection to the specified RAS entry.
  12.     
  13.     Returns a tuple of (bool, handle) on success.
  14.     - bool is 1 if a new connection was established, or 0 is a connection already existed.
  15.     - handle is a RAS HANDLE that can be passed to Disconnect() to end the connection.
  16.     
  17.     Raises a ConnectionError if the connection could not be established.
  18.     """
  19.     assert numRetries > 0
  20.     for info in win32ras.EnumConnections():
  21.         if string.lower(info[1])==string.lower(rasEntryName):
  22.             print "Already connected to", rasEntryName
  23.             return 0, info[0]
  24.  
  25.     dial_params, have_pw = win32ras.GetEntryDialParams(None, rasEntryName)
  26.     if not have_pw:
  27.         print "Error: The password is not saved for this connection"
  28.         print "Please connect manually selecting the 'save password' option and try again"
  29.         sys.exit(1)
  30.  
  31.     print "Connecting to", rasEntryName, "..."
  32.     retryCount = numRetries
  33.     while retryCount > 0:
  34.         rasHandle, errCode = win32ras.Dial(None, None, dial_params, None)
  35.         if win32ras.IsHandleValid(rasHandle):
  36.             bValid = 1
  37.             break
  38.         print "Retrying..."
  39.         win32api.Sleep(5000)
  40.         retryCount = retryCount - 1
  41.     
  42.     if errCode:
  43.         raise ConnectionError(errCode, win32ras.GetErrorString(errCode))
  44.     return 1, rasHandle
  45.  
  46. def Disconnect(handle):
  47.     if type(handle)==type(''): # have they passed a connection name?
  48.         for info in win32ras.EnumConnections():
  49.             if string.lower(info[1])==string.lower(handle):
  50.                 handle = info[0]
  51.                 break
  52.         else:
  53.             raise ConnectionError(0, "Not connected to entry '%s'" % handle)
  54.  
  55.     win32ras.HangUp(handle)
  56.  
  57. usage="""rasutil.py - Utilities for using RAS
  58.  
  59. Usage:
  60.   rasutil [-r retryCount] [-c rasname] [-d rasname]
  61.   
  62.   -r retryCount - Number of times to retry the RAS connection
  63.   -c rasname - Connect to the phonebook entry specified by rasname
  64.   -d rasname - Disconnect from the phonebook entry specified by rasname
  65. """
  66.  
  67. def Usage(why):
  68.     print why
  69.     print usage
  70.     sys.exit(1)
  71.     
  72. if __name__=='__main__':
  73.     import getopt
  74.     try:
  75.         opts, args = getopt.getopt(sys.argv[1:], "r:c:d:")
  76.     except getopt.error, why:
  77.         Usage(why)
  78.     retries = 5
  79.     if len(args) <> 0:
  80.         Usage("Invalid argument")
  81.  
  82.     for opt, val in opts:
  83.         if opt=='-c':
  84.             Connect(val, retries)
  85.         if opt=='-d':
  86.             Disconnect(val)
  87.         if opt=='-r':
  88.             retries = int(val)
  89.