12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- # A demo of using the RAS API from Python
- import sys
-
- import win32ras
-
-
- # The error raised if we can not
- class ConnectionError(Exception):
- pass
-
-
- def Connect(rasEntryName, numRetries=5):
- """Make a connection to the specified RAS entry.
-
- Returns a tuple of (bool, handle) on success.
- - bool is 1 if a new connection was established, or 0 is a connection already existed.
- - handle is a RAS HANDLE that can be passed to Disconnect() to end the connection.
-
- Raises a ConnectionError if the connection could not be established.
- """
- assert numRetries > 0
- for info in win32ras.EnumConnections():
- if info[1].lower() == rasEntryName.lower():
- print("Already connected to", rasEntryName)
- return 0, info[0]
-
- dial_params, have_pw = win32ras.GetEntryDialParams(None, rasEntryName)
- if not have_pw:
- print("Error: The password is not saved for this connection")
- print(
- "Please connect manually selecting the 'save password' option and try again"
- )
- sys.exit(1)
-
- print("Connecting to", rasEntryName, "...")
- retryCount = numRetries
- while retryCount > 0:
- rasHandle, errCode = win32ras.Dial(None, None, dial_params, None)
- if win32ras.IsHandleValid(rasHandle):
- bValid = 1
- break
- print("Retrying...")
- win32api.Sleep(5000)
- retryCount = retryCount - 1
-
- if errCode:
- raise ConnectionError(errCode, win32ras.GetErrorString(errCode))
- return 1, rasHandle
-
-
- def Disconnect(handle):
- if type(handle) == type(""): # have they passed a connection name?
- for info in win32ras.EnumConnections():
- if info[1].lower() == handle.lower():
- handle = info[0]
- break
- else:
- raise ConnectionError(0, "Not connected to entry '%s'" % handle)
-
- win32ras.HangUp(handle)
-
-
- usage = """rasutil.py - Utilities for using RAS
-
- Usage:
- rasutil [-r retryCount] [-c rasname] [-d rasname]
-
- -r retryCount - Number of times to retry the RAS connection
- -c rasname - Connect to the phonebook entry specified by rasname
- -d rasname - Disconnect from the phonebook entry specified by rasname
- """
-
-
- def Usage(why):
- print(why)
- print(usage)
- sys.exit(1)
-
-
- if __name__ == "__main__":
- import getopt
-
- try:
- opts, args = getopt.getopt(sys.argv[1:], "r:c:d:")
- except getopt.error as why:
- Usage(why)
- retries = 5
- if len(args) != 0:
- Usage("Invalid argument")
-
- for opt, val in opts:
- if opt == "-c":
- Connect(val, retries)
- if opt == "-d":
- Disconnect(val)
- if opt == "-r":
- retries = int(val)
|