55 #define RESPONSE_TIMEOUT 30 103 #define DATA_PACKET_SIZE 0x2000 104 #define szCRLF "\r\n" 105 #define MAX_BACKLOG 5 110 #define FTP_CONDITION_MASK 0x0007 200 BOOL fFailIfExists,
DWORD dwLocalFlagsAttribute,
DWORD dwInternetFlags,
276 if (!lpszLocalFile || !lpszNewRemoteFile)
322 lpszNewRemoteFile,
dwFlags, dwContext);
715 lpFindFileDataW = lpFindFileData?&wfd:
NULL;
719 if (
ret && lpFindFileData)
839 if (
name != lpszSearchFile)
842 lpszSearchFile =
name;
853 if (nResCode == 125 || nResCode == 150)
860 hFindNext =
FTP_ReceiveFileList(lpwfs, nDataSocket, lpszSearchFile, lpFindFileData, dwContext);
863 if (nResCode != 226 && nResCode != 250)
920 if(lpdwCurrentDirectory) {
921 len = *lpdwCurrentDirectory;
922 if(lpszCurrentDirectory)
934 if (
ret && lpszCurrentDirectory)
937 if (lpdwCurrentDirectory) *lpdwCurrentDirectory =
len;
975 TRACE(
"%p %p %p\n", hFtpSession, lpszCurrentDirectory, lpdwCurrentDirectory);
990 if (!lpdwCurrentDirectory)
996 if (lpszCurrentDirectory ==
NULL)
1022 lpdwCurrentDirectory);
1061 if (nResCode == 257)
1066 for (firstpos = 0, lastpos = 0; lpszResponseBuffer[lastpos]; lastpos++)
1068 if (
'"' == lpszResponseBuffer[lastpos])
1076 len = lastpos - firstpos;
1077 if (*lpdwCurrentDirectory >=
len)
1079 memcpy(lpszCurrentDirectory, &lpszResponseBuffer[firstpos + 1],
len *
sizeof(
WCHAR));
1080 lpszCurrentDirectory[
len - 1] = 0;
1081 *lpdwCurrentDirectory =
len;
1134 if (nResCode > 0 && nResCode != 226)
WARN(
"server reports failed transfer\n");
1143 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
1156 TRACE(
"INTERNET_OPTION_DATAFILE_NAME\n");
1158 if (!
file->cache_file)
1166 if (*
size < required)
1176 if (required > *
size)
1194 if (
file->nDataSocket == -1)
1204 DWORD bytes_written;
1219 *written =
res>0 ?
res : 0;
1262 TRACE(
"%d bytes of queued, but unread data\n", unread);
1371 memset(&uc, 0,
sizeof(uc));
1490 TRACE(
"(%p,%s,0x%08x,0x%08x,0x%08lx)\n", hFtpSession,
1506 if ((!lpszFileName) ||
1527 task->
access = fdwAccess;
1557 BOOL fFailIfExists,
DWORD dwLocalFlagsAttribute,
DWORD dwInternetFlags,
1566 ret =
FtpGetFileW(hInternet, lpwzRemoteFile, lpwzNewFile, fFailIfExists,
1567 dwLocalFlagsAttribute, dwInternetFlags, dwContext);
1608 BOOL fFailIfExists,
DWORD dwLocalFlagsAttribute,
DWORD dwInternetFlags,
1615 if (!lpszRemoteFile || !lpszNewFile)
1656 task->
flags = dwInternetFlags;
1664 fFailIfExists, dwLocalFlagsAttribute, dwInternetFlags, dwContext);
1685 BOOL fFailIfExists,
DWORD dwLocalFlagsAttribute,
DWORD dwInternetFlags,
1720 if (nResCode == 226)
1756 FIXME(
"(%p, %p)\n",
hFile, lpdwFileSizeHigh);
1758 if (lpdwFileSizeHigh)
1759 *lpdwFileSizeHigh = 0;
1879 TRACE(
"%p\n", lpwfs);
1890 if (nResCode == 250)
2032 if (nResCode == 250)
2184 if (nResCode == 350)
2192 if (nResCode == 250)
2221 TRACE(
"%p %d 0x%08x %s 0x%08lx %p\n", hConnect, fExpectResponse,
dwFlags,
2222 debugstr_a(lpszCommand), dwContext, phFtpCommand);
2224 if (fExpectResponse)
2226 FIXME(
"data connection not supported\n");
2230 if (!lpszCommand || !lpszCommand[0])
2258 INT nResCode, nRC = 0;
2260 TRACE(
"%p %d 0x%08x %s 0x%08lx %p\n", hConnect, fExpectResponse,
dwFlags,
2261 debugstr_w(lpszCommand), dwContext, phFtpCommand);
2263 if (!lpszCommand || !lpszCommand[0])
2269 if (fExpectResponse)
2271 FIXME(
"data connection not supported\n");
2307 while ((nBytesSent <
len) && (nRC != -1))
2313 TRACE(
"Sent %d bytes\n", nRC);
2320 if (nResCode > 0 && nResCode < 400)
2380 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
2428 DWORD dwInternalFlags)
2430 static const WCHAR szKey[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
2431 'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'\\',
2432 'W',
'i',
'n',
'd',
'o',
'w',
's',
'\\',
2433 'C',
'u',
'r',
'r',
'e',
'n',
't',
'V',
'e',
'r',
's',
'i',
'o',
'n',
'\\',
2434 'I',
'n',
't',
'e',
'r',
'n',
'e',
't',
' ',
'S',
'e',
't',
't',
'i',
'n',
'g',
's',0};
2435 static const WCHAR szValue[] = {
'E',
'm',
'a',
'i',
'l',
'N',
'a',
'm',
'e',0};
2436 static const WCHAR szDefaultUsername[] = {
'a',
'n',
'o',
'n',
'y',
'm',
'o',
'u',
's',
'\0'};
2445 TRACE(
"%p Server(%s) Port(%d) User(%s) Paswd(%s)\n",
2484 FIXME(
"Several proxies not implemented.\n");
2486 FIXME(
"Proxy bypass is ignored.\n");
2488 if (!lpszUserName || !lpszUserName[0]) {
2505 TRACE(
"Password used for anonymous ftp : (%s)\n",
debugstr_w(szPassword));
2530 sock_namelen =
sizeof(socketAddr);
2537 if (socketAddr.sin_family !=
AF_INET)
2539 WARN(
"unsupported address family %d\n", socketAddr.sin_family);
2545 szaddr,
strlen(szaddr)+1);
2556 szaddr,
strlen(szaddr)+1);
2558 if (
connect(nsocket, (
struct sockaddr *)&socketAddr, sock_namelen) < 0)
2566 TRACE(
"Connected to server\n");
2569 szaddr,
strlen(szaddr)+1);
2576 TRACE(
"Successfully logged into server\n");
2617 if (nResCode == 230)
2620 else if (nResCode == 331)
2623 else if (nResCode == 332)
2661 if (
sock_recv(nSocket, &lpszBuffer[nRecv], 1, 0) <= 0)
2667 if (lpszBuffer[nRecv] ==
'\n')
2669 lpszBuffer[nRecv] =
'\0';
2671 TRACE(
":%d %s\n", nRecv, lpszBuffer);
2674 if (lpszBuffer[nRecv] !=
'\r')
2702 DWORD nBytesSent = 0;
2713 dwParamLen = lpszParam?
strlen(lpszParam)+1:0;
2721 dwParamLen ? lpszParam :
"",
szCRLF);
2724 while((nBytesSent <
len) && (nRC != -1))
2734 &nBytesSent,
sizeof(
DWORD));
2737 TRACE(
"Sent %d bytes\n", nBytesSent);
2776 char firstprefix[5];
2792 if(lpszResponse[3] !=
'-')
2797 memcpy(firstprefix, lpszResponse, 3);
2798 firstprefix[3] =
' ';
2799 firstprefix[4] =
'\0';
2804 if(!
memcmp(firstprefix, lpszResponse, 4))
2812 rc =
atoi(lpszResponse);
2815 &nRecv,
sizeof(
DWORD));
2819 TRACE(
"return %d\n", rc);
2846 TRACE(
"Received reply code %d\n", nResCode);
2848 if (nResCode == 230)
2852 else if (nResCode == 332)
2924 if (nResCode == 150 || nResCode == 125)
2962 TRACE(
"Unable to create listening socket\n");
2974 TRACE(
"Unable to bind socket\n");
2980 TRACE(
"listen failed\n");
3062 if (nResCode == 213) {
3067 for (
i = 0; (lpszResponseBuffer[
i] !=
' ') && (lpszResponseBuffer[
i] !=
'\0');
i++) ;
3068 if (lpszResponseBuffer[
i] ==
'\0')
return FALSE;
3095 static const WCHAR szIPFormat[] = {
'%',
'd',
',',
'%',
'd',
',',
'%',
'd',
',',
'%',
'd',
',',
'%',
'd',
',',
'%',
'd',
'\0'};
3097 WCHAR szIPAddress[64];
3115 if (nResCode == 200)
3149 if (nResCode == 227)
3155 char *pAddr, *pPort;
3159 p = lpszResponseBuffer+4;
3164 ERR(
"no address found in response, aborting\n");
3168 if (
sscanf(
p,
"%d,%d,%d,%d,%d,%d", &
f[0], &
f[1], &
f[2], &
f[3],
3171 ERR(
"unknown response address format '%s', aborting\n",
p);
3174 for (
i=0;
i < 6;
i++)
3178 pAddr = (
char *)&(dataSocketAddress.
sin_addr.S_un.S_addr);
3179 pPort = (
char *)&(dataSocketAddress.
sin_port);
3191 if (
connect(nsocket, (
struct sockaddr *)&dataSocketAddress,
sizeof(dataSocketAddress)))
3193 ERR(
"can't connect passive FTP data port.\n");
3255 return *nDataSocket != -1;
3272 DWORD nBytesRead = 0;
3273 DWORD nBytesSent = 0;
3274 DWORD nTotalSent = 0;
3275 DWORD nBytesToSend, nLen;
3277 time_t s_long_time, e_long_time;
3290 nBytesToSend = nBytesRead - nBytesSent;
3292 if (nBytesToSend <= 0)
3297 ERR(
"Failed reading from file\n");
3300 nBytesToSend = nBytesRead;
3307 nRC =
sock_send(nDataSocket, lpszBuffer, nLen, 0);
3317 nSeconds = e_long_time - s_long_time;
3318 if( nSeconds / 60 > 0 )
3320 TRACE(
"%d bytes of %d bytes (%d%%) in %d min %d sec estimated remaining time %d sec\n",
3322 nSeconds % 60, (fi.
nFileSizeLow - nTotalSent) * nSeconds / nTotalSent );
3326 TRACE(
"%d bytes of %d bytes (%d%%) in %d sec estimated remaining time %d sec\n",
3328 (fi.
nFileSizeLow - nTotalSent) * nSeconds / nTotalSent);
3330 }
while (nRC != -1);
3332 TRACE(
"file transfer complete!\n");
3368 if ((nResCode != 125) && (nResCode != 150)) {
3397 DWORD nBytesWritten;
3404 if (
NULL == lpszBuffer)
3422 TRACE(
"Data transfer complete\n");
3443 for (
i = 0;
i < lpwfn->
size;
i++)
3499 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
3558 TRACE(
"(%p,%d,%s,%p,%08lx)\n", lpwfs, nSocket,
debugstr_w(lpszSearchFile), lpFindFileData, dwContext);
3572 lpwfn->
lpafp = lpafp;
3634 static const char szSpace[] =
" \t";
3657 for(
i=0;
i<=3;
i++) {
3661 if(!pszToken)
continue;
3663 TRACE(
"Is directory\n");
3667 TRACE(
"Size: %s\n", pszToken);
3680 if(!pszToken)
continue;
3681 if(
strlen(pszToken) >= 3) {
3688 if(!pszToken)
continue;
3692 if(!pszToken)
continue;
3693 if((pszTmp =
strchr(pszToken,
':'))) {
3706 TRACE(
"Mod time: %02d:%02d:%02d %04d/%02d/%02d\n",
3711 if(!pszToken)
continue;
3721 int mon, mday, year, hour,
min;
3724 sscanf(pszToken,
"%d-%d-%d", &mon, &mday, &year);
3733 if(!pszToken)
continue;
3737 if((pszToken[5] ==
'P') && (pszToken[6] ==
'M')) {
3742 TRACE(
"Mod time: %02d:%02d:%02d %04d/%02d/%02d\n",
3747 if(!pszToken)
continue;
3751 TRACE(
"Is directory\n");
3760 if(!pszToken)
continue;
3765 else if(pszToken[0] ==
'+') {
3766 FIXME(
"EPLF Format not implemented\n");
3770 if((lpszSearchFile ==
NULL) ||
3797 INT sizeFilePropArray = 500;
3798 INT indexFilePropArray = -1;
3803 *lpafp = heap_alloc_zero(
sizeof(
FILEPROPERTIESW)*(sizeFilePropArray));
3808 if (indexFilePropArray+1 >= sizeFilePropArray)
3812 sizeFilePropArray *= 2;
3813 tmpafp = heap_realloc_zero(*lpafp,
sizeof(
FILEPROPERTIESW)*sizeFilePropArray);
3822 indexFilePropArray++;
3823 }
while (
FTP_ParseNextFile(nSocket, lpszSearchFile, &(*lpafp)[indexFilePropArray]));
3825 if (
bSuccess && indexFilePropArray)
3827 if (indexFilePropArray < sizeFilePropArray - 1)
3835 *dwfp = indexFilePropArray;
3861 unsigned short nPermission = 0;
3866 if ((*lpszPermission !=
'd') && (*lpszPermission !=
'-') && (*lpszPermission !=
'l'))
3878 nPermission |= (*(lpszPermission+1) ==
'r' ? 1 : 0) << 8;
3881 nPermission |= (*(lpszPermission+2) ==
'w' ? 1 : 0) << 7;
3884 nPermission |= (*(lpszPermission+3) ==
'x' ? 1 : 0) << 6;
3887 nPermission |= (*(lpszPermission+4) ==
'r' ? 1 : 0) << 5;
3890 nPermission |= (*(lpszPermission+5) ==
'w' ? 1 : 0) << 4;
3893 nPermission |= (*(lpszPermission+6) ==
'x' ? 1 : 0) << 3;
3896 nPermission |= (*(lpszPermission+7) ==
'r' ? 1 : 0) << 2;
3899 nPermission |= (*(lpszPermission+8) ==
'w' ? 1 : 0) << 1;
3902 nPermission |= (*(lpszPermission+9) ==
'x' ? 1 : 0);
3906 }
while (nPos <= nLast);
#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE
BOOL WINAPI CreateUrlCacheEntryW(LPCWSTR lpszUrlName, DWORD dwExpectedFileSize, LPCWSTR lpszFileExtension, LPWSTR lpszFileName, DWORD dwReserved)
static BOOL FTP_SendPort(ftp_session_t *)
static BOOL FTP_DoPassive(ftp_session_t *)
#define ERROR_INVALID_PARAMETER
static LPSTR FTP_GetNextLine(INT nSocket, LPDWORD dwLen)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define ERROR_INTERNET_CONNECTION_ABORTED
BOOL WINAPI FtpCreateDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory)
static BOOL FTP_SendType(ftp_session_t *, DWORD dwType)
static LPWSTR heap_strndupW(LPCWSTR str, unsigned len)
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
static BOOL FTP_ConnectToHost(ftp_session_t *)
static void AsyncFtpDeleteFileProc(task_header_t *hdr)
BOOL WINAPI FtpGetFileA(HINTERNET hInternet, LPCSTR lpszRemoteFile, LPCSTR lpszNewFile, BOOL fFailIfExists, DWORD dwLocalFlagsAttribute, DWORD dwInternetFlags, DWORD_PTR dwContext)
BOOL WINAPI FtpRenameFileA(HINTERNET hFtpSession, LPCSTR lpszSrc, LPCSTR lpszDest)
static DWORD FTPFILE_WriteFile(object_header_t *hdr, const void *buffer, DWORD size, DWORD *written)
void INTERNET_SetLastError(DWORD dwError)
#define WideCharToMultiByte
HINTERNET WINAPI FtpFindFirstFileW(HINTERNET hConnect, LPCWSTR lpszSearchFile, LPWIN32_FIND_DATAW lpFindFileData, DWORD dwFlags, DWORD_PTR dwContext)
BOOL WINAPI FtpGetFileW(HINTERNET hInternet, LPCWSTR lpszRemoteFile, LPCWSTR lpszNewFile, BOOL fFailIfExists, DWORD dwLocalFlagsAttribute, DWORD dwInternetFlags, DWORD_PTR dwContext)
char * strcat(char *DstString, const char *SrcString)
static DWORD FTP_SetResponseError(DWORD dwResponse)
#define ERROR_INTERNET_EXTENDED_ERROR
#define ERROR_INTERNET_DISCONNECTED
ACPI_SIZE strlen(const char *String)
GLenum GLuint GLenum GLsizei const GLchar * buf
static BOOL FTP_SendCommandA(INT nSocket, FTP_COMMAND ftpCmd, LPCSTR lpszParam, INTERNET_STATUS_CALLBACK lpfnStatusCB, object_header_t *hdr, DWORD_PTR dwContext)
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
static const object_vtbl_t FTPFILEVtbl
GLdouble GLdouble GLdouble r
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
static BOOL FTP_InitListenSocket(ftp_session_t *)
BOOL WINAPI FtpPutFileW(HINTERNET hConnect, LPCWSTR lpszLocalFile, LPCWSTR lpszNewRemoteFile, DWORD dwFlags, DWORD_PTR dwContext)
#define INTERNET_STATUS_REQUEST_SENT
LPSTR INTERNET_GetResponseBuffer(void)
#define HKEY_CURRENT_USER
struct sockaddr_in socketAddress
HINTERNET WINAPI FtpOpenFileW(HINTERNET hFtpSession, LPCWSTR lpszFileName, DWORD fdwAccess, DWORD dwFlags, DWORD_PTR dwContext)
BOOL WINAPI FtpSetCurrentDirectoryW(HINTERNET hConnect, LPCWSTR lpszDirectory)
#define INTERNET_STATUS_CONNECTING_TO_SERVER
#define ERROR_INVALID_HANDLE
static BOOL res_to_le(DWORD res)
DWORD INET_SetOption(object_header_t *hdr, DWORD option, void *buf, DWORD size)
static BOOL FTP_FtpPutFileW(ftp_session_t *, LPCWSTR lpszLocalFile, LPCWSTR lpszNewRemoteFile, DWORD dwFlags, DWORD_PTR dwContext)
__WINE_SERVER_LIST_INLINE void list_add_head(struct list *list, struct list *elem)
unsigned short permissions
struct FILEPROPERTIESW * LPFILEPROPERTIESW
#define ERROR_INTERNET_ITEM_NOT_FOUND
#define INTERNET_OPEN_TYPE_PROXY
GLuint GLuint GLsizei GLenum type
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
ftp_file_t * download_in_progress
_In_opt_ LPSTR _In_opt_ LPSTR lpszPassword
HINTERNET WINAPI FtpFindFirstFileA(HINTERNET hConnect, LPCSTR lpszSearchFile, LPWIN32_FIND_DATAA lpFindFileData, DWORD dwFlags, DWORD_PTR dwContext)
WIN32_FIND_DATAW * find_file_data
WIN32_FIND_DATAW * find_data
static void AsyncFtpFindFirstFileProc(task_header_t *hdr)
static void FTPFINDNEXT_Destroy(object_header_t *hdr)
static const CHAR *const szFtpCommands[]
static void FTP_ReceiveRequestData(ftp_file_t *file, BOOL first_notif)
INT WSAAPI connect(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
static DWORD FTPSESSION_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode)
static void * heap_realloc(void *mem, size_t len)
VOID INTERNET_SendCallback(object_header_t *hdr, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInfo, DWORD dwStatusInfoLength) DECLSPEC_HIDDEN
static BOOL FTP_FtpCreateDirectoryW(ftp_session_t *, LPCWSTR lpszDirectory)
static const WCHAR szSpace[]
static void * heap_alloc(size_t len)
static int find_data(const struct Vector *v, const BYTE *pData, int size)
#define INTERNET_INVALID_PORT_NUMBER
#define INTERNET_STATUS_CONNECTION_CLOSED
BOOL WINAPI FtpCreateDirectoryW(HINTERNET hConnect, LPCWSTR lpszDirectory)
struct sockaddr_in lstnSocketAddress
#define ERROR_INTERNET_CANNOT_CONNECT
static BOOL FTP_SendData(ftp_session_t *, INT nDataSocket, HANDLE hFile)
HINTERNET WINAPI FtpOpenFileA(HINTERNET hFtpSession, LPCSTR lpszFileName, DWORD fdwAccess, DWORD dwFlags, DWORD_PTR dwContext)
static BOOL FTP_ConvertFileProp(LPFILEPROPERTIESW lpafp, LPWIN32_FIND_DATAW lpFindFileData)
#define sprintf(buf, format,...)
static INT FTP_ReceiveResponse(ftp_session_t *, DWORD_PTR dwContext)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static BOOL FTP_SendStore(ftp_session_t *, LPCWSTR lpszRemoteFile, DWORD dwType)
LONG WINAPI RegCloseKey(HKEY hKey)
DWORD WINAPI FtpGetFileSize(HINTERNET hFile, LPDWORD lpdwFileSizeHigh)
BOOL WINAPI FtpCommandA(HINTERNET hConnect, BOOL fExpectResponse, DWORD dwFlags, LPCSTR lpszCommand, DWORD_PTR dwContext, HINTERNET *phFtpCommand)
BOOL WINAPI FtpRemoveDirectoryA(HINTERNET hFtpSession, LPCSTR lpszDirectory)
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
BOOL GetAddress(const WCHAR *, INTERNET_PORT, SOCKADDR *, int *, char *) DECLSPEC_HIDDEN
#define INTERNET_STATUS_CLOSING_CONNECTION
static WCHAR * heap_strdupW(const WCHAR *str)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
DWORD INTERNET_GetLastError(void)
_Check_return_ _CRTIMP int __cdecl _strnicmp(_In_reads_or_z_(_MaxCount) const char *_Str1, _In_reads_or_z_(_MaxCount) const char *_Str2, _In_ size_t _MaxCount)
BOOL WINAPI FtpGetCurrentDirectoryA(HINTERNET hFtpSession, LPSTR lpszCurrentDirectory, LPDWORD lpdwCurrentDirectory)
static BOOL FTP_SendPassword(ftp_session_t *)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI FtpRenameFileW(HINTERNET hFtpSession, LPCWSTR lpszSrc, LPCWSTR lpszDest)
static void FTPSESSION_CloseConnection(object_header_t *hdr)
struct WININETFTPFINDNEXTW * LPWININETFTPFINDNEXTW
static WCHAR available[MAX_STRING_RESOURCE_LEN]
#define INTERNET_STATUS_RECEIVING_RESPONSE
object_header_t * WININET_AddRef(object_header_t *info)
SYSTEMTIME tmLastModified
static BOOL FTP_SendPortOrPasv(ftp_session_t *)
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
static HINTERNET FTP_FtpOpenFileW(ftp_session_t *lpwfs, LPCWSTR lpszFileName, DWORD fdwAccess, DWORD dwFlags, DWORD_PTR dwContext)
ftp_session_t * lpFtpSession
static WCHAR * heap_strdupAtoW(const char *str)
#define ERROR_NO_MORE_FILES
static void AsyncFtpRenameFileProc(task_header_t *hdr)
static BOOL FTP_FtpRemoveDirectoryW(ftp_session_t *, LPCWSTR lpszDirectory)
static DWORD FTPFILE_QueryDataAvailable(object_header_t *hdr, DWORD *available, DWORD flags, DWORD_PTR ctx)
static BOOL FTP_RetrieveFileData(ftp_session_t *, INT nDataSocket, HANDLE hFile)
#define FILE_ATTRIBUTE_DIRECTORY
static void FTPFINDNEXT_AsyncFindNextFileProc(task_header_t *hdr)
#define INTERNET_STATUS_NAME_RESOLVED
static BOOL FTP_FtpSetCurrentDirectoryW(ftp_session_t *, LPCWSTR lpszDirectory)
static const WCHAR szEmpty[]
DWORD INET_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode)
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
INT WSAAPI WSAGetLastError(VOID)
#define INTERNET_OPTION_HANDLE_TYPE
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL WINAPI FtpSetCurrentDirectoryA(HINTERNET hConnect, LPCSTR lpszDirectory)
BOOL WINAPI GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
static char * heap_strdupWtoA(const WCHAR *str)
BOOL WINAPI FtpPutFileA(HINTERNET hConnect, LPCSTR lpszLocalFile, LPCSTR lpszNewRemoteFile, DWORD dwFlags, DWORD_PTR dwContext)
static BOOL FTP_ParseNextFile(INT nSocket, LPCWSTR lpszSearchFile, LPFILEPROPERTIESW fileprop)
static UINT set(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, struct ctab_constant *constant, const void **indata, D3DXPARAMETER_TYPE intype, UINT *size, UINT incol, D3DXPARAMETER_CLASS inclass, UINT index, BOOL is_pointer)
#define INTERNET_HANDLE_TYPE_FTP_FILE
static BOOL FTP_FtpGetFileW(ftp_session_t *, LPCWSTR lpszRemoteFile, LPCWSTR lpszNewFile, BOOL fFailIfExists, DWORD dwLocalFlagsAttribute, DWORD dwInternetFlags, DWORD_PTR dwContext)
#define ERROR_INTERNET_NAME_NOT_RESOLVED
static const CHAR szMonths[]
WCHAR cFileName[MAX_PATH]
#define ERROR_FTP_TRANSFER_IN_PROGRESS
#define INTERNET_DEFAULT_FTP_PORT
_Check_return_ long __cdecl atol(_In_z_ const char *_Str)
LPSTR WINAPI StrStrIA(LPCSTR lpszStr, LPCSTR lpszSearch)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
BOOL WINAPI FtpGetCurrentDirectoryW(HINTERNET hFtpSession, LPWSTR lpszCurrentDirectory, LPDWORD lpdwCurrentDirectory)
#define INTERNET_FLAG_ASYNC
static void AsyncFtpPutFileProc(task_header_t *hdr)
#define FILE_ATTRIBUTE_NORMAL
#define INTERNET_FLAG_TRANSFER_ASCII
static BOOL FTP_GetDataSocket(ftp_session_t *, LPINT nDataSocket)
BOOL WINAPI FtpRemoveDirectoryW(HINTERNET hFtpSession, LPCWSTR lpszDirectory)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define INTERNET_STATUS_SENDING_REQUEST
void * alloc_object(object_header_t *parent, const object_vtbl_t *vtbl, size_t size)
static BOOL FTP_ParseDirectory(ftp_session_t *, INT nSocket, LPCWSTR lpszSearchFile, LPFILEPROPERTIESW *lpafp, LPDWORD dwfp)
static void WININET_find_data_WtoA(LPWIN32_FIND_DATAW dataW, LPWIN32_FIND_DATAA dataA)
#define memcpy(s1, s2, n)
#define INTERNET_STATUS_RESOLVING_NAME
FILETIME ftLastAccessTime
#define INTERNET_HANDLE_TYPE_CONNECT_FTP
void * alloc_async_task(object_header_t *hdr, async_task_proc_t proc, size_t size)
SOCKET WSAAPI accept(IN SOCKET s, OUT LPSOCKADDR addr, OUT INT FAR *addrlen)
static BOOL FTP_SendAccount(ftp_session_t *)
#define ERROR_INTERNET_TIMEOUT
static const object_vtbl_t FTPFINDNEXTVtbl
static DWORD FTPFILE_LockRequestFile(object_header_t *hdr, req_file_t **ret)
static BOOL FTP_ParsePermission(LPCSTR lpszPermission, LPFILEPROPERTIESW lpfp)
static DWORD FTPFILE_ReadFile(object_header_t *hdr, void *buffer, DWORD size, DWORD *read, DWORD flags, DWORD_PTR context)
BOOL WININET_Release(object_header_t *info)
WINE_UNICODE_INLINE WCHAR * strrchrW(const WCHAR *str, WCHAR ch)
static void AsyncFtpGetCurrentDirectoryProc(task_header_t *hdr)
#define INTERNET_ERROR_BASE
#define INTERNET_FLAG_PASSIVE
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
static int sock_send(int fd, const void *msg, size_t len, int flags)
BOOL WINAPI InternetCreateUrlW(LPURL_COMPONENTSW lpUrlComponents, DWORD dwFlags, LPWSTR lpszUrl, LPDWORD lpdwUrlLength)
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
static HINTERNET FTP_FtpFindFirstFileW(ftp_session_t *, LPCWSTR lpszSearchFile, LPWIN32_FIND_DATAW lpFindFileData, DWORD dwFlags, DWORD_PTR dwContext)
#define ERROR_INTERNET_LOGIN_FAILURE
BOOL WINAPI FtpDeleteFileW(HINTERNET hFtpSession, LPCWSTR lpszFileName)
#define FTP_TRANSFER_TYPE_BINARY
static BOOL FTP_FtpDeleteFileW(ftp_session_t *, LPCWSTR lpszFileName)
#define INTERNET_STATUS_REQUEST_COMPLETE
static void FTPFILE_AsyncQueryDataAvailableProc(task_header_t *task)
static BOOL FTP_FtpRenameFileW(ftp_session_t *, LPCWSTR lpszSrc, LPCWSTR lpszDest)
static const object_vtbl_t FTPSESSIONVtbl
#define INTERNET_STATUS_CONNECTED_TO_SERVER
BOOL WINAPI FtpCommandW(HINTERNET hConnect, BOOL fExpectResponse, DWORD dwFlags, LPCWSTR lpszCommand, DWORD_PTR dwContext, HINTERNET *phFtpCommand)
static void AsyncFtpSetCurrentDirectoryProc(task_header_t *hdr)
char * strtok(char *String, const char *Delimiters)
static DWORD FTPFINDNEXT_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode)
INT WSAAPI listen(IN SOCKET s, IN INT backlog)
char * strchr(const char *String, int ch)
static BOOL FTP_SendCommand(INT nSocket, FTP_COMMAND ftpCmd, LPCWSTR lpszParam, INTERNET_STATUS_CALLBACK lpfnStatusCB, object_header_t *hdr, DWORD_PTR dwContext)
static DWORD FTPFILE_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode)
static DWORD FTPFINDNEXT_FindNextFileW(object_header_t *hdr, void *data)
BOOL WINAPI PathMatchSpecW(LPCWSTR lpszPath, LPCWSTR lpszMask)
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
#define ERROR_NOT_SUPPORTED
DWORD INTERNET_AsyncCall(task_header_t *task)
WINE_DEFAULT_DEBUG_CHANNEL(urlmon)
static void FTPSESSION_Destroy(object_header_t *hdr)
#define FTP_CONDITION_MASK
static void AsyncFtpOpenFileProc(task_header_t *hdr)
#define INTERNET_STATUS_HANDLE_CREATED
static const WCHAR szNoAccount[]
static BOOL FTP_SendRetrieve(ftp_session_t *, LPCWSTR lpszRemoteFile, DWORD dwType)
static HINTERNET FTP_ReceiveFileList(ftp_session_t *, INT nSocket, LPCWSTR lpszSearchFile, LPWIN32_FIND_DATAW lpFindFileData, DWORD_PTR dwContext)