Jacek Caban : wininet: Store WININETFTPSESSIONW pointer in
WININETFTPFILEW.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Oct 30 05:22:29 CST 2006
Module: wine
Branch: master
Commit: 550ffef212caedb0a886dfd53262e01f287111e1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=550ffef212caedb0a886dfd53262e01f287111e1
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Oct 29 18:55:15 2006 +0100
wininet: Store WININETFTPSESSIONW pointer in WININETFTPFILEW.
---
dlls/wininet/ftp.c | 13 +++++++++----
dlls/wininet/internet.c | 4 ++--
dlls/wininet/internet.h | 9 ++++++---
3 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c
index 12a6d80..06b0153 100644
--- a/dlls/wininet/ftp.c
+++ b/dlls/wininet/ftp.c
@@ -1008,7 +1008,7 @@ HINTERNET FTP_FtpOpenFileW(LPWININETFTPS
{
INT nDataSocket;
BOOL bSuccess = FALSE;
- LPWININETFILE lpwh = NULL;
+ LPWININETFTPFILE lpwh = NULL;
LPWININETAPPINFOW hIC = NULL;
HINTERNET handle = NULL;
@@ -1033,7 +1033,7 @@ HINTERNET FTP_FtpOpenFileW(LPWININETFTPS
/* Get data socket to server */
if (bSuccess && FTP_GetDataSocket(lpwfs, &nDataSocket))
{
- lpwh = HeapAlloc(GetProcessHeap(), 0, sizeof(WININETFILE));
+ lpwh = HeapAlloc(GetProcessHeap(), 0, sizeof(WININETFTPFILE));
lpwh->hdr.htype = WH_HFILE;
lpwh->hdr.dwFlags = dwFlags;
lpwh->hdr.dwContext = dwContext;
@@ -1043,6 +1043,9 @@ HINTERNET FTP_FtpOpenFileW(LPWININETFTPS
lpwh->hdr.lpfnStatusCB = lpwfs->hdr.lpfnStatusCB;
lpwh->nDataSocket = nDataSocket;
lpwh->session_deleted = FALSE;
+
+ WININET_AddRef( &lpwfs->hdr );
+ lpwh->lpFtpSession = lpwfs;
handle = WININET_AllocHandle( &lpwh->hdr );
if( !handle )
@@ -2800,12 +2803,14 @@ static void FTP_CloseFindNextHandle(LPWI
*/
static void FTP_CloseFileTransferHandle(LPWININETHANDLEHEADER hdr)
{
- LPWININETFILE lpwh = (LPWININETFILE) hdr;
- LPWININETFTPSESSIONW lpwfs = (LPWININETFTPSESSIONW) lpwh->hdr.lpwhparent;
+ LPWININETFTPFILE lpwh = (LPWININETFTPFILE) hdr;
+ LPWININETFTPSESSIONW lpwfs = lpwh->lpFtpSession;
INT nResCode;
TRACE("\n");
+ WININET_Release(&lpwh->lpFtpSession->hdr);
+
if (!lpwh->session_deleted)
lpwfs->download_in_progress = NULL;
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index ebb581e..dda7872 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -1703,7 +1703,7 @@ BOOL WINAPI InternetWriteFile(HINTERNET
break;
case WH_HFILE:
- nSocket = ((LPWININETFILE)lpwh)->nDataSocket;
+ nSocket = ((LPWININETFTPFILE)lpwh)->nDataSocket;
break;
default:
@@ -1745,7 +1745,7 @@ static BOOL INTERNET_ReadFile(LPWININETH
case WH_HFILE:
/* FIXME: FTP should use NETCON_ stuff */
- nSocket = ((LPWININETFILE)lpwh)->nDataSocket;
+ nSocket = ((LPWININETFTPFILE)lpwh)->nDataSocket;
if (nSocket != -1)
{
int res = recv(nSocket, lpBuffer, dwNumOfBytesToRead, bWait ? MSG_WAITALL : 0);
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index e7af552..9b2fd1f 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -202,22 +202,25 @@ typedef struct
} WININETHTTPREQW, *LPWININETHTTPREQW;
+struct _WININETFTPSESSIONW;
+
typedef struct
{
WININETHANDLEHEADER hdr;
+ struct _WININETFTPSESSIONW *lpFtpSession;
BOOL session_deleted;
int nDataSocket;
-} WININETFILE, *LPWININETFILE;
+} WININETFTPFILE, *LPWININETFTPFILE;
-typedef struct
+typedef struct _WININETFTPSESSIONW
{
WININETHANDLEHEADER hdr;
WININETAPPINFOW *lpAppInfo;
int sndSocket;
int lstnSocket;
int pasvSocket; /* data socket connected by us in case of passive FTP */
- LPWININETFILE download_in_progress;
+ LPWININETFTPFILE download_in_progress;
struct sockaddr_in socketAddress;
struct sockaddr_in lstnSocketAddress;
LPWSTR lpszPassword;
More information about the wine-cvs
mailing list