Hans Leidekker : wininet: Separate ftp session destruction from closing connections.

Alexandre Julliard julliard at winehq.org
Mon Oct 22 09:55:27 CDT 2007


Module: wine
Branch: master
Commit: c33a51eaf2f81a4420017f4bbd6233e50dac796c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c33a51eaf2f81a4420017f4bbd6233e50dac796c

Author: Hans Leidekker <hans at it.vu.nl>
Date:   Sat Oct 20 21:14:59 2007 +0200

wininet: Separate ftp session destruction from closing connections.

---

 dlls/wininet/ftp.c |   50 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c
index 805ab44..26b319e 100644
--- a/dlls/wininet/ftp.c
+++ b/dlls/wininet/ftp.c
@@ -123,6 +123,7 @@ static const WCHAR szNoAccount[] = {'n','o','a','c','c','o','u','n','t','\0'};
 
 static void FTP_CloseFileTransferHandle(LPWININETHANDLEHEADER hdr);
 static void FTP_CloseSessionHandle(LPWININETHANDLEHEADER hdr);
+static void FTP_CloseConnection(LPWININETHANDLEHEADER hdr);
 static void FTP_CloseFindNextHandle(LPWININETHANDLEHEADER hdr);
 static BOOL FTP_SendCommand(INT nSocket, FTP_COMMAND ftpCmd, LPCWSTR lpszParam,
 	INTERNET_STATUS_CALLBACK lpfnStatusCB, LPWININETHANDLEHEADER hdr, DWORD_PTR dwContext);
@@ -1895,10 +1896,7 @@ HINTERNET FTP_Connect(LPWININETAPPINFOW hIC, LPCWSTR lpszServerName,
     lpwfs->hdr.dwContext = dwContext;
     lpwfs->hdr.dwInternalFlags = dwInternalFlags;
     lpwfs->hdr.dwRefCount = 1;
-    /* FIXME: Native sends INTERNET_STATUS_CLOSING_CONNECTION and
-     * INTERNET_STATUS_CONNECTION_CLOSED, need an equivalent FTP_CloseConnection
-     * function */
-    lpwfs->hdr.close_connection = NULL;
+    lpwfs->hdr.close_connection = FTP_CloseConnection;
     lpwfs->hdr.destroy = FTP_CloseSessionHandle;
     lpwfs->hdr.lpfnStatusCB = hIC->hdr.lpfnStatusCB;
     lpwfs->download_in_progress = NULL;
@@ -2823,16 +2821,41 @@ recv_end:
     return  (nRC != -1);
 }
 
+/***********************************************************************
+ *           FTP_CloseConnection (internal)
+ *
+ * Close connections
+ */
+static void FTP_CloseConnection(LPWININETHANDLEHEADER hdr)
+{
+    LPWININETFTPSESSIONW lpwfs = (LPWININETFTPSESSIONW) hdr;
+
+    TRACE("\n");
+
+    SendAsyncCallback(&lpwfs->hdr, lpwfs->hdr.dwContext,
+                      INTERNET_STATUS_CLOSING_CONNECTION, 0, 0);
+
+    if (lpwfs->download_in_progress != NULL)
+        lpwfs->download_in_progress->session_deleted = TRUE;
+
+     if (lpwfs->sndSocket != -1)
+         closesocket(lpwfs->sndSocket);
+
+     if (lpwfs->lstnSocket != -1)
+         closesocket(lpwfs->lstnSocket);
+
+    if (lpwfs->pasvSocket != -1)
+        closesocket(lpwfs->pasvSocket);
+
+    SendAsyncCallback(&lpwfs->hdr, lpwfs->hdr.dwContext,
+                      INTERNET_STATUS_CONNECTION_CLOSED, 0, 0);
+}
+
 
 /***********************************************************************
  *           FTP_CloseSessionHandle (internal)
  *
  * Deallocate session handle
- *
- * RETURNS
- *   TRUE on success
- *   FALSE on failure
- *
  */
 static void FTP_CloseSessionHandle(LPWININETHANDLEHEADER hdr)
 {
@@ -2842,15 +2865,6 @@ static void FTP_CloseSessionHandle(LPWININETHANDLEHEADER hdr)
 
     WININET_Release(&lpwfs->lpAppInfo->hdr);
 
-    if (lpwfs->download_in_progress != NULL)
-	lpwfs->download_in_progress->session_deleted = TRUE;
-    
-    if (lpwfs->sndSocket != -1)
-        closesocket(lpwfs->sndSocket);
-
-    if (lpwfs->lstnSocket != -1)
-        closesocket(lpwfs->lstnSocket);
-
     HeapFree(GetProcessHeap(), 0, lpwfs->lpszPassword);
     HeapFree(GetProcessHeap(), 0, lpwfs->lpszUserName);
     HeapFree(GetProcessHeap(), 0, lpwfs);




More information about the wine-cvs mailing list