]> git.ipfire.org Git - thirdparty/squid.git/blob - src/Downloader.h
Squid-dev review comments by Alex and Amos
[thirdparty/squid.git] / src / Downloader.h
1 /*
2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_DOWNLOADER_H
10 #define SQUID_DOWNLOADER_H
11
12 #include "base/AsyncJob.h"
13 #include "defines.h"
14 #include "http/forward.h"
15 #include "http/StatusCode.h"
16 #include "sbuf/SBuf.h"
17
18 class ClientHttpRequest;
19 class StoreIOBuffer;
20 class clientStreamNode;
21 class DownloaderContext;
22 typedef RefCount<DownloaderContext> DownloaderContextPointer;
23
24 /// The Downloader class fetches SBuf-storable things for other Squid
25 /// components/transactions using internal requests. For example, it is used
26 /// to fetch missing intermediate certificates when validating origin server
27 /// certificate chains.
28 class Downloader: virtual public AsyncJob
29 {
30 CBDATA_CLASS(Downloader);
31 public:
32
33 /// Callback data to use with Downloader callbacks.
34 class CbDialer {
35 public:
36 CbDialer(): status(Http::scNone) {}
37 virtual ~CbDialer() {}
38 SBuf object;
39 Http::StatusCode status;
40 };
41
42 Downloader(SBuf &url, AsyncCall::Pointer &aCallback, unsigned int level = 0);
43 virtual ~Downloader();
44
45 /// delays destruction to protect doCallouts()
46 void downloadFinished();
47
48 /// The nested level of Downloader object (downloads inside downloads).
49 unsigned int nestedLevel() const {return level_;}
50
51 void handleReply(clientStreamNode *, ClientHttpRequest *, HttpReply *, StoreIOBuffer);
52
53 protected:
54
55 /* AsyncJob API */
56 virtual bool doneAll() const;
57 virtual void start();
58
59 private:
60
61 bool buildRequest();
62 void callBack(Http::StatusCode const status);
63
64 /// The maximum allowed object size.
65 static const size_t MaxObjectSize = 1*1024*1024;
66
67 SBuf url_; ///< the url to download
68 AsyncCall::Pointer callback_; ///< callback to call when download finishes
69 SBuf object_; ///< the object body data
70 const unsigned int level_; ///< holds the nested downloads level
71
72 /// Pointer to an object that stores the clientStream required info
73 DownloaderContextPointer context_;
74 };
75
76 #endif