GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
url-transfer.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 2013-2018 John W. Eaton
4 Copyright (C) 2006-2018 Alexander Barth
5 Copyright (C) 2009 David Bateman
6 
7 This file is part of Octave.
8 
9 Octave is free software: you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13 
14 Octave is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with Octave; see the file COPYING. If not, see
21 <https://www.gnu.org/licenses/>.
22 
23 */
24 
25 // Author: Alexander Barth <abarth@marine.usf.edu>
26 // Author: jwe
27 
28 #if ! defined (octave_url_transfer_h)
29 #define octave_url_transfer_h 1
30 
31 #include "octave-config.h"
32 
33 #include <iosfwd>
34 #include <memory>
35 #include <string>
36 
37 #include "str-vec.h"
38 
39 template <typename T> class Array;
40 
41 namespace octave
42 {
43  class
44  OCTAVE_API
46  {
47  private:
48 
49  static void delete_file (const std::string& file);
50 
51  static void reset_path (base_url_transfer *curl_xfer)
52  {
53  curl_xfer->cwd ("..");
54  }
55 
56  public:
57 
58  friend class url_transfer;
59 
61  : host_or_url (), valid (false), ftp (false),
62  ascii_mode (false), ok (true), errmsg (),
63  curr_istream (&std::cin), curr_ostream (&std::cout) { }
64 
66  const std::string& /* user_arg */,
67  const std::string& /* passwd */,
68  std::ostream& os)
69  : host_or_url (host), valid (false), ftp (true),
70  ascii_mode (false), ok (true), errmsg (), curr_istream (&std::cin),
71  curr_ostream (&os) { }
72 
73  base_url_transfer (const std::string& url, std::ostream& os)
74  : host_or_url (url), valid (false), ftp (false),
75  ascii_mode (false), ok (true), errmsg (),
76  curr_istream (&std::cin), curr_ostream (&os) { }
77 
78  // No copying!
79 
80  base_url_transfer (const base_url_transfer&) = delete;
81 
82  base_url_transfer& operator = (const base_url_transfer&) = delete;
83 
84  virtual ~base_url_transfer (void) = default;
85 
86  bool is_valid (void) const { return valid; }
87 
88  bool good (void) const { return valid && ok; }
89 
90  virtual void perform (void) { }
91 
92  virtual std::string lasterror (void) const { return errmsg; }
93 
94  virtual std::ostream& set_ostream (std::ostream& /* os */)
95  {
96  return *curr_ostream;
97  }
98 
99  virtual std::istream& set_istream (std::istream& /* is */)
100  {
101  return *curr_istream;
102  }
103 
104  virtual void ascii (void) { }
105 
106  virtual void binary (void) { }
107 
108  bool is_ascii (void) const { return ascii_mode; }
109 
110  bool is_binary (void) const { return ! ascii_mode; }
111 
112  virtual void cwd (const std::string& /* path */) { }
113 
114  virtual void del (const std::string& /* file */) { }
115 
116  virtual void rmdir (const std::string& /* path */) { }
117 
118  virtual void mkdir (const std::string& /* path */) { }
119 
120  virtual void rename (const std::string& /* oldname */,
121  const std::string& /* newname */) { }
122 
123  virtual void put (const std::string& /* file */,
124  std::istream& /* is */) { }
125 
126  virtual void get (const std::string& /* file */,
127  std::ostream& /* os */) { }
128 
129  void mget_directory (const std::string& directory,
130  const std::string& target);
131 
132  string_vector mput_directory (const std::string& base,
133  const std::string& directory);
134 
135  virtual void dir (void) { }
136 
137  virtual string_vector list (void) { return string_vector (); }
138 
139  virtual void get_fileinfo (const std::string& /* filename */,
140  double& /* filesize */,
141  time_t& /* filetime */,
142  bool& /* fileisdir */) { }
143 
144  virtual std::string pwd (void) { return ""; }
145 
146  virtual void http_get (const Array<std::string>& /* param */) { }
147 
148  virtual void http_post (const Array<std::string>& /* param */) { }
149 
150  virtual void http_action (const Array<std::string>& /* param */,
151  const std::string& /* action */) { }
152 
153  protected:
154 
155  // Host for ftp transfers or full URL for http requests.
157  bool valid;
158  bool ftp;
160  bool ok;
162  std::istream *curr_istream;
163  std::ostream *curr_ostream;
164  };
165 
166  class
167  OCTAVE_API
169  {
170  public:
171 
172  url_transfer (void);
173 
174  url_transfer (const std::string& host, const std::string& user,
175  const std::string& passwd, std::ostream& os);
176 
177  url_transfer (const std::string& url, std::ostream& os);
178 
179  url_transfer (const url_transfer&) = default;
180 
181  url_transfer& operator = (const url_transfer&) = default;
182 
183  ~url_transfer (void) = default;
184 
185  bool is_valid (void) const { return rep->is_valid (); }
186 
187  bool good (void) const { return rep->good (); }
188 
189  std::string lasterror (void) const { return rep->lasterror (); }
190 
191  std::ostream& set_ostream (std::ostream& os)
192  {
193  return rep->set_ostream (os);
194  }
195 
196  std::istream& set_istream (std::istream& is)
197  {
198  return rep->set_istream (is);
199  }
200 
201  void ascii (void) { rep->ascii (); }
202 
203  void binary (void) { rep->binary (); }
204 
205  bool is_ascii (void) const { return rep->is_ascii (); }
206 
207  bool is_binary (void) const { return rep->is_binary (); }
208 
209  void cwd (const std::string& path) { rep->cwd (path); }
210 
211  void del (const std::string& file) { rep->del (file); }
212 
213  void rmdir (const std::string& path) { rep->rmdir (path); }
214 
215  void mkdir (const std::string& path) { rep->mkdir (path); }
216 
217  void rename (const std::string& oldname, const std::string& newname)
218  {
219  rep->rename (oldname, newname);
220  }
221 
222  void put (const std::string& file, std::istream& is)
223  {
224  rep->put (file, is);
225  }
226 
227  void get (const std::string& file, std::ostream& os)
228  {
229  rep->get (file, os);
230  }
231 
233  const std::string& target)
234  {
235  rep->mget_directory (directory, target);
236  }
237 
239  const std::string& directory)
240  {
241  return rep->mput_directory (base, directory);
242  }
243 
244  void dir (void) { rep->dir (); }
245 
246  string_vector list (void) { return rep->list (); }
247 
248  void get_fileinfo (const std::string& filename, double& filesize,
249  time_t& filetime, bool& fileisdir)
250  {
251  rep->get_fileinfo (filename, filesize, filetime, fileisdir);
252  }
253 
254  std::string pwd (void) { return rep->pwd (); }
255 
256  void http_get (const Array<std::string>& param) { rep->http_get (param); }
257 
258  void http_post (const Array<std::string>& param) { rep->http_post (param); }
259 
261  const std::string& action)
262  {
263  rep->http_action (param, action);
264  }
265 
266  private:
267 
268  std::shared_ptr<base_url_transfer> rep;
269  };
270 }
271 
272 #if defined (OCTAVE_USE_DEPRECATED_FUNCTIONS)
273 
274 OCTAVE_DEPRECATED (4.2, "use 'octave::base_url_transfer' instead")
275 typedef octave::base_url_transfer base_url_transfer;
276 
277 OCTAVE_DEPRECATED (4.2, "use 'octave::url_transfer' instead")
278 typedef octave::url_transfer url_transfer;
279 
280 #endif
281 
282 #endif
bool is_valid(void) const
Definition: url-transfer.h:185
For example cd octave end example noindent changes the current working directory to file
Definition: dirfns.cc:124
string_vector list(void)
Definition: url-transfer.h:246
std::string lasterror(void) const
Definition: url-transfer.h:189
virtual void put(const std::string &, std::istream &)
Definition: url-transfer.h:123
void mkdir(const std::string &path)
Definition: url-transfer.h:215
base_url_transfer(const std::string &url, std::ostream &os)
Definition: url-transfer.h:73
base_url_transfer(const std::string &host, const std::string &, const std::string &, std::ostream &os)
Definition: url-transfer.h:65
void rename(const std::string &oldname, const std::string &newname)
Definition: url-transfer.h:217
void http_post(const Array< std::string > &param)
Definition: url-transfer.h:258
STL namespace.
virtual void del(const std::string &)
Definition: url-transfer.h:114
std::string filename
Definition: urlwrite.cc:121
void put(const std::string &file, std::istream &is)
Definition: url-transfer.h:222
virtual string_vector list(void)
Definition: url-transfer.h:137
std::istream & set_istream(std::istream &is)
Definition: url-transfer.h:196
std::shared_ptr< base_url_transfer > rep
Definition: url-transfer.h:268
virtual void http_get(const Array< std::string > &)
Definition: url-transfer.h:146
void mget_directory(const std::string &directory, const std::string &target)
Definition: url-transfer.h:232
virtual void dir(void)
Definition: url-transfer.h:135
bool is_binary(void) const
Definition: url-transfer.h:110
bool good(void) const
Definition: url-transfer.h:88
bool good(void) const
Definition: url-transfer.h:187
virtual std::istream & set_istream(std::istream &)
Definition: url-transfer.h:99
string_vector mput_directory(const std::string &base, const std::string &directory)
Definition: url-transfer.h:238
virtual void binary(void)
Definition: url-transfer.h:106
virtual void perform(void)
Definition: url-transfer.h:90
virtual std::string lasterror(void) const
Definition: url-transfer.h:92
virtual void rmdir(const std::string &)
Definition: url-transfer.h:116
bool is_ascii(void) const
Definition: url-transfer.h:108
is false
Definition: cellfun.cc:400
void rmdir(const std::string &path)
Definition: url-transfer.h:213
void get_fileinfo(const std::string &filename, double &filesize, time_t &filetime, bool &fileisdir)
Definition: url-transfer.h:248
virtual void get_fileinfo(const std::string &, double &, time_t &, bool &)
Definition: url-transfer.h:139
Array< std::string > param
Definition: urlwrite.cc:124
static void reset_path(base_url_transfer *curl_xfer)
Definition: url-transfer.h:51
virtual void rename(const std::string &, const std::string &)
Definition: url-transfer.h:120
std::string url
Definition: urlwrite.cc:118
void http_get(const Array< std::string > &param)
Definition: url-transfer.h:256
bool is_ascii(void) const
Definition: url-transfer.h:205
N Dimensional Array with copy-on-write semantics.
Definition: Array.h:125
virtual void cwd(const std::string &)
Definition: url-transfer.h:112
void cwd(const std::string &path)
Definition: url-transfer.h:209
void http_action(const Array< std::string > &param, const std::string &action)
Definition: url-transfer.h:260
void del(const std::string &file)
Definition: url-transfer.h:211
virtual std::ostream & set_ostream(std::ostream &)
Definition: url-transfer.h:94
static void delete_file(const std::string &file)
Definition: urlwrite.cc:56
virtual void mkdir(const std::string &)
Definition: url-transfer.h:118
virtual std::string pwd(void)
Definition: url-transfer.h:144
virtual void http_action(const Array< std::string > &, const std::string &)
Definition: url-transfer.h:150
virtual void ascii(void)
Definition: url-transfer.h:104
std::ostream & set_ostream(std::ostream &os)
Definition: url-transfer.h:191
bool is_valid(void) const
Definition: url-transfer.h:86
write the output to stdout if nargout is
Definition: load-save.cc:1612
bool is_binary(void) const
Definition: url-transfer.h:207
std::string pwd(void)
Definition: url-transfer.h:254
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
Definition: utils.cc:888
octave::stream os
Definition: file-io.cc:627
virtual void http_post(const Array< std::string > &)
Definition: url-transfer.h:148
std::ostream * curr_ostream
Definition: url-transfer.h:163
std::istream * curr_istream
Definition: url-transfer.h:162
OCTAVE_EXPORT octave_value_list directory
Definition: variables.cc:593