diff options
Diffstat (limited to 'attache/Uploader.h')
-rw-r--r-- | attache/Uploader.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/attache/Uploader.h b/attache/Uploader.h new file mode 100644 index 0000000..49722e6 --- /dev/null +++ b/attache/Uploader.h @@ -0,0 +1,46 @@ +#pragma once
+
+class UploadProgress;
+class UploadSettings;
+class UploadResults;
+
+class Uploader
+{
+ UploadProgress *m_pProgress;
+ UploadSettings *m_pSettings;
+ UploadResults *m_pResults;
+
+public:
+ Uploader(UploadProgress *pProgress)
+ : m_pProgress(pProgress), m_pSettings(NULL), m_pResults(NULL)
+ {
+ }
+
+ HRESULT DoUpload(UploadSettings *pSettings, UploadResults *pResults);
+
+private:
+ TCHAR *GenerateMultipartBoundary();
+ TCHAR *GenerateContentTypeHeader(const TCHAR *strBoundary);
+ DWORD CalculateContentLength(const TCHAR *strBoundary, DWORD *pdwOverallBytesTotal);
+
+ char *GenerateFieldHeader(const TCHAR *strBoundary, const TCHAR *lpszFieldName);
+ DWORD CalculateContentLength(const TCHAR *strBoundary, const TCHAR *lpszFieldName, const TCHAR *lpszFieldValue);
+ HRESULT UploadField(HINTERNET hRequest, const TCHAR *strBoundary, const TCHAR *lpszFieldName, const TCHAR *lpszFieldValue);
+ const char *GenerateFieldTrailer();
+
+ DWORD CalculateContentLength(const TCHAR *strBoundary, const TCHAR * lpszFieldName, const TCHAR * lpszPathName, const TCHAR * lpszContentType, DWORD *pdwOverallBytesTotal);
+ char *GenerateFileHeader(const TCHAR * strBoundary, const TCHAR * lpszFieldName, const TCHAR * lpszPathName, const TCHAR * lpszContentType);
+ HRESULT UploadFile(HINTERNET hRequest, const TCHAR * strBoundary, const TCHAR * lpszFieldName, const TCHAR * lpszPathName, const TCHAR * lpszContentType, DWORD *pdwOverallBytesSent, DWORD dwOverallBytesTotal);
+ HRESULT UploadFileContent(HINTERNET hRequest, const TCHAR * lpszPathName, HANDLE hFile, DWORD *pdwOverallBytesSent, DWORD dwOverallBytesTotal);
+ const char *GenerateFileTrailer();
+
+ char *GenerateBodyTrailer(const TCHAR * strBoundary);
+
+ HRESULT ReadStatusCode(HINTERNET hRequest, DWORD *pStatusCode);
+ HRESULT ReadResponseHeaders(HINTERNET hRequest);
+ HRESULT ReadResponseBody(HINTERNET hRequest);
+
+private:
+ static void CALLBACK StaticInternetStatusCallback(HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength);
+ void InternetStatusCallback(HINTERNET hInternet, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength);
+};
|