You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
4.0 KiB
189 lines
4.0 KiB
// File: Utilities.cpp
|
|
|
|
#include "stdafx.h"
|
|
#include <tchar.h>
|
|
#include <wininet.h>
|
|
#include <windows.h>
|
|
#include "Utilities.h"
|
|
|
|
|
|
/*
|
|
|
|
int
|
|
UploadFile(
|
|
|
|
)
|
|
{
|
|
DWORD ErrorCode = 0;
|
|
HINTERNET hSession = NULL;
|
|
HINTERNET hRequest = NULL;
|
|
HINTERNET hConnect = NULL;
|
|
INTERNET_BUFFERS BufferIn = {0};
|
|
DWORD ResponseCode = 0;
|
|
BOOL UploadSuccess = FALSE;
|
|
DWORD NumRetries = 0;
|
|
HANDLE hSourceFile = INVALID_HANDLE_VALUE;
|
|
BYTE *pSourceBuffer = NULL;
|
|
DWORD dwBytesRead = 0;
|
|
DWORD dwBytesWritten = 0;
|
|
BOOL bRet = FALSE;
|
|
DWORD ResLength = 255;
|
|
DWORD index = 0;
|
|
|
|
|
|
static const TCHAR *pszAccept[] = {_T("*.*"), 0};
|
|
|
|
if (pSourceBuffer = (BYTE *) malloc (10000))
|
|
{
|
|
if (! pSourceBuffer)
|
|
{
|
|
return GetLastError();
|
|
}
|
|
}
|
|
|
|
// Open the internet session
|
|
|
|
while ((NumRetries < MaxRetries) && (!UploadSuccess))
|
|
{
|
|
|
|
hSession = InternetOpen(_T("OCARPT Control"),
|
|
INTERNET_OPEN_TYPE_PRECONFIG,
|
|
NULL,
|
|
NULL,
|
|
0);
|
|
if (!hSession)
|
|
{
|
|
free (pSourceBuffer);
|
|
ErrorCode = GetLastError();
|
|
return ErrorCode;
|
|
}
|
|
|
|
hConnect = InternetConnect(hSession,
|
|
Url,
|
|
INTERNET_DEFAULT_HTTP_PORT,
|
|
NULL,
|
|
NULL,
|
|
INTERNET_SERVICE_HTTP,
|
|
0,
|
|
NULL);
|
|
|
|
if (hConnect)
|
|
{
|
|
|
|
hRequest = HttpOpenRequest (hConnect,
|
|
_T("PUT"),
|
|
DestFileName,
|
|
NULL,
|
|
NULL,
|
|
pszAccept,
|
|
INTERNET_FLAG_NEED_FILE|INTERNET_FLAG_NO_CACHE_WRITE,
|
|
0);
|
|
if (hRequest)
|
|
{
|
|
hSourceFile = CreateFile( SourceFileName,
|
|
GENERIC_READ,
|
|
FILE_SHARE_READ,
|
|
NULL,
|
|
OPEN_EXISTING,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL);
|
|
|
|
|
|
if (hSourceFile != INVALID_HANDLE_VALUE)
|
|
{
|
|
|
|
// Clear the buffer
|
|
|
|
BufferIn.dwStructSize = sizeof( INTERNET_BUFFERSW );
|
|
BufferIn.Next = NULL;
|
|
BufferIn.lpcszHeader = NULL;
|
|
BufferIn.dwHeadersLength = 0;
|
|
BufferIn.dwHeadersTotal = 0;
|
|
BufferIn.lpvBuffer = NULL;
|
|
BufferIn.dwBufferLength = 0;
|
|
BufferIn.dwOffsetLow = 0;
|
|
BufferIn.dwOffsetHigh = 0;
|
|
BufferIn.dwBufferTotal = GetFileSize (hSourceFile, NULL);
|
|
|
|
ZeroMemory(pSourceBuffer, 10000); // Fill buffer with data
|
|
if(HttpSendRequestEx( hRequest, &BufferIn, NULL, HSR_INITIATE, 0))
|
|
{
|
|
|
|
do
|
|
{
|
|
dwBytesRead = 0;
|
|
if(! ReadFile(hSourceFile, pSourceBuffer, 10000, &dwBytesRead, NULL) )
|
|
{
|
|
ErrorCode = GetLastError();
|
|
}
|
|
else
|
|
{
|
|
bRet = InternetWriteFile(hRequest, pSourceBuffer, dwBytesRead, &dwBytesWritten);
|
|
if ( (!bRet) || (dwBytesWritten==0) )
|
|
{
|
|
ErrorCode = GetLastError();
|
|
}
|
|
|
|
|
|
}
|
|
} while ((dwBytesRead == 10000) && (!ErrorCode) );
|
|
|
|
if (!ErrorCode)
|
|
{
|
|
bRet = HttpEndRequest(hRequest, NULL, 0, 0);
|
|
if (!bRet)
|
|
{
|
|
ErrorCode = GetLastError();
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
ResponseCode = 0;
|
|
HttpQueryInfo(hRequest,
|
|
HTTP_QUERY_STATUS_CODE |HTTP_QUERY_FLAG_NUMBER ,
|
|
&ResponseCode,
|
|
&ResLength,
|
|
&index);
|
|
|
|
if ( (ResponseCode != 200) || (ResponseCode != 201))
|
|
{
|
|
ErrorCode= ResponseCode;
|
|
}
|
|
else
|
|
{
|
|
ErrorCode = 0;
|
|
UploadSuccess = TRUE;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!UploadSuccess)
|
|
{
|
|
++NumRetries;
|
|
}
|
|
if (hSourceFile != INVALID_HANDLE_VALUE)
|
|
CloseHandle (hSourceFile);
|
|
if (hRequest)
|
|
InternetCloseHandle(hRequest);
|
|
if (hConnect)
|
|
InternetCloseHandle(hConnect);
|
|
if (hSession)
|
|
InternetCloseHandle(hSession);
|
|
|
|
}
|
|
if (pSourceBuffer)
|
|
{
|
|
free (pSourceBuffer);
|
|
pSourceBuffer = NULL;
|
|
}
|
|
return 0;
|
|
|
|
}
|
|
|
|
*/
|