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