2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_DOWNLOADER_H
10 #define SQUID_DOWNLOADER_H
12 #include "base/AsyncJob.h"
14 #include "http/forward.h"
15 #include "http/StatusCode.h"
16 #include "sbuf/SBuf.h"
18 class ClientHttpRequest
;
20 class clientStreamNode
;
21 class DownloaderContext
;
22 typedef RefCount
<DownloaderContext
> DownloaderContextPointer
;
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
30 CBDATA_CLASS(Downloader
);
33 /// Callback data to use with Downloader callbacks.
36 CbDialer(): status(Http::scNone
) {}
37 virtual ~CbDialer() {}
39 Http::StatusCode status
;
42 Downloader(SBuf
&url
, AsyncCall::Pointer
&aCallback
, unsigned int level
= 0);
43 virtual ~Downloader();
45 /// delays destruction to protect doCallouts()
46 void downloadFinished();
48 /// The nested level of Downloader object (downloads inside downloads).
49 unsigned int nestedLevel() const {return level_
;}
51 void handleReply(clientStreamNode
*, ClientHttpRequest
*, HttpReply
*, StoreIOBuffer
);
56 virtual bool doneAll() const;
62 void callBack(Http::StatusCode
const status
);
64 /// The maximum allowed object size.
65 static const size_t MaxObjectSize
= 1*1024*1024;
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
72 /// Pointer to an object that stores the clientStream required info
73 DownloaderContextPointer context_
;