Jacek Caban : wininet: Use vtbl in InternetWriteFile implementation.

Alexandre Julliard julliard at winehq.org
Wed Feb 27 08:03:15 CST 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Feb 26 20:21:34 2008 +0100

wininet: Use vtbl in InternetWriteFile implementation.

---

 dlls/wininet/ftp.c      |   18 ++++++++++++++++--
 dlls/wininet/http.c     |   11 ++++++++++-
 dlls/wininet/internet.c |   45 +++++++++++----------------------------------
 dlls/wininet/internet.h |    4 +---
 4 files changed, 38 insertions(+), 40 deletions(-)

diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c
index d56b732..0714777 100644
--- a/dlls/wininet/ftp.c
+++ b/dlls/wininet/ftp.c
@@ -1155,9 +1155,21 @@ static void FTPFILE_Destroy(WININETHANDLEHEADER *hdr)
     HeapFree(GetProcessHeap(), 0, lpwh);
 }
 
+static BOOL FTPFILE_WriteFile(WININETHANDLEHEADER *hdr, const void *buffer, DWORD size, DWORD *written)
+{
+    LPWININETFTPFILE lpwh = (LPWININETFTPFILE) hdr;
+    int res;
+
+    res = send(lpwh->nDataSocket, buffer, size, 0);
+
+    *written = res>0 ? res : 0;
+    return res >= 0;
+}
+
 static const HANDLEHEADERVtbl FTPFILEVtbl = {
     FTPFILE_Destroy,
-    NULL
+    NULL,
+    FTPFILE_WriteFile
 };
 
 /***********************************************************************
@@ -2073,7 +2085,8 @@ static void FTPSESSION_CloseConnection(WININETHANDLEHEADER *hdr)
 
 static const HANDLEHEADERVtbl FTPSESSIONVtbl = {
     FTPSESSION_Destroy,
-    FTPSESSION_CloseConnection
+    FTPSESSION_CloseConnection,
+    NULL
 };
 
 
@@ -3150,6 +3163,7 @@ static void FTPFINDNEXT_Destroy(WININETHANDLEHEADER *hdr)
 
 static const HANDLEHEADERVtbl FTPFINDNEXTVtbl = {
     FTPFINDNEXT_Destroy,
+    NULL,
     NULL
 };
 
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 87194c4..bd219e6 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -1392,9 +1392,17 @@ static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr)
                           INTERNET_STATUS_CONNECTION_CLOSED, 0, 0);
 }
 
+static BOOL HTTPREQ_WriteFile(WININETHANDLEHEADER *hdr, const void *buffer, DWORD size, DWORD *written)
+{
+    LPWININETHTTPREQW lpwhr = (LPWININETHTTPREQW)hdr;
+
+    return NETCON_send(&lpwhr->netConnection, buffer, size, 0, (LPINT)written);
+}
+
 static const HANDLEHEADERVtbl HTTPREQVtbl = {
     HTTPREQ_Destroy,
-    HTTPREQ_CloseConnection
+    HTTPREQ_CloseConnection,
+    HTTPREQ_WriteFile
 };
 
 /***********************************************************************
@@ -2916,6 +2924,7 @@ static void HTTPSESSION_Destroy(WININETHANDLEHEADER *hdr)
 
 static const HANDLEHEADERVtbl HTTPSESSIONVtbl = {
     HTTPSESSION_Destroy,
+    NULL,
     NULL
 };
 
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 2554a31..472c183 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -473,6 +473,7 @@ static VOID APPINFO_Destroy(WININETHANDLEHEADER *hdr)
 
 static const HANDLEHEADERVtbl APPINFOVtbl = {
     APPINFO_Destroy,
+    NULL,
     NULL
 };
 
@@ -1692,48 +1693,24 @@ DWORD WINAPI InternetSetFilePointer(HINTERNET hFile, LONG lDistanceToMove,
  *    FALSE on failure
  *
  */
-BOOL WINAPI InternetWriteFile(HINTERNET hFile, LPCVOID lpBuffer ,
+BOOL WINAPI InternetWriteFile(HINTERNET hFile, LPCVOID lpBuffer,
 	DWORD dwNumOfBytesToWrite, LPDWORD lpdwNumOfBytesWritten)
 {
-    BOOL retval = FALSE;
-    int nSocket = -1;
     LPWININETHANDLEHEADER lpwh;
+    BOOL retval = FALSE;
 
-    TRACE("\n");
-    lpwh = WININET_GetObject( hFile );
-    if (NULL == lpwh)
-        return FALSE;
-
-    switch (lpwh->htype)
-    {
-        case WH_HHTTPREQ:
-            {
-                LPWININETHTTPREQW lpwhr;
-                lpwhr = (LPWININETHTTPREQW)lpwh;
-
-                TRACE("HTTPREQ %i\n",dwNumOfBytesToWrite);
-                retval = NETCON_send(&lpwhr->netConnection, lpBuffer, 
-                        dwNumOfBytesToWrite, 0, (LPINT)lpdwNumOfBytesWritten);
+    TRACE("(%p %p %d %p)\n", hFile, lpBuffer, dwNumOfBytesToWrite, lpdwNumOfBytesWritten);
 
-                WININET_Release( lpwh );
-                return retval;
-            }
-            break;
-
-        case WH_HFILE:
-            nSocket = ((LPWININETFTPFILE)lpwh)->nDataSocket;
-            break;
+    lpwh = WININET_GetObject( hFile );
 
-        default:
-            break;
+    if(lpwh && lpwh->vtbl->WriteFile) {
+        retval = lpwh->vtbl->WriteFile(lpwh, lpBuffer, dwNumOfBytesToWrite, lpdwNumOfBytesWritten);
+    }else {
+        WARN("Invalid handle\n");
+        SetLastError(ERROR_INVALID_HANDLE);
+        retval = FALSE;
     }
 
-    if (nSocket != -1)
-    {
-        int res = send(nSocket, lpBuffer, dwNumOfBytesToWrite, 0);
-        retval = (res >= 0);
-        *lpdwNumOfBytesWritten = retval ? res : 0;
-    }
     WININET_Release( lpwh );
 
     return retval;
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 5cf0b28..2389fe5 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -133,14 +133,12 @@ typedef enum
 #define INET_OPENURL 0x0001
 #define INET_CALLBACKW 0x0002
 
-struct _WININETHANDLEHEADER;
 typedef struct _WININETHANDLEHEADER WININETHANDLEHEADER, *LPWININETHANDLEHEADER;
 
-typedef void (*WININET_object_function)( LPWININETHANDLEHEADER );
-
 typedef struct {
     void (*Destroy)(WININETHANDLEHEADER*);
     void (*CloseConnection)(WININETHANDLEHEADER*);
+    BOOL (*WriteFile)(WININETHANDLEHEADER*,const void*,DWORD,DWORD*);
 } HANDLEHEADERVtbl;
 
 struct _WININETHANDLEHEADER




More information about the wine-cvs mailing list