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