DSL
download.cpp
1 //@AUTOHEADER@BEGIN@
2 /***********************************************************************\
3 | Drift Standard Libraries v1.01 |
4 | Copyright 2010-2023 Drift Solutions / Indy Sams |
5 | Docs and more information available at https://www.driftsolutions.dev |
6 | This file released under the 3-clause BSD license, |
7 | see included DSL.LICENSE.TXT file for details. |
8 \***********************************************************************/
9 //@AUTOHEADER@END@
10 
11 #include <drift/dslcore.h>
12 #include <drift/download.h>
13 
14 DSL_Download_Base::~DSL_Download_Base() {
15 }
16 
17 DSL_Download_Errors DSL_Download_Base::GetError() { return this->error; }
18 
19 static const char * DSL_Download_Error_Strings[TD_NUM_ERRORS] = {
20  "No Error",
21 
22  "File Access Error",
23  "Error Connecting to Host",
24  "Invalid Response",
25  "Error Creating Socket",
26  "Error initializing libCURL",
27 
28  "Error writing file",
29  "Invalid URL",
30  "Callback Abort",
31  "Invalid Protocol",
32  "File Not Found",
33  "Server tried to redirect, but FollowRedirects is Off",
34  "Transfer Timed Out",
35  "Authorization Needed or Bad Username/Password"
36 };
37 
38 const char * DSL_Download_Base::GetErrorString() {
39  if (this->error >= TD_NUM_ERRORS) {
40  static char unkerr[] = "Unkown Error";
41  return unkerr;
42  }
43  return DSL_Download_Error_Strings[this->error];
44 }
45 
46 bool DSL_Download_Base::Download(const string& SaveAs) {
47  if (this->error != TD_NO_ERROR || SaveAs.empty()) { return false; }
48 
49  DSL_FILE * fp = RW_OpenFile(SaveAs.c_str(), "wb");
50  if (fp == NULL) {
51  this->error = TD_FILE_ACCESS;
52  return false;
53  }
54  bool ret = Download(fp);
55  fp->close(fp);
56  return ret;
57 }
58 
59 bool DSL_Download_Base::Download(FILE * fWriteTo) {
60  if (this->error != TD_NO_ERROR || fWriteTo == NULL) { return false; }
61 
62  DSL_FILE * fp = RW_ConvertFile(fWriteTo, false);
63  if (fp == NULL) {
64  this->error = TD_FILE_ACCESS;
65  return false;
66  }
67  bool ret = Download(fp);
68  fp->close(fp);
69  return ret;
70 }
virtual bool Download(const string &SaveAs)
Begin download saving to file SaveAs.
Definition: download.cpp:46
DSL_Download_Errors
Definition: download.h:36
DSL_API DSL_FILE *DSL_CC RW_ConvertFile(FILE *fp, bool autoclose)
Definition: rwops.cpp:68
DSL_API DSL_FILE *DSL_CC RW_OpenFile(const char *fn, const char *mode)
Definition: rwops.cpp:50
Definition: rwops.h:24
void(* close)(DSL_FILE *fp)
Definition: rwops.h:54