Module: wine Branch: master Commit: 550ffef212caedb0a886dfd53262e01f287111e1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=550ffef212caedb0a886dfd532...
Author: Jacek Caban jacek@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;