| 1 | #include <FTPEx.au3>
|
|---|
| 2 | ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|---|
| 3 | ; This var would need to be addded to FTPEx.au3. It is used to store the dll "handle" from the callback
|
|---|
| 4 | ; so that it can be freed later during _FTP_Close().
|
|---|
| 5 | Global $__ghCallback_FTP = -1
|
|---|
| 6 | ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 | $server = 'ftp.mozilla.org'
|
|---|
| 10 | $username = ''
|
|---|
| 11 | $pass = ''
|
|---|
| 12 |
|
|---|
| 13 | $Open = _FTP_Open('MyFTP Control')
|
|---|
| 14 | $Callback = _FTP_SetStatusCallback($Open, '_FTPStatus')
|
|---|
| 15 | $Conn = _FTP_Connect($Open, $server, $username, $pass, 0, 21, 1, 0, $Callback)
|
|---|
| 16 | $Ftpc = __FTP_Close($Open)
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 | ;Example Callback Function
|
|---|
| 20 | Func _FTPStatus($hInternet, $dwContent, $dwInternetStatus, $lpvStatusInformation, $dwStatusInformationLength)
|
|---|
| 21 |
|
|---|
| 22 | Switch $dwInternetStatus
|
|---|
| 23 | Case 50; $INTERNET_STATUS_CLOSING_CONNECTION
|
|---|
| 24 | ConsoleWrite('CLOSING_CONNECTION.....'& @CRLF)
|
|---|
| 25 | Case 51; $INTERNET_STATUS_CONNECTION_CLOSED
|
|---|
| 26 | ConsoleWrite('CONNECTION_CLOSED' & @CRLF)
|
|---|
| 27 | Case 20; $INTERNET_STATUS_CONNECTING_TO_SERVER
|
|---|
| 28 | ConsoleWrite('CONNECTING_TO_SERVER.....'& @CRLF)
|
|---|
| 29 | Case 21; $INTERNET_STATUS_CONNECTED_TO_SERVER
|
|---|
| 30 | ConsoleWrite('CONNECTED_TO_SERVER' & @CRLF)
|
|---|
| 31 | Case 42; $INTERNET_STATUS_CTL_RESPONSE_RECEIVED
|
|---|
| 32 | ConsoleWrite('CTL_RESPONSE_RECEIVED' & @CRLF)
|
|---|
| 33 | Case 120; $INTERNET_STATUS_INTERMEDIATE_RESPONSE
|
|---|
| 34 | ConsoleWrite('INTERMEDIATE_RESPONSE' & @CRLF)
|
|---|
| 35 | Case 43; $INTERNET_STATUS_PREFETCH
|
|---|
| 36 | ConsoleWrite('PREFETCH' & @CRLF)
|
|---|
| 37 | Case 110;$INTERNET_STATUS_REDIRECT
|
|---|
| 38 | ConsoleWrite('REDIRECT' & @CRLF)
|
|---|
| 39 | Case 100; $INTERNET_STATUS_REQUEST_COMPLETE
|
|---|
| 40 | ConsoleWrite('REQUEST_COMPLETE' & @CRLF)
|
|---|
| 41 | Case 60 ;$INTERNET_STATUS_HANDLE_CREATED
|
|---|
| 42 | ConsoleWrite('HANDLE_CREATED ' & @CRLF)
|
|---|
| 43 | Case 70 ;$INTERNET_STATUS_HANDLE_CLOSING
|
|---|
| 44 | ConsoleWrite('HANDLE_CLOSING' & @CRLF)
|
|---|
| 45 | Case 30; $INTERNET_STATUS_SENDING_REQUEST
|
|---|
| 46 | ConsoleWrite('SENDING_REQUEST.....' & @CRLF)
|
|---|
| 47 | Case 31; $INTERNET_STATUS_REQUEST_SENT
|
|---|
| 48 | Local $Size, $iBytesRead
|
|---|
| 49 | $Size = DllStructCreate('dword')
|
|---|
| 50 | _WinAPI_ReadProcessMemory(_WinAPI_GetCurrentProcess(), $lpvStatusInformation, DllStructGetPtr($Size), $dwStatusInformationLength, $iBytesRead)
|
|---|
| 51 | ConsoleWrite('REQUEST_SENT | Size = ' & DllStructGetData($Size, 1) & ' Bytes Bytes read = ' & $iBytesRead & @CRLF)
|
|---|
| 52 | Case 40; $INTERNET_STATUS_RECEIVING_RESPONSE
|
|---|
| 53 | ConsoleWrite('RECEIVING_RESPONSE.....'& @CRLF)
|
|---|
| 54 | Case 41;$INTERNET_STATUS_RESPONSE_RECEIVED
|
|---|
| 55 | Local $Size, $iBytesRead
|
|---|
| 56 | $Size = DllStructCreate('dword')
|
|---|
| 57 | _WinAPI_ReadProcessMemory(_WinAPI_GetCurrentProcess(), $lpvStatusInformation, DllStructGetPtr($Size), $dwStatusInformationLength, $iBytesRead)
|
|---|
| 58 | ConsoleWrite('REQUEST_SENT | Size = ' & DllStructGetData($Size, 1) & ' Bytes Bytes read = ' & $iBytesRead & @CRLF)
|
|---|
| 59 | Case 200; $INTERNET_STATUS_STATE_CHANGE
|
|---|
| 60 | ConsoleWrite('STATE_CHANGE' & @CRLF)
|
|---|
| 61 | Case 10; $INTERNET_STATUS_RESOLVING_NAME
|
|---|
| 62 | ConsoleWrite('RESOLVING_NAME.....'& @CRLF)
|
|---|
| 63 | Case 11; $INTERNET_STATUS_NAME_RESOLVED
|
|---|
| 64 | ConsoleWrite('NAME_RESOLVED' & @CRLF)
|
|---|
| 65 | Case Else
|
|---|
| 66 | ConsoleWrite($dwInternetStatus & @CRLF)
|
|---|
| 67 | EndSwitch
|
|---|
| 68 | EndFunc ;==>_InternetStatusCallback
|
|---|
| 69 | #EndRegion
|
|---|
| 70 |
|
|---|
| 71 |
|
|---|
| 72 | ;FUNCTION# ====================================================================================================================
|
|---|
| 73 | ; Name...........: _FTP_SetStatusCallback
|
|---|
| 74 | ; Description ...: Registers callback function that WinINet functions can call as progress is made during an operation.
|
|---|
| 75 | ; Syntax.........: _InternetSetStatusCallback($l_InternetSession, $sFunctionName)
|
|---|
| 76 | ; Parameters ....: $l_FTPSession - as returned by _FTP_Open().
|
|---|
| 77 | ; $sFunctionName - Function Name
|
|---|
| 78 | ; Return values .: Success - Pointer to callback function
|
|---|
| 79 | ; Failure - 0
|
|---|
| 80 | ; Author ........: Beege
|
|---|
| 81 | ; Modified.......:
|
|---|
| 82 | ; Remarks .......: User Callback function MUST have five parameters. Ex: _Callback(parm1,parm2,parm3,parm4,parm5)
|
|---|
| 83 | ; Because callbacks are made during processing of the request, the application should spend little time in
|
|---|
| 84 | ; the callback function to avoid degrading data throughput on the network. For example, displaying a dialog
|
|---|
| 85 | ; box in a callback function can be such a lengthy operation that the server terminates the request.
|
|---|
| 86 | ; Related .......:
|
|---|
| 87 | ; Link ..........: @@MsdnLink@@ InternetSetStatusCallback
|
|---|
| 88 | ; Example .......: Yes
|
|---|
| 89 | ; ===============================================================================================================================
|
|---|
| 90 | Func _FTP_SetStatusCallback($l_FTPSession, $s_FunctionName)
|
|---|
| 91 | If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
|
|---|
| 92 |
|
|---|
| 93 | Local $CallBack_Register = DllCallbackRegister($s_FunctionName, "none", "ptr;ptr;dword;ptr;dword")
|
|---|
| 94 | If @error Then Return SetError(-1, 0, 0)
|
|---|
| 95 |
|
|---|
| 96 | Local $ah_CallBackFunction = DllCall($__ghWinInet_FTP, "ptr", "InternetSetStatusCallback", "ptr", $l_FTPSession, "ulong_ptr", DllCallbackGetPtr($CallBack_Register))
|
|---|
| 97 | If @error Then Return SetError(-1, 0, 0)
|
|---|
| 98 |
|
|---|
| 99 | $__ghCallback_FTP = $ah_CallBackFunction[1]
|
|---|
| 100 | Return $ah_CallBackFunction[1]
|
|---|
| 101 |
|
|---|
| 102 | EndFunc ;==>_InternetSetStatusCallback
|
|---|
| 103 |
|
|---|
| 104 | ;A modified _FTP_Close() that releases Dllcallback if it has been registered. (Function taken from v3.3.1.3 beta)
|
|---|
| 105 | Func __FTP_Close($l_InternetSession)
|
|---|
| 106 | If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
|
|---|
| 107 | Local $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $l_InternetSession)
|
|---|
| 108 | If @error Or $ai_InternetCloseHandle[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
|
|---|
| 109 |
|
|---|
| 110 | If $__ghCallback_FTP <> -1 Then DllCallbackFree($__ghCallback_FTP);<<<<< This is the only part that has been changed from the original.
|
|---|
| 111 |
|
|---|
| 112 | Return $ai_InternetCloseHandle[0]
|
|---|
| 113 |
|
|---|
| 114 | EndFunc ;==>_FTP_Close
|
|---|