mirror of
https://github.com/ukui/apt.git
synced 2026-03-09 09:35:45 -07:00
34faa8f7ae
We do this in HTTP already to give the CPU some exercise while the disk is heavily spinning (or flashing?) to store the data avoiding the need to reread the entire file again later on to calculate the hashes – which happens outside of the eyes of progress reporting, so you might ended up with a bunch of https workers 'stuck' at 100% while they were busy calculating hashes. This is a bummer for everyone using apt as a connection speedtest as the https method works slower now (not really, it just isn't reporting done too early anymore).
98 lines
2.7 KiB
C++
98 lines
2.7 KiB
C++
// -*- mode: cpp; mode: fold -*-
|
|
// Description /*{{{*/// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $
|
|
// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $
|
|
/* ######################################################################
|
|
|
|
HTTP Acquire Method - This is the HTTP acquire method for APT.
|
|
|
|
##################################################################### */
|
|
/*}}}*/
|
|
|
|
#ifndef APT_HTTPS_H
|
|
#define APT_HTTPS_H
|
|
|
|
#include <apt-pkg/acquire-method.h>
|
|
|
|
#include <curl/curl.h>
|
|
#include <iostream>
|
|
#include <stddef.h>
|
|
#include <string>
|
|
|
|
#include "server.h"
|
|
|
|
using std::cout;
|
|
using std::endl;
|
|
|
|
class Hashes;
|
|
class HttpsMethod;
|
|
class FileFd;
|
|
|
|
class HttpsServerState : public ServerState
|
|
{
|
|
Hashes * Hash;
|
|
|
|
protected:
|
|
virtual bool ReadHeaderLines(std::string &/*Data*/) { return false; }
|
|
virtual bool LoadNextResponse(bool const /*ToFile*/, FileFd * const /*File*/) { return false; }
|
|
|
|
public:
|
|
virtual bool WriteResponse(std::string const &/*Data*/) { return false; }
|
|
|
|
/** \brief Transfer the data from the socket */
|
|
virtual bool RunData(FileFd * const /*File*/) { return false; }
|
|
|
|
virtual bool Open() { return false; }
|
|
virtual bool IsOpen() { return false; }
|
|
virtual bool Close() { return false; }
|
|
virtual bool InitHashes(HashStringList const &ExpectedHashes);
|
|
virtual Hashes * GetHashes();
|
|
virtual bool Die(FileFd &/*File*/) { return false; }
|
|
virtual bool Flush(FileFd * const /*File*/) { return false; }
|
|
virtual bool Go(bool /*ToFile*/, FileFd * const /*File*/) { return false; }
|
|
|
|
HttpsServerState(URI Srv, HttpsMethod *Owner);
|
|
virtual ~HttpsServerState() {Close();};
|
|
};
|
|
|
|
class HttpsMethod : public ServerMethod
|
|
{
|
|
// minimum speed in bytes/se that triggers download timeout handling
|
|
static const int DL_MIN_SPEED = 10;
|
|
|
|
virtual bool Fetch(FetchItem *);
|
|
|
|
static size_t parse_header(void *buffer, size_t size, size_t nmemb, void *userp);
|
|
static size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
|
|
static int progress_callback(void *clientp, double dltotal, double dlnow,
|
|
double ultotal, double ulnow);
|
|
void SetupProxy();
|
|
CURL *curl;
|
|
ServerState *Server;
|
|
|
|
// Used by ServerMethods unused by https
|
|
virtual void SendReq(FetchItem *) { exit(42); }
|
|
virtual void RotateDNS() { exit(42); }
|
|
|
|
public:
|
|
FileFd *File;
|
|
|
|
virtual bool Configuration(std::string Message);
|
|
virtual ServerState * CreateServerState(URI uri);
|
|
using pkgAcqMethod::FetchResult;
|
|
|
|
HttpsMethod() : ServerMethod("1.2",Pipeline | SendConfig), File(NULL)
|
|
{
|
|
curl = curl_easy_init();
|
|
};
|
|
|
|
~HttpsMethod()
|
|
{
|
|
curl_easy_cleanup(curl);
|
|
};
|
|
};
|
|
|
|
#include <apt-pkg/strutl.h>
|
|
URI Proxy;
|
|
|
|
#endif
|