view ui/sslconnection_curl.h @ 1373:00fcb9c4d16b

(issue179) Handle SW verify failures and try to redownload the update
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 24 Nov 2014 16:46:08 +0100
parents 2a1aa9df8f11
children
line wrap: on
line source
#ifndef UI_SSLCONNECTION_CURL_H
#define UI_SSLCONNECTION_CURL_H
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=2)
 * and comes with ABSOLUTELY NO WARRANTY!
 * See LICENSE.txt for details.
 */

/**
 * @file sslconnection_curl.h
 * @brief SSLConnection utilizing libcurl for http.
 */

#include "sslconnection.h"

#include <curl/curl.h>

#include <QDateTime>
#include <QTemporaryFile>

class QSaveFile;

/** @brief SSLConnection implementation using LibCURL
*
* This class uses a modified version of the curl library to
* speak the HTTP with the downloader server. Provides
* Proxy support.
*/
class SSLConnectionCurl : public SSLConnection
{
public:
    SSLConnectionCurl(const QString& url,
            const QByteArray& certificate = QByteArray());

    ~SSLConnectionCurl();

    int connect();

    QDateTime getLastModifiedHeader(const QString &resource);

    bool downloadFile(const QString &resource, const QString &filename,
                      size_t maxSize);

    void setProxy(const QUrl &proxyUrl);

    void setCiphersuites(int ciphers[]);

private:
    CURL *mCurl;
    QTemporaryFile mCertFile;
    char mErrBuf[CURL_ERROR_SIZE + 1];

};

/** @brief Internal write function for curl */
size_t write_data(void *ptr, size_t size, size_t nmemb, QSaveFile *fp);

#endif // UI_SSLCONNECTION_CURL_H

http://wald.intevation.org/projects/trustbridge/