Mercurial > trustbridge
diff ui/downloader.cpp @ 10:fe39d93f1261
Start on Downloader component
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Thu, 13 Feb 2014 14:43:15 +0000 |
parents | |
children | 7e2f14c7aba2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/downloader.cpp Thu Feb 13 14:43:15 2014 +0000 @@ -0,0 +1,119 @@ +#include "downloader.h" + +#ifndef MYVERSION +#define MYVERSION "1" +#endif + +#ifndef DOWNLOAD_SERVER +#define DOWNLOAD_SERVER "https://www.intevation.de" +#endif + +#ifdef Q_OS_WIN +#include <windows.h> +#include <winhttp.h> +#endif + +#include <QFile> +#include <QDebug> + +Downloader::Downloader(QObject* parent, const QString& url) +{ + Downloader (parent, url, QFile(":Certificates/https").readAll()); +} + +Downloader::Downloader(QObject* parent, const QString& url, + const QByteArray& certificate) : + mUrl(url), + mCert(certificate), + QThread(parent) +{ +} + +void Downloader::run() { +#ifdef Q_OS_WIN + // We use WinAPI here instead of Qt because we want to avoid + // QtNetworks SSL stack which is based on OpenSSL and so + // we might be incompatible with GPL code. Also using the + // native API means that the security of the SSL implementation + // is tied to the security of the system. + BOOL bResults = FALSE; + HINTERNET hSession = NULL, + hConnect = NULL, + hRequest = NULL; + SYSTEMTIME lastModified; + DWORD sizeOfSystemtime = sizeof (SYSTEMTIME); + + // Get a syncronous session handle + hSession = WinHttpOpen(L"M13 "MYVERSION, + WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, + WINHTTP_NO_PROXY_NAME, + WINHTTP_NO_PROXY_BYPASS, 0); + + if (hSession) { + // Initialize connection. No request is done here. + hConnect = WinHttpConnect(hSession, L""DOWNLOAD_SERVER, + INTERNET_DEFAULT_HTTPS_PORT, 0); + + } + + if (hConnect) { + // Make a head request + hRequest = WinHttpOpenRequest(hConnect, L"HEAD", + L"/index.html", + NULL, WINHTTP_NO_REFERER, + WINHTTP_DEFAULT_ACCEPT_TYPES, + 0); + } + + if (hRequest) { + bResults = WinHttpSendRequest(hRequest, + WINHTTP_NO_ADDITIONAL_HEADERS, + 0, WINHTTP_NO_REQUEST_DATA, 0, + 0, 0); + } + + if (bResults) { + bResults = WinHttpReceiveResponse(hRequest, NULL); + } + + + + if (bResults) { + bResults = WinHttpQueryHeaders(hRequest, + WINHTTP_QUERY_LAST_MODIFIED | + WINHTTP_QUERY_FLAG_SYSTEMTIME, + NULL, + &lastModified, + &sizeOfSystemtime, + WINHTTP_NO_HEADER_INDEX ); + } + + qDebug() << "Last modified year: " << lastModified.wYear; + + + if (!bResults) { + // Report any errors. + qDebug() << "Error" << GetLastError(); + emit error(tr("Unknown Problem when connecting"), Unknown); + } + + // Cleanup + if (hRequest) { + WinHttpCloseHandle(hRequest); + } + + if (hConnect) { + WinHttpCloseHandle(hConnect); + + } + + if (hSession) { + WinHttpCloseHandle(hSession); + } +#endif + + for (int i=0; i< 10; i++) { + qDebug("Going to sleep\n"); + sleep(10); + } +}