wininet: Use vtbl in InternetWriteFile implementation.
This commit is contained in:
parent
7dc9bf677b
commit
1ffcfbce85
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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("(%p %p %d %p)\n", hFile, lpBuffer, dwNumOfBytesToWrite, lpdwNumOfBytesWritten);
|
||||
|
||||
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);
|
||||
|
||||
WININET_Release( lpwh );
|
||||
return retval;
|
||||
}
|
||||
break;
|
||||
|
||||
case WH_HFILE:
|
||||
nSocket = ((LPWININETFTPFILE)lpwh)->nDataSocket;
|
||||
break;
|
||||
|
||||
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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue