Hi
Robert's code. If it doesn't make it through please let me know and I'll
email it to you directly.
I don't know whether there is a newer version anywhere.
Cheers
Graham
**********************************************************
* FTP Services for Visual Foxpro 5.0+ *
* Written by: Robert Abram *
* Date: Sept 1998 *
* *
* Revision 1.1a *
* *
* wininet.dll needs to be in the windows/system *
* directory. *
* *
* Updated 3/16/99 - Changed Date Usage to comply with *
* Strict Date handling. *
*
*
* Added 3/16/99 Functions - AutoDialInternet *
* AutoDialHangUp *
* DialInternet *
* DialHangUp *
* GetConnectedState *
* GoOnline *
**********************************************************
*
* Internet API Returns
*
#define ERROR_SUCCESS
0
#define ERROR_FILE_NOT_FOUND 2
#define ERROR_PATH_NOT_FOUND 3
#define ERROR_ACCESS_DENIED 5
#define ERROR_INVALID_HANDLE 6
#define ERROR_NO_MORE_FILES
18
#define ERROR_FILE_EXISTS 80
#define ERROR_INVALID_PARAMETER 87
#define ERROR_INTERNET_BASE
12000
#define ERROR_INTERNET_OUT_OF_HANDLES
(ERROR_INTERNET_BASE + 1)
#define ERROR_INTERNET_TIMEOUT
(ERROR_INTERNET_BASE + 2)
#define ERROR_INTERNET_EXTENDED_ERROR
(ERROR_INTERNET_BASE + 3)
#define ERROR_INTERNET_INTERNAL_ERROR
(ERROR_INTERNET_BASE + 4)
#define ERROR_INTERNET_INVALID_URL
(ERROR_INTERNET_BASE + 5)
#define ERROR_INTERNET_UNRECOGNIZED_SCHEME
(ERROR_INTERNET_BASE + 6)
#define ERROR_INTERNET_NAME_NOT_RESOLVED
(ERROR_INTERNET_BASE + 7)
#define ERROR_INTERNET_PROTOCOL_NOT_FOUND
(ERROR_INTERNET_BASE + 8)
#define ERROR_INTERNET_INVALID_OPTION
(ERROR_INTERNET_BASE + 9)
#define ERROR_INTERNET_BAD_OPTION_LENGTH
(ERROR_INTERNET_BASE + 10)
#define ERROR_INTERNET_OPTION_NOT_SETTABLE
(ERROR_INTERNET_BASE + 11)
#define ERROR_INTERNET_SHUTDOWN
(ERROR_INTERNET_BASE + 12)
#define ERROR_INTERNET_INCORRECT_USER_NAME
(ERROR_INTERNET_BASE + 13)
#define ERROR_INTERNET_INCORRECT_PASSWORD
(ERROR_INTERNET_BASE + 14)
#define ERROR_INTERNET_LOGIN_FAILURE
(ERROR_INTERNET_BASE + 15)
#define ERROR_INTERNET_INVALID_OPERATION
(ERROR_INTERNET_BASE + 16)
#define ERROR_INTERNET_OPERATION_CANCELLED
(ERROR_INTERNET_BASE + 17)
#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE
(ERROR_INTERNET_BASE + 18)
#define ERROR_INTERNET_INCORRECT_HANDLE_STATE
(ERROR_INTERNET_BASE + 19)
#define ERROR_INTERNET_NOT_PROXY_REQUEST
(ERROR_INTERNET_BASE + 20)
#define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND
(ERROR_INTERNET_BASE + 21)
#define ERROR_INTERNET_BAD_REGISTRY_PARAMETER
(ERROR_INTERNET_BASE + 22)
#define ERROR_INTERNET_NO_DIRECT_ACCESS
(ERROR_INTERNET_BASE + 23)
#define ERROR_INTERNET_NO_CONTEXT
(ERROR_INTERNET_BASE + 24)
#define ERROR_INTERNET_NO_CALLBACK
(ERROR_INTERNET_BASE + 25)
#define ERROR_INTERNET_REQUEST_PENDING
(ERROR_INTERNET_BASE + 26)
#define ERROR_INTERNET_INCORRECT_FORMAT
(ERROR_INTERNET_BASE + 27)
#define ERROR_INTERNET_ITEM_NOT_FOUND
(ERROR_INTERNET_BASE + 28)
#define ERROR_INTERNET_CANNOT_CONNECT
(ERROR_INTERNET_BASE + 29)
#define ERROR_INTERNET_CONNECTION_ABORTED
(ERROR_INTERNET_BASE + 30)
#define ERROR_INTERNET_CONNECTION_RESET
(ERROR_INTERNET_BASE + 31)
#define ERROR_INTERNET_FORCE_RETRY
(ERROR_INTERNET_BASE + 32)
#define ERROR_INTERNET_INVALID_PROXY_REQUEST
(ERROR_INTERNET_BASE + 33)
#define ERROR_INTERNET_NEED_UI
(ERROR_INTERNET_BASE + 34)
#define ERROR_INTERNET_HANDLE_EXISTS
(ERROR_INTERNET_BASE + 36)
#define ERROR_INTERNET_SEC_CERT_DATE_INVALID
(ERROR_INTERNET_BASE + 37)
#define ERROR_INTERNET_SEC_CERT_CN_INVALID
(ERROR_INTERNET_BASE + 38)
#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR
(ERROR_INTERNET_BASE + 39)
#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR
(ERROR_INTERNET_BASE + 40)
#define ERROR_INTERNET_MIXED_SECURITY
(ERROR_INTERNET_BASE + 41)
#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE
(ERROR_INTERNET_BASE + 42)
#define ERROR_INTERNET_POST_IS_NON_SECURE
(ERROR_INTERNET_BASE + 43)
#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED
(ERROR_INTERNET_BASE + 44)
#define ERROR_INTERNET_INVALID_CA
(ERROR_INTERNET_BASE + 45)
#define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP
(ERROR_INTERNET_BASE + 46)
#define ERROR_INTERNET_ASYNC_THREAD_FAILED
(ERROR_INTERNET_BASE + 47)
#define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE
(ERROR_INTERNET_BASE + 48)
#define ERROR_INTERNET_DIALOG_PENDING
(ERROR_INTERNET_BASE + 49)
#define ERROR_INTERNET_RETRY_DIALOG
(ERROR_INTERNET_BASE + 50)
#define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR
(ERROR_INTERNET_BASE + 52)
#define ERROR_INTERNET_INSERT_CDROM
(ERROR_INTERNET_BASE + 53)
*
* FTP API errors
*
#define FTP_TRANSFER_IN_PROGRESS
(ERROR_INTERNET_BASE + 110)
#define FTP_DROPPED
(ERROR_INTERNET_BASE + 111)
#define FTP_NO_PASSIVE_MODE
(ERROR_INTERNET_BASE + 112)
*
* additional Internet API error codes
*
#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR
(ERROR_INTERNET_BASE + 157)
#define ERROR_INTERNET_UNABLE_TO_CACHE_FILE
(ERROR_INTERNET_BASE + 158)
#define ERROR_INTERNET_TCPIP_NOT_INSTALLED
(ERROR_INTERNET_BASE + 159)
#define ERROR_INTERNET_DISCONNECTED
(ERROR_INTERNET_BASE + 163)
#define ERROR_INTERNET_SERVER_UNREACHABLE
(ERROR_INTERNET_BASE + 164)
#define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE
(ERROR_INTERNET_BASE + 165)
#define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT
(ERROR_INTERNET_BASE + 166)
#define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT
(ERROR_INTERNET_BASE + 167)
#define ERROR_INTERNET_SEC_INVALID_CERT
(ERROR_INTERNET_BASE + 169)
#define ERROR_INTERNET_SEC_CERT_REVOKED
(ERROR_INTERNET_BASE + 170)
*
* handle types
*
#define ERROR_INTERNET_HANDLE_TYPE_INTERNET 1
#define ERROR_INTERNET_HANDLE_TYPE_CONNECT_FTP 2
#define ERROR_INTERNET_HANDLE_TYPE_CONNECT_GOPHER 3
#define ERROR_INTERNET_HANDLE_TYPE_CONNECT_HTTP 4
#define ERROR_INTERNET_HANDLE_TYPE_FTP_FIND 5
#define ERROR_INTERNET_HANDLE_TYPE_FTP_FIND_HTML 6
#define ERROR_INTERNET_HANDLE_TYPE_FTP_FILE 7
#define ERROR_INTERNET_HANDLE_TYPE_FTP_FILE_HTML 8
#define ERROR_INTERNET_HANDLE_TYPE_GOPHER_FIND 9
#define ERROR_INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 10
#define ERROR_INTERNET_HANDLE_TYPE_GOPHER_FILE 11
#define ERROR_INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 12
#define ERROR_INTERNET_HANDLE_TYPE_HTTP_REQUEST 13
#define BYTE_1
1
#define BYTE_2 256
#define BYTE_3 65536
#define BYTE_4
16777216
#define MAXDWORD
4294967295
*
* File Caching Flags
*
#define INTERNET_FLAG_DONT_CACHE
67108864
#define INTERNET_FLAG_HYPERLINK
1024
#define INTERNET_FLAG_MAKE_PERSISTENT
33554432
#define INTERNET_FLAG_MUST_CACHE_REQUEST
16
#define INTERNET_FLAG_RELOAD
2147483648
#define INTERNET_FLAG_NO_CACHE_WRITE
67108864
#define INTERNET_FLAG_RESYNCHRONIZE
2048
*
* File Attributes
*
#define FILE_ATTRIBUTE_READONLY
1
#define FILE_ATTRIBUTE_HIDDEN
2
#define FILE_ATTRIBUTE_SYSTEM
4
#define FILE_ATTRIBUTE_DIRECTORY
16
#define FILE_ATTRIBUTE_ARCHIVE
32
#define FILE_ATTRIBUTE_ENCRYPTED
64
#define FILE_ATTRIBUTE_NORMAL
128
#define FILE_ATTRIBUTE_TEMPORARY
256
#define FILE_ATTRIBUTE_SPARSE_FILE
512
#define FILE_ATTRIBUTE_REPARSE_POINT
1024
#define FILE_ATTRIBUTE_COMPRESSED
2048
#define FILE_ATTRIBUTE_OFFLINE
4096
#define BIT_ATTRIBUTE_READONLY
0
#define BIT_ATTRIBUTE_HIDDEN
1
#define BIT_ATTRIBUTE_SYSTEM
2
#define BIT_ATTRIBUTE_DIRECTORY
4
#define BIT_ATTRIBUTE_ARCHIVE
5
#define BIT_ATTRIBUTE_ENCRYPTED
6
#define BIT_ATTRIBUTE_NORMAL
7
#define BIT_ATTRIBUTE_TEMPORARY
8
#define BIT_ATTRIBUTE_SPARSE_FILE
9
#define BIT_ATTRIBUTE_REPARSE_POINT 10
#define BIT_ATTRIBUTE_COMPRESSED
11
#define BIT_ATTRIBUTE_OFFLINE
12
* Flags for InternetAutodial
#define INTERNET_AUTODIAL_FORCE_ONLINE 1
#define INTERNET_AUTODIAL_FORCE_UNATTENDED 2
#define INTERNET_AUTODIAL_FAILIFSECURITYCHECK 4
*
* FTP
*TYPE
#define FTP_TRANSFER_TYPE_UNKNOWN
0
#define FTP_TRANSFER_TYPE_ASCII
1
#define FTP_TRANSFER_TYPE_BINARY
2
* Flags for InternetGetConnectedState
#define INTERNET_CONNECTION_MODEM 1
#define INTERNET_CONNECTION_LAN 2
#define INTERNET_CONNECTION_PROXY 4
#define INTERNET_CONNECTION_MODEM_BUSY 8
#define FTP_TRANSFER_TYPE_MASK
3 && (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY)
*
* Internet Variables
#define INTERNET_DEFAULT FTP_PORT
21
#define INTERNET_SERVICE_FTP
1
#define INTERNET_OPEN_TYPE_DIRECT
1
#define INTERNET_CONNECT_FLAG_PASSIVE
#define cNULL
CHR(0)
#define MAX_PATH
260
****************************************************
* Class Ftp_Service *
****************************************************
DEFINE CLASS ftp_Service AS custom
cIPAddress = ""
cUserName = ""
cPassword = ""
cPort = "21" && Default
FTP PORT
nInet_Handle = 0
nConnect_Handle = 0
lDLL_Loaded = .F.
nResult_Code = 0
nExtended_Result = 0
cExtended_Message = ""
cCurrentDir = ""
nCachingType = INTERNET_FLAG_DONT_CACHE
cAgent = "Visual FoxPro" +
cNULL
****************************************************
PROCEDURE Init
IF _DOS OR _UNIX OR _MAC
RETURN .F.
ENDIF
ENDPROC
****************************************************
PROCEDURE LoadAPIFuncs
* Variables need for defines
LOCAL lpcAgent, nAccessType, lpcProxyName,
lpcProxyBypass, nFlags
LOCAL nInet_Handle, nConnect_Handle, lpcServer,
nPort, lpcUserName
LOCAL lpcPassword, nService, nContext, nMax_Path
LOCAL lpcDirectory, lpcFileName, lpcSearchStr,
lpcWIN32_FIND_DATA
LOCAL lpcRemoteFile, lpcNewFile, nFailIfExists,
nAttributes
LOCAL nError, lpcBuffer, nHandle, lpcDialUp
* Check to see if We have already declared functions
and loaded the DLL
IF THIS.lDLL_Loaded
RETURN ERROR_SUCCESS
ENDIF
* Declare a Kernel32 Functions
DECLARE Integer GetLastError IN Kernel32
DECLARE Integer FileTimeToSystemTime IN Kernel32
;
String @lpcBuffer, String
@lpcBuffer
* Declare DLL functions used by Program
DECLARE Integer InternetAutodial IN WinInet ;
Integer nAccessType, Integer
nHandle
DECLARE Integer InternetAutodialHangup IN
WinInet ;
Integer nFlags
DECLARE Integer InternetDial IN WinInet ;
Integer nHandle, String
@lpcDialUp, Integer nAccessType, Integer @nConnect_Handle, ;
Integer nFlags
DECLARE Integer InternetHangUp IN WinInet ;
Integer nConnect_Handle, Integer
nFlags
DECLARE Integer InternetGetConnectedState IN
WinInet ;
Integer @nContext, Integer
nFlags
DECLARE Integer InternetGoOnline IN WinInet ;
String @lpcURL, Integer nHandle,
Integer nFlags
DECLARE Integer InternetOpen IN WinInet ;
String @lpcAgent, Integer
nAccessType, String @lpcProxyName, ;
String @lpcProxyBypass, Integer
nFlags
DECLARE Integer InternetConnect IN WinInet ;
Integer nInet_Handle, String
@lpcServer, Short nPort, String @lpcUserName, ;
String @lpcPassword, Integer
nService, Integer nFlags, Integer nContext
DECLARE Integer InternetCloseHandle IN WinInet ;
Integer nConnect_Handle
* FTP Functions
DECLARE Integer FtpCreateDirectory IN WinInet ;
Integer nConnect_Handle, String
@lpcDirectory
DECLARE Integer FtpDeleteFile IN WinInet ;
Integer nConnect_Handle, String
@lpcFileName
DECLARE Integer FtpFindFirstFile IN WinInet ;
Integer nConnect_Handle, String
@lpcSearchStr, String @lpcWIN32_FIND_DATA, ;
Integer nFlags, Integer nContext
DECLARE Integer InternetFindNextFile IN WinInet
;
Integer nConnect_Handle, String
@lpcWIN32_FIND_DATA
DECLARE Integer FtpGetCurrentDirectory IN
WinInet ;
Integer nConnect_Handle, String
@lpcDirectory, Integer @nMax_Path
DECLARE Integer FtpGetFile IN WinInet ;
Integer nConnect_Handle, String
@lpcRemoteFile, String @lpcNewFile, ;
Integer nFailIfExists, Integer
nAttributes, Integer nFlags, ;
Integer nContext
DECLARE Integer FtpOpenFile IN WinInet ;
Integer nConnect_Handle, String
@lpcRemoteFile, Integer nAccessType, ;
Integer nFlags, Integer nContext
DECLARE Integer FtpPutFile IN WinInet ;
Integer nConnect_Handle, String
@lpcNewFile, String @lpcRemoteFile, ;
Integer nFlags, Integer nContext
DECLARE Integer FtpRemoveDirectory IN WinInet ;
Integer nConnect_Handle, String
@lpcDirectory
DECLARE Integer FtpRenameFile IN WinInet ;
Integer nConnect_Handle, String
@lpcRemoteFile, String @lpcNewFile
DECLARE Integer FtpSetCurrentDirectory IN
WinInet ;
Integer nConnect_Handle, String
@lpcDirectory
DECLARE Integer InternetGetLastResponseInfo IN
WinInet ;
Integer @nError, String
@lpcBuffer, Integer @nMax_Path
THIS.lDLL_Loaded = .T.
RETURN ERROR_SUCCESS
ENDPROC
****************************************************
PROCEDURE AutoDialInternet
LPARAMETERS lnType
LOCAL lnHWNDHandle, fResult
IF THIS.LoadAPIFuncs() != ERROR_SUCCESS
RETURN .F.
ENDIF
IF TYPE(lnType) != "N"
RETURN .F.
ENDIF
lnHWNDHandle = 0
fResult = InternetAutodial(lnType,
lnHWNDHandle)
THIS.GetExtendedError()
IF fResult = 0
RETURN .F.
ENDIF
RETURN .T.
ENDPROC
****************************************************
PROCEDURE AutoDialHangUp
LOCAL fResult
IF THIS.LoadAPIFuncs() != ERROR_SUCCESS
RETURN .F.
ENDIF
fResult = InternetAutoDialHangUp(0)
THIS.GetExtendedError()
IF fResult = 0
RETURN .F.
ENDIF
RETURN .T.
ENDPROC
****************************************************
PROCEDURE DialInternet
LPARAMETERS lcDialUpName, lnFlag
LOCAL fResult, lnConnectionID, lnHWNDHandle
IF THIS.LoadAPIFuncs() != ERROR_SUCCESS
RETURN -1
ENDIF
lnConnectionID = 0
lnHWNDHandle = 0
IF TYPE("lcDialUpName") != "C" OR ;
TYPE("lnFlag") != "N"
RETURN -1
ENDIF
IF LEN(ALLTRIM(lcDialUpName)) = 0
RETURN -1
ENDIF
lcDialUpName = lcDialUpName + cNULL
fResult = InternetDial(lnHWNDHandle,
@lcDialUpName, lnFlag, @lnConnectionID, 0)
THIS.GetExtendedError()
RETURN lnConnectionID
ENDPROC
****************************************************
PROCEDURE DialHangUp
LPARAMETERS lnConnectionID
LOCAL fResult
IF THIS.LoadAPIFuncs() != ERROR_SUCCESS
RETURN -1
ENDIF
IF TYPE("lnConnectionID") != "N"
RETURN .F.
ENDIF
fResult = InternetHangUp(@lnConnectionID, 0)
THIS.GetExtendedError()
IF fResult = 0
RETURN .F.
ELSE
RETURN .T.
ENDIF
ENDPROC
****************************************************
PROCEDURE GetConnectedState
LOCAL fResult, lnConnectionState
IF THIS.LoadAPIFuncs() != ERROR_SUCCESS
RETURN -1
ENDIF
lnConnectionState = 0
fResult =
InternetGetConnectedState(@lnConnectionState, 0)
THIS.GetExtendedError()
IF fResult = 0
RETURN -1
ENDIF
RETURN lnConnectionState
ENDPROC
****************************************************
PROCEDURE GoOnline
LPARAMETERS lcURL
LOCAL lnHWNDHandle, fResult
IF THIS.LoadAPIFuncs() != ERROR_SUCCESS
RETURN -1
ENDIF
IF TYPE("lcURL") != "C"
RETURN .F.
ENDIF
lcURL = lcURL + cNULL
lnHWNDHandle = 0
fResult = InternetGoOnline(@lcURL,
lnHWNDHandle, 0)
THIS.GetExtendedError()
IF fResult = 0
RETURN .F.
ELSE
RETURN .T.
ENDIF
ENDPROC
****************************************************
PROCEDURE OpenInternet
LPARAMETERS lcUserName, lcPassword, lcIPAddress,
lcPort
LOCAL lnPCount, fResult, lcTempDir, lnConnectHandle
* Check Passed Parameters
lnPCount = pcount()
IF lnPCount <> 4
nResult_Code =
ERROR_INTERNET_BAD_OPTION_LENGTH
RETURN .F.
ENDIF
* Make sure parameters are of the correct type
IF (TYPE("lcUserName") != "C") OR ;
(TYPE("lcPassword") != "C") OR ;
(TYPE("lcIPAddress") != "C") OR ;
(TYPE("lcPort") != "C")
nResult_Code = ERROR_INVALID_PARAMETER
RETURN .F.
ENDIF
* Check Parameter Values
IF EMPTY(lcUserName) OR EMPTY(lcPassword) OR
EMPTY(lcIPAddress)
nResult_Code =
ERROR_INTERNET_BAD_OPTION_LENGTH
RETURN .F.
ENDIF
IF THIS.LoadAPIFuncs() != ERROR_SUCCESS
RETURN .F.
ENDIF
* Open Handle to Internet
* Set Parameters
THIS.cUserName = lcUserName + cNULL &&
Store FTP Connection information
THIS.cPassword = lcPassword + cNULL
THIS.cIPAddress = lcIPAddress + cNULL
THIS.cPort = lcPort
THIS.nInet_Handle = InternetOpen((THIS.cAgent),
INTERNET_OPEN_TYPE_DIRECT, cNULL, cNULL, 0)
THIS.GetExtendedError()
* Unable to Get a Connection into the Internet
IF THIS.nInet_Handle = 0
THIS.CloseFtp()
RETURN .F.
ENDIF
* This Opens the FTP site and Gets the Current
Directory. The handle to the FTP site is opened
* and closed for each call to any function.
* Open FTP Site
lnConnect_Handle =
InternetConnect(THIS.nInet_Handle, (THIS.cIPAddress), VAL(lcPort), ;
(THIS.cUserName), (THIS.cPassword), INTERNET_SERVICE_FTP, 0, 0)
THIS.GetExtendedError()
IF lnConnect_Handle != 0
lcTempDir = SPACE(MAX_PATH)
fResult =
FtpGetCurrentDirectory(lnConnect_Handle, @lcTempDir, MAX_PATH)
THIS.GetExtendedError()
IF fResult != 0
THIS.cCurrentDir = lcTempDir
InternetCloseHandle(lnConnect_Handle)
ELSE
RETURN .F.
ENDIF
ELSE
RETURN .F.
ENDIF
RETURN .T.
ENDPROC
****************************************************
PROCEDURE OpenFtpConnection
LOCAL nHandle, lnConnect_Handle, lcCurrentDir
* Open FTP Site
lnConnect_Handle =
InternetConnect(THIS.nInet_Handle, (THIS.cIPAddress), VAL(THIS.cPort), ;
(THIS.cUserName), (THIS.cPassword), INTERNET_SERVICE_FTP, 0, 0)
THIS.GetExtendedError()
lcCurrentDir = THIS.cCurrentDir
IF lnConnect_Handle != 0
fResult =
FtpSetCurrentDirectory(lnConnect_Handle, @lcCurrentDir)
IF fResult = 1
THIS.nConnect_Handle =
lnConnect_Handle
RETURN .T.
ELSE
THIS.GetExtendedError() &&
Only Get extended Error information when there is an error
RETURN .F.
ENDIF
ELSE
RETURN .F.
ENDIF
ENDPROC
****************************************************
PROCEDURE CloseFtpConnection
IF THIS.nConnect_Handle != 0
InternetCloseHandle(THIS.nConnect_Handle)
ENDIF
THIS.nConnect_Handle = 0
RETURN
ENDPROC
****************************************************
PROCEDURE CloseInternet
* Handles have a Hierarchy. Closing the Top Handle
will close all child handles also.
IF THIS.nInet_Handle != 0
InternetCloseHandle(THIS.nInet_Handle)
THIS.nInet_Handle = 0
ENDIF
ENDPROC
****************************************************
PROCEDURE SetCachingMethod
LPARAMETERS nCacheType
LOCAL fResult
fResult = .F.
* only change caching type if we have a valid new
cache type
DO CASE
CASE nCacheType =
INTERNET_FLAG_DONT_CACHE
THIS.nCachingType =
INTERNET_FLAG_DONT_CACHE
fResult = .T.
CASE nCacheType =
INTERNET_FLAG_HYPERLINK
THIS.nCachingType =
INTERNET_FLAG_HYPERLINK
fResult = .T.
CASE nCacheType =
INTERNET_FLAG_MAKE_PERSISTENT
THIS.nCachingType =
INTERNET_FLAG_MAKE_PERSISTENT
fResult = .T.
CASE nCacheType =
INTERNET_FLAG_MUST_CACHE_REQUEST
THIS.nCachingType =
INTERNET_FLAG_MUST_CACHE_REQUEST
fResult = .T.
CASE nCacheType = INTERNET_FLAG_RELOAD
THIS.nCachingType =
INTERNET_FLAG_RELOAD
fResult = .T.
CASE nCacheType =
INTERNET_FLAG_NO_CACHE_WRITE
THIS.nCachingType =
INTERNET_FLAG_NO_CACHE_WRITE
fResult = .T.
CASE nCacheType =
INTERNET_FLAG_RESYNCHRONIZE
THIS.nCachingType =
INTERNET_FLAG_RESYNCHRONIZE
fResult = .T.
ENDCASE
RETURN fResult
ENDPROC
****************************************************
PROCEDURE GetCachingMethod
RETURN THIS.nCachingType
ENDPROC
****************************************************
PROCEDURE GetFtpFile
LPARAMETERS lcRemoteFile, lcNewFile, llFailIfExists
LOCAL fResult, lnFail
IF THIS.OpenFtpConnection() && Open an FTP
Handle
IF llFailIfExists
lnFail = 1
ELSE
lnFail = 0
ENDIF
lcNewFile = lcNewFile + cNULL
lcRemoteFile = lcRemoteFile + cNULL
fResult =
FtpGetFile(THIS.nConnect_Handle, @lcRemoteFile, @lcNewFile, lnFail, ;
FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY + THIS.nCachingType, 0)
THIS.GetExtendedError()
THIS.CloseFtpConnection() && Close FTP
Handle
IF fResult = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
****************************************************
PROCEDURE PutFtpFile
LPARAMETERS lcRemoteFile, lclocalFile
LOCAL fResult
IF THIS.OpenFtpConnection() && Open an FTP
Handle
lcRemoteFile = lcRemoteFile + cNULL
lcLocalFile = lcLocalFile + cNULL
fResult =
FtpPutFile(THIS.nConnect_Handle, @lcLocalFile, @lcRemoteFile, ;
FTP_TRANSFER_TYPE_BINARY, 0)
THIS.GetExtendedError()
THIS.CloseFtpConnection()
IF fResult = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
****************************************************
PROCEDURE DeleteFtpFile
LPARAMETERS lcRemoteFile
LOCAL fResult
IF THIS.OpenFtpConnection() && Open an FTP
Handle
lcRemoteFile = lcRemoteFile + cNULL
fResult =
FtpDeleteFile(THIS.nConnect_Handle, @lcRemoteFile)
THIS.GetExtendedError()
THIS.CloseFtpConnection()
IF fResult = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
****************************************************
PROCEDURE RenameFtpFile
LPARAMETERS lcOldFile, lcNewFile
LOCAL fResult
IF THIS.OpenFtpConnection() && Open an FTP
Handle
lcOldFile = lcOldFile + cNULL
lcNewFile = lcNewFile + cNULL
fResult =
FtpRenameFile(THIS.nConnect_Handle, @lcOldFile, @lcNewFile)
THIS.GetExtendedError()
THIS.CloseFtpConnection()
IF fResult = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
****************************************************
PROCEDURE CreateFtpDirectory
LPARAMETERS lcNewDir
LOCAL fResult
IF THIS.OpenFtpConnection() && Open an FTP
Handle
lcNewDir = lcNewDir + cNULL
fResult =
FtpCreateDirectory(THIS.nConnect_Handle, @lcNewDir)
THIS.GetExtendedError()
THIS.CloseFtpConnection()
IF fResult = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
****************************************************
PROCEDURE RemoveFtpDirectory
LPARAMETERS lcNewDir
LOCAL fResult
IF THIS.OpenFtpConnection() && Open an FTP
Handle
lcNewDir = lcNewDir + cNULL
fResult =
FtpRemoveDirectory(THIS.nConnect_Handle, @lcNewDir)
THIS.GetExtendedError()
THIS.CloseFtpConnection()
IF fResult = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
****************************************************
PROCEDURE ChangeFtpDirectory
LPARAMETERS lcNewDir
LOCAL fResult, lcTempDir, llResult
IF THIS.OpenFtpConnection() && Open an FTP
Handle
llResult = .F.
lcNewDir = lcNewDir + cNULL
lcTempDir = SPACE(MAX_PATH)
fResult =
FtpSetCurrentDirectory(THIS.nConnect_Handle, @lcNewDir)
THIS.GetExtendedError()
IF fResult = 1
fResult =
FtpGetCurrentDirectory(THIS.nConnect_Handle, @lcTempDir, MAX_PATH)
THIS.GetExtendedError()
IF fResult = 1
THIS.cCurrentDir =
lcTempDir
llResult = .T.
ENDIF
ENDIF
THIS.CloseFtpConnection()
RETURN llResult
ENDIF
ENDPROC
****************************************************
PROCEDURE GetFtpDirectory
LPARAMETERS lcDirectory
LOCAL fResult, lcTempDir
IF THIS.OpenFtpConnection() && Open an FTP
Handle
lcTempDir = SPACE(MAX_PATH)
fResult =
FtpGetCurrentDirectory(THIS.nConnect_Handle, @lcTempDir, MAX_PATH)
THIS.GetExtendedError()
lcDirectory = LEFT(lcTempDir, AT(cNULL,
lcTempDir) - 1)
THIS.CloseFtpConnection()
IF fResult = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
****************************************************
PROCEDURE GetFtpDirectoryArray
LPARAMETERS laDirectory, lcMask
LOCAL cStruct, llResult, lnCount, fResult, lffHandle
IF THIS.OpenFtpConnection() && Open an FTP Handle
lcMask = lcMask + cNULL
* Dimension the array to store the directory
* [x, 1] = FileName
* [x, 2] = Alternate FileName
* [x, 3] = File Size
* [x, 4] = File Create Date
* [x, 5] = File Last Access Time
* [x, 6] = File Last Write Time
* [x, 7] = File Attributes
DIMENSION laDirectory [1, 7]
laDirectory [1, 1] = .F.
* This is for a FoxPro Quirk.
lcStruct = SPACE(319) && Allocate space for
the returned structure
* Get the first file or find out if
lffHandle =
FtpFindFirstFile(THIS.nConnect_Handle, @lcMask, @lcStruct, 0, 0)
THIS.GetExtendedError()
IF lffHandle = 0 OR THIS.nResult_Code =
ERROR_NO_MORE_FILES
THIS.CloseFtpConnection()
RETURN .F.
ENDIF
* Parse out First File Information
THIS.CrackFile(lcStruct, @laDirectory)
llResult = 1
DO WHILE THIS.nResult_Code !=
ERROR_NO_MORE_FILES AND llResult != 0
lcStruct = SPACE(319)
* Get next files
llResult =
InternetFindNextFile(lffHandle, @lcStruct)
THIS.GetExtendedError()
* If we got good information, go ahead
and parse it
IF THIS.nResult_Code !=
ERROR_NO_MORE_FILES AND llResult != 0
THIS.CrackFile(lcStruct,
@laDirectory)
ENDIF
ENDDO
THIS.CloseFtpConnection()
ELSE
RETURN .F. && Unable to get FTP Connection
ENDIF
RETURN .T.
ENDPROC
****************************************************
PROCEDURE GetErrorCode
LPARAMETERS llShowMessage
LOCAL lcMessage
IF llShowMessage = .T.
* Build Error Message Here
lcMessage = "Error (" +
ALLTRIM(STR(THIS.nResult_Code)) + ") - " + ;
THIS.GetErrorText(THIS.nResult_Code)
IF !EMPTY(THIS.cExtended_Message)
lcMessage = lcMessage + CHR(13)
+ CHR(13) + "Extended Error Info - (" + ;
ALLTRIM(STR(THIS.nExtended_Result)) + ;
") - " +
THIS.cExtended_Message
ENDIF
MessageBox(lcMessage, 48, "FTP Error
Message")
ENDIF
RETURN THIS.nResult_Code
ENDPROC
****************************************************
PROCEDURE GetExtendedErrorCode
RETURN THIS.nExtended_Result
ENDPROC
****************************************************
PROCEDURE GetExtendedErrorMsg
RETURN THIS.cExtended_Message
ENDPROC
****************************************************
PROCEDURE CrackFile
LPARAMETERS lcString, laDirectory
LOCAL lcFileName, lcAlterName, lnSizeHigh, lnSizeLow,
lnFileSize, ;
lcAttributes, lnArrayLen, lcTimeBuff, ;
ldCreateDate, ldAccessDate, ldWriteDate,
laNewArray, lnResult
IF TYPE('laDirectory[1, 1]') = 'L' && Array
Has Not Been Filed
* Force Record size of 1
DIMENSION laDirectory [1, 7]
ELSE
* Expand Array
DIMENSION laDirectory [ALEN(laDirectory, 1) + 1, 7]
ENDIF
* Get new Array Position
lnArrayLen = ALEN(laDirectory, 1)
lcFileName = SUBSTR(lcString, 45, MAX_PATH)
lcAlterName = RIGHT(lcString, 14)
lcFileName = LEFT(lcFileName, AT(cNull, lcFileName) - 1)
&& Copy out just the File Name Text
lcAlterName = LEFT(lcAlterName, AT(cNull, lcAlterName) -
1)
* Convert File Size DWORDs
lnSizeHigh = (ASC(SUBSTR(lcString, 29, 1)) * BYTE_1) + ;
(ASC(SUBSTR(lcString, 30, 1)) *
BYTE_2) + ;
(ASC(SUBSTR(lcString, 31, 1)) *
BYTE_3) + ;
(ASC(SUBSTR(lcString, 32, 1)) *
BYTE_4)
lnSizeLow = (ASC(SUBSTR(lcString, 33, 1)) * BYTE_1) + ;
(ASC(SUBSTR(lcString, 34, 1)) *
BYTE_2) + ;
(ASC(SUBSTR(lcString, 35, 1)) *
BYTE_3) + ;
(ASC(SUBSTR(lcString, 36, 1)) *
BYTE_4)
* Build File Size
lnFileSize = (lnSizeHigh * MAXDWORD) + lnSizeLow
* Convert File Date
* Get File Create DateTime
lcTimeBuff = SUBSTR(lcString, 5, 8)
ldCreateDate = THIS.CrackDate(lcTimeBuff)
* Get File Create DateTime
lcTimeBuff = SUBSTR(lcString, 13, 8)
ldAccessDate = THIS.CrackDate(lcTimeBuff)
* Get File Create DateTime
lcTimeBuff = SUBSTR(lcString, 21, 8)
ldWriteDate = THIS.CrackDate(lcTimeBuff)
* Get File Attributes
lcAttributes = THIS.CrackAttributes(LEFT(lcString, 4))
laDirectory[lnArrayLen, 1] = ALLTRIM(lcFileName)
laDirectory[lnArrayLen, 2] = ALLTRIM(lcAlterName)
laDirectory[lnArrayLen, 3] = lnFileSize
laDirectory[lnArrayLen, 4] = ldCreateDate
laDirectory[lnArrayLen, 5] = ldAccessDate
laDirectory[lnArrayLen, 6] = ldWriteDate
laDirectory[lnArrayLen, 7] = lcAttributes
RETURN
ENDPROC
****************************************************
PROCEDURE CrackDate
LPARAMETERS lcOutBuffer
LOCAL lcInBuffer, ldDateTime, fResult, lcBuild, ;
lnDay, lnMonth, lnYear, lnHour,
lnMinute, lnSecond
lcInBuffer = SPACE(16)
fResult = FileTimeToSystemTime(@lcOutBuffer,
@lcInBuffer)
THIS.GetExtendedError()
IF fResult = 0 && Failed
ldDateTime = {^1901/01/01 00:00:01} &&
Default Time
RETURN ldDateTime
ENDIF
lnYear = ASC(SUBSTR(lcInBuffer, 1, 1)) +
(ASC(SUBSTR(lcInBuffer, 2, 1)) * BYTE_2)
lnMonth = ASC(SUBSTR(lcInBuffer, 3, 1)) +
(ASC(SUBSTR(lcInBuffer, 4, 1)) * BYTE_2)
lnDay = ASC(SUBSTR(lcInBuffer, 7, 1)) +
(ASC(SUBSTR(lcInBuffer, 8, 1)) * BYTE_2)
lnHour = ASC(SUBSTR(lcInBuffer, 9, 1)) +
(ASC(SUBSTR(lcInBuffer, 10, 1)) * BYTE_2)
lnMinute = ASC(SUBSTR(lcInBuffer, 11, 1)) +
(ASC(SUBSTR(lcInBuffer, 12, 1)) * BYTE_2)
lnSecond = ASC(SUBSTR(lcInBuffer, 13, 1)) +
(ASC(SUBSTR(lcInBuffer, 13, 1)) * BYTE_2)
lcBuild = "^" + ALLTRIM(STR(lnYear)) + '/' +
ALLTRIM(STR(lnMonth)) + '/' + ALLTRIM(STR(lnDay)) + ' ' + ;
ALLTRIM(STR(lnHour)) + ':' +
ALLTRIM(STR(lnMinute)) + ':' + ALLTRIM(STR(lnSecond))
ldDateTime = {&lcBuild}
RETURN ldDateTime
ENDPROC
****************************************************
PROCEDURE CrackAttributes
LPARAMETERS lcBuffer
LOCAL lcAttributes, lnValue
lcAttributes = ''
lnValue = (ASC(SUBSTR(lcBuffer, 1, 1)) * BYTE_1)
+ ;
(ASC(SUBSTR(lcBuffer, 2, 1)) *
BYTE_2) + ;
(ASC(SUBSTR(lcBuffer, 3, 1)) *
BYTE_3) + ;
(ASC(SUBSTR(lcBuffer, 4, 1)) *
BYTE_4)
DO CASE
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_READONLY)
lcAttributes = lcAttributes +
'R'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_HIDDEN)
lcAttributes = lcAttributes +
'H'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_SYSTEM)
lcAttributes = lcAttributes +
'S'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_DIRECTORY)
lcAttributes = lcAttributes +
'D'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_ARCHIVE)
lcAttributes = lcAttributes +
'A'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_NORMAL)
lcAttributes = lcAttributes +
'N'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_TEMPORARY)
lcAttributes = lcAttributes +
'T'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_COMPRESSED)
lcAttributes = lcAttributes +
'C'
CASE BITTEST(lnValue,
BIT_ATTRIBUTE_OFFLINE)
lcAttributes = lcAttributes +
'O'
ENDCASE
RETURN lcAttributes
ENDPROC
****************************************************
PROCEDURE GetExtendedError
LOCAL lcMessage, lnError, lcBuffer
THIS.nResult_Code = GetLastError()
lnError = 0
lcBuffer = SPACE(MAX_PATH)
InternetGetLastResponseInfo(lnError, @lcBuffer,
MAX_PATH)
THIS.nExtended_Result = lnError
THIS.cExtended_Message = LEFT(lcBuffer, AT(cNULL,
lcBuffer) - 1)
RETURN
ENDPROC
****************************************************
PROCEDURE GetErrorText
LPARAMETERS lnError
LOCAL lcMessage
DO CASE
CASE lnError = ERROR_INTERNET_OUT_OF_HANDLES
lcMessage =
"ERROR_INTERNET_OUT_OF_HANDLES"
CASE lnError = ERROR_INTERNET_TIMEOUT
lcMessage =
"ERROR_INTERNET_TIMEOUT"
CASE lnError = ERROR_INTERNET_EXTENDED_ERROR
lcMessage =
"ERROR_INTERNET_EXTENDED_ERROR"
CASE lnError = ERROR_INTERNET_INTERNAL_ERROR
lcMessage =
"ERROR_INTERNET_INTERNAL_ERROR"
CASE lnError = ERROR_INTERNET_INVALID_URL
lcMessage =
"ERROR_INTERNET_INVALID_URL"
CASE lnError =
ERROR_INTERNET_UNRECOGNIZED_SCHEME
lcMessage =
"ERROR_INTERNET_UNRECOGNIZED_SCHEME"
CASE lnError = ERROR_INTERNET_NAME_NOT_RESOLVED
lcMessage =
"ERROR_INTERNET_NAME_NOT_RESOLVED"
CASE lnError = ERROR_INTERNET_PROTOCOL_NOT_FOUND
lcMessage =
"ERROR_INTERNET_PROTOCOL_NOT_FOUND"
CASE lnError = ERROR_INTERNET_INVALID_OPTION
lcMessage =
"ERROR_INTERNET_INVALID_OPTION"
CASE lnError = ERROR_INTERNET_BAD_OPTION_LENGTH
lcMessage =
"ERROR_INTERNET_BAD_OPTION_LENGTH"
CASE lnError =
ERROR_INTERNET_OPTION_NOT_SETTABLE
lcMessage =
"ERROR_INTERNET_OPTION_NOT_SETTABLE"
CASE lnError = ERROR_INTERNET_SHUTDOWN
lcMessage =
"ERROR_INTERNET_SHUTDOWN"
CASE lnError =
ERROR_INTERNET_INCORRECT_USER_NAME
lcMessage =
"ERROR_INTERNET_INCORRECT_USER_NAME"
CASE lnError = ERROR_INTERNET_INCORRECT_PASSWORD
lcMessage =
"ERROR_INTERNET_INCORRECT_PASSWORD"
CASE lnError = ERROR_INTERNET_LOGIN_FAILURE
lcMessage =
"ERROR_INTERNET_LOGIN_FAILURE"
CASE lnError = ERROR_INTERNET_INVALID_OPERATION
lcMessage =
"ERROR_INTERNET_INVALID_OPERATION"
CASE lnError =
ERROR_INTERNET_OPERATION_CANCELLED
lcMessage =
"ERROR_INTERNET_OPERATION_CANCELLED"
CASE lnError =
ERROR_INTERNET_INCORRECT_HANDLE_TYPE
lcMessage =
"ERROR_INTERNET_INCORRECT_HANDLE_TYPE"
CASE lnError =
ERROR_INTERNET_INCORRECT_HANDLE_STATE
lcMessage =
"ERROR_INTERNET_INCORRECT_HANDLE_STATE"
CASE lnError = ERROR_INTERNET_NOT_PROXY_REQUEST
lcMessage =
"ERROR_INTERNET_NOT_PROXY_REQUEST"
CASE lnError =
ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND
lcMessage =
"ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND"
CASE lnError =
ERROR_INTERNET_BAD_REGISTRY_PARAMETER
lcMessage =
"ERROR_INTERNET_BAD_REGISTRY_PARAMETER"
CASE lnError = ERROR_INTERNET_NO_DIRECT_ACCESS
lcMessage =
"ERROR_INTERNET_NO_DIRECT_ACCESS"
CASE lnError = ERROR_INTERNET_NO_CONTEXT
lcMessage =
"ERROR_INTERNET_NO_CONTEXT"
CASE lnError = ERROR_INTERNET_NO_CALLBACK
lcMessage = "ERROR_INTERNET_NO_CALLBACK"
CASE lnError = ERROR_INTERNET_REQUEST_PENDING
lcMessage =
"ERROR_INTERNET_REQUEST_PENDING"
CASE lnError = ERROR_INTERNET_INCORRECT_FORMAT
lcMessage =
"ERROR_INTERNET_INCORRECT_FORMAT"
CASE lnError = ERROR_INTERNET_ITEM_NOT_FOUND
lcMessage =
"ERROR_INTERNET_ITEM_NOT_FOUND"
CASE lnError = ERROR_INTERNET_CANNOT_CONNECT
lcMessage =
"ERROR_INTERNET_CANNOT_CONNECT"
CASE lnError = ERROR_INTERNET_CONNECTION_ABORTED
lcMessage =
"ERROR_INTERNET_CONNECTION_ABORTED"
CASE lnError = ERROR_INTERNET_CONNECTION_RESET
lcMessage =
"ERROR_INTERNET_CONNECTION_RESET"
CASE lnError = ERROR_INTERNET_FORCE_RETRY
lcMessage = "ERROR_INTERNET_FORCE_RETRY"
CASE lnError =
ERROR_INTERNET_INVALID_PROXY_REQUEST
lcMessage =
"ERROR_INTERNET_INVALID_PROXY_REQUEST"
CASE lnError = ERROR_INTERNET_NEED_UI
lcMessage = "ERROR_INTERNET_NEED_UI"
CASE lnError = ERROR_INTERNET_HANDLE_EXISTS
lcMessage =
"ERROR_INTERNET_HANDLE_EXISTS"
CASE lnError =
ERROR_INTERNET_SEC_CERT_DATE_INVALID
lcMessage =
"ERROR_INTERNET_SEC_CERT_DATE_INVALID"
CASE lnError =
ERROR_INTERNET_SEC_CERT_CN_INVALID
lcMessage =
"ERROR_INTERNET_SEC_CERT_CN_INVALID"
CASE lnError =
ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR
lcMessage =
"ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR"
CASE lnError =
ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR
lcMessage =
"ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR"
CASE lnError = ERROR_INTERNET_MIXED_SECURITY
lcMessage =
"ERROR_INTERNET_MIXED_SECURITY"
CASE lnError =
ERROR_INTERNET_CHG_POST_IS_NON_SECURE
lcMessage =
"ERROR_INTERNET_CHG_POST_IS_NON_SECURE"
CASE lnError = ERROR_INTERNET_POST_IS_NON_SECURE
lcMessage =
"ERROR_INTERNET_POST_IS_NON_SECURE"
CASE lnError =
ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED
lcMessage =
"ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED"
CASE lnError = ERROR_INTERNET_INVALID_CA
lcMessage = "ERROR_INTERNET_INVALID_CA"
CASE lnError =
ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP
lcMessage =
"ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP"
CASE lnError =
ERROR_INTERNET_ASYNC_THREAD_FAILED
lcMessage =
"ERROR_INTERNET_ASYNC_THREAD_FAILED"
CASE lnError =
ERROR_INTERNET_REDIRECT_SCHEME_CHANGE
lcMessage =
"ERROR_INTERNET_REDIRECT_SCHEME_CHANGE"
CASE lnError = ERROR_INTERNET_DIALOG_PENDING
lcMessage =
"ERROR_INTERNET_DIALOG_PENDING"
CASE lnError = ERROR_INTERNET_RETRY_DIALOG
lcMessage =
"ERROR_INTERNET_RETRY_DIALOG"
CASE lnError =
ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR
lcMessage =
"ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR"
CASE lnError = ERROR_INTERNET_INSERT_CDROM
lcMessage =
"ERROR_INTERNET_INSERT_CDROM"
CASE lnError = FTP_TRANSFER_IN_PROGRESS
lcMessage = "FTP_TRANSFER_IN_PROGRESS"
CASE lnError = FTP_DROPPED
lcMessage = "FTP_DROPPED"
CASE lnError = FTP_NO_PASSIVE_MODE
lcMessage = "FTP_NO_PASSIVE_MODE"
CASE lnError =
ERROR_INTERNET_SECURITY_CHANNEL_ERROR
lcMessage =
"ERROR_INTERNET_SECURITY_CHANNEL_ERROR"
CASE lnError =
ERROR_INTERNET_UNABLE_TO_CACHE_FILE
lcMessage =
"ERROR_INTERNET_UNABLE_TO_CACHE_FILE"
CASE lnError =
ERROR_INTERNET_TCPIP_NOT_INSTALLED
lcMessage =
"ERROR_INTERNET_TCPIP_NOT_INSTALLED"
CASE lnError = ERROR_INTERNET_DISCONNECTED
lcMessage = "ERROR_INTERNET_DISCONNECTED"
CASE lnError = ERROR_INTERNET_SERVER_UNREACHABLE
lcMessage =
"ERROR_INTERNET_SERVER_UNREACHABLE"
CASE lnError =
ERROR_INTERNET_PROXY_SERVER_UNREACHABLE
lcMessage =
"ERROR_INTERNET_PROXY_SERVER_UNREACHABLE"
CASE lnError =
ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT
lcMessage =
"ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT"
CASE lnError =
ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT
lcMessage =
"ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT"
CASE lnError = ERROR_INTERNET_SEC_INVALID_CERT
lcMessage =
"ERROR_INTERNET_SEC_INVALID_CERT"
CASE lnError = ERROR_INTERNET_SEC_CERT_REVOKED
lcMessage =
"ERROR_INTERNET_SEC_CERT_REVOKED"
CASE lnError = ERROR_NO_MORE_FILES
lcMessage =
"ERROR_NO_MORE_FILES"
CASE lnError = ERROR_INVALID_HANDLE
lcMessage =
"ERROR_INVALID_HANDLE"
CASE lnError = ERROR_FILE_NOT_FOUND
lcMessage =
"ERROR_FILE_NOT_FOUND"
CASE lnError = ERROR_PATH_NOT_FOUND
lcMessage = "ERROR_PATH_NOT_FOUND"
CASE lnError = ERROR_ACCESS_DENIED
lcMessage =
"ERROR_ACCESS_DENIED"
CASE lnError = ERROR_FILE_EXISTS
lcMessage = "ERROR_FILE_EXISTS"
CASE lnError = ERROR_INVALID_PARAMETER
lcMessage =
"ERROR_INVALID_PARAMETER"
OTHERWISE
lcMessage = "Unknown Error Message"
ENDCASE
RETURN lcMessage
ENDPROC
ENDDEFINE && End Class Define
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
Searchable Archive: http://leafe.com/archives/search/profox
This message:
http://leafe.com/archives/byMID/profox/[email protected]
** All postings, unless explicitly stated otherwise, are the opinions of the
author, and do not constitute legal or medical advice. This statement is added
to the messages for those lawyers who are too stupid to see the obvious.