summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project2/url/Jamfile.jam3
-rw-r--r--project2/url/downloadToFile.cpp36
2 files changed, 37 insertions, 2 deletions
diff --git a/project2/url/Jamfile.jam b/project2/url/Jamfile.jam
index 1710e17..1f48e2a 100644
--- a/project2/url/Jamfile.jam
+++ b/project2/url/Jamfile.jam
@@ -5,8 +5,7 @@ alias glibmm : : : :
lib curl : : <name>curl ;
lib p2url :
- urlRows.cpp
- curlHelper.cpp
+ [ glob *.cpp ]
../../libmisc/curlsup.cpp
:
<library>../common//p2common
diff --git a/project2/url/downloadToFile.cpp b/project2/url/downloadToFile.cpp
new file mode 100644
index 0000000..dcd9710
--- /dev/null
+++ b/project2/url/downloadToFile.cpp
@@ -0,0 +1,36 @@
+#include "curlHelper.h"
+#include "task.h"
+#include "scopeObject.h"
+#include "scriptLoader.h"
+#include "exceptions.h"
+#include "../libmisc/curlsup.h"
+
+/// Project2 component to create a row set from the contents of a file accessible via libcurl
+class Download : public Task, VariableCurlHelper {
+ public:
+ Download(ScriptNodePtr p) :
+ SourceObject(p),
+ Task(p),
+ VariableCurlHelper(p),
+ destination(p, "destination")
+ {
+ }
+
+ void execute() const
+ {
+ CurlPtr c = newCurl();
+ FILE * file = fopen(destination(), "w");
+ if (!file) {
+ throw syscall_error(errno);
+ }
+ ScopeObject tidy([=]{ fclose(file); });
+ c->performRead([=](const char * data, size_t len) -> size_t { return fwrite(data, 1, len, file); });
+ }
+
+ private:
+
+ const Variable destination;
+};
+
+DECLARE_LOADER("download", Download);
+