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 Connect(entryName, bUseCallback): if bUseCallback: theCallback = Callback win32event.ResetEvent(callbackEvent) else: theCallback = None # in order to *use* the username/password of a particular dun entry, one must # explicitly get those params under win95.... try: dp, b = win32ras.GetEntryDialParams( None, entryName ) except: print("Couldn't find DUN entry: %s" % entryName) else: hras, rc = win32ras.Dial(None, None, (entryName, "", "", dp[ 3 ], dp[ 4 ], ""),theCallback) # hras, rc = win32ras.Dial(None, None, (entryName, ),theCallback) # print hras, rc if not bUseCallback and rc != 0: print("Could not dial the RAS connection:", win32ras.GetErrorString(rc)) hras = HangUp( hras ) # don't wait here if there's no need to.... elif bUseCallback and win32event.WaitForSingleObject(callbackEvent, 60000)!=win32event.WAIT_OBJECT_0: print("Gave up waiting for the process to complete!") # sdk docs state one must explcitly hangup, even if there's an error.... try: cs = win32ras.GetConnectStatus( hras ) except: # on error, attempt a hang up anyway.... hras = HangUp( hras ) else: if int( cs[ 0 ] ) == win32ras.RASCS_Disconnected: hras = HangUp( hras ) return hras, rc