GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
url-transfer.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 2013-2017 John W. Eaton
4 Copyright (C) 2006-2016 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 the
11 Free Software Foundation; either version 3 of the License, or (at your
12 option) any later version.
13 
14 Octave is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 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 <http://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 <string>
35 
36 namespace octave
37 {
38  class
39  OCTAVE_API
41  {
42  private:
43 
44  static void delete_file (const std::string& file);
45 
46  static void reset_path (base_url_transfer *curl_xfer)
47  {
48  curl_xfer->cwd ("..");
49  }
50 
51  public:
52 
53  friend class url_transfer;
54 
56  : count (1), host_or_url (), valid (false), ftp (false),
57  ascii_mode (false), ok (true), errmsg (),
58  curr_istream (&std::cin), curr_ostream (&std::cout) { }
59 
61  const std::string& /* user_arg */,
62  const std::string& /* passwd */,
63  std::ostream& os)
64  : count (1), host_or_url (host), valid (false), ftp (true),
65  ascii_mode (false), ok (true), errmsg (), curr_istream (&std::cin),
66  curr_ostream (&os) { }
67 
68  base_url_transfer (const std::string& url, std::ostream& os)
69  : count (1), host_or_url (url), valid (false), ftp (false),
70  ascii_mode (false), ok (true), errmsg (),
71  curr_istream (&std::cin), curr_ostream (&os) { }
72 
73  virtual ~base_url_transfer (void) { }
74 
75  bool is_valid (void) const { return valid; }
76 
77  bool good (void) const { return valid && ok; }
78 
79  virtual void perform (void) { }
80 
81  virtual std::string lasterror (void) const { return errmsg; }
82 
83  virtual std::ostream& set_ostream (std::ostream& /* os */)
84  {
85  return *curr_ostream;
86  }
87 
88  virtual std::istream& set_istream (std::istream& /* is */)
89  {
90  return *curr_istream;
91  }
92 
93  virtual void ascii (void) { }
94 
95  virtual void binary (void) { }
96 
97  bool is_ascii (void) const { return ascii_mode; }
98 
99  bool is_binary (void) const { return ! ascii_mode; }
100 
101  virtual void cwd (const std::string& /* path */) { }
102 
103  virtual void del (const std::string& /* file */) { }
104 
105  virtual void rmdir (const std::string& /* path */) { }
106 
107  virtual void mkdir (const std::string& /* path */) { }
108 
109  virtual void rename (const std::string& /* oldname */,
110  const std::string& /* newname */) { }
111 
112  virtual void put (const std::string& /* file */,
113  std::istream& /* is */) { }
114 
115  virtual void get (const std::string& /* file */,
116  std::ostream& /* os */) { }
117 
118  void mget_directory (const std::string& directory,
119  const std::string& target);
120 
121  string_vector mput_directory (const std::string& base,
122  const std::string& directory);
123 
124  virtual void dir (void) { }
125 
126  virtual string_vector list (void) { return string_vector (); }
127 
128  virtual void get_fileinfo (const std::string& /* filename */,
129  double& /* filesize */,
130  time_t& /* filetime */,
131  bool& /* fileisdir */) { }
132 
133  virtual std::string pwd (void) { return ""; }
134 
135  virtual void http_get (const Array<std::string>& /* param */) { }
136 
137  virtual void http_post (const Array<std::string>& /* param */) { }
138 
139  virtual void http_action (const Array<std::string>& /* param */,
140  const std::string& /* action */) { }
141 
142  protected:
143 
144  // Reference count.
146 
147  // Host for ftp transfers or full URL for http requests.
149  bool valid;
150  bool ftp;
152  bool ok;
154  std::istream *curr_istream;
155  std::ostream *curr_ostream;
156 
157  private:
158 
159  // No copying!
160 
162 
163  base_url_transfer& operator = (const base_url_transfer&);
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& h) : rep (h.rep)
180  {
181  rep->count++;
182  }
183 
185  {
186  if (--rep->count == 0)
187  delete rep;
188  }
189 
190  url_transfer& operator = (const url_transfer& h)
191  {
192  if (this != &h)
193  {
194  if (--rep->count == 0)
195  delete rep;
196 
197  rep = h.rep;
198  rep->count++;
199  }
200 
201  return *this;
202  }
203 
204  bool is_valid (void) const { return rep->is_valid (); }
205 
206  bool good (void) const { return rep->good (); }
207 
208  std::string lasterror (void) const { return rep->lasterror (); }
209 
210  std::ostream& set_ostream (std::ostream& os)
211  {
212  return rep->set_ostream (os);
213  }
214 
215  std::istream& set_istream (std::istream& is)
216  {
217  return rep->set_istream (is);
218  }
219 
220  void ascii (void) { rep->ascii (); }
221 
222  void binary (void) { rep->binary (); }
223 
224  bool is_ascii (void) const { return rep->is_ascii (); }
225 
226  bool is_binary (void) const { return rep->is_binary (); }
227 
228  void cwd (const std::string& path) { rep->cwd (path); }
229 
230  void del (const std::string& file) { rep->del (file); }
231 
232  void rmdir (const std::string& path) { rep->rmdir (path); }
233 
234  void mkdir (const std::string& path) { rep->mkdir (path); }
235 
236  void rename (const std::string& oldname, const std::string& newname)
237  {
238  rep->rename (oldname, newname);
239  }
240 
241  void put (const std::string& file, std::istream& is)
242  {
243  rep->put (file, is);
244  }
245 
246  void get (const std::string& file, std::ostream& os)
247  {
248  rep->get (file, os);
249  }
250 
252  const std::string& target)
253  {
254  rep->mget_directory (directory, target);
255  }
256 
258  const std::string& directory)
259  {
260  return rep->mput_directory (base, directory);
261  }
262 
263  void dir (void) { rep->dir (); }
264 
265  string_vector list (void) { return rep->list (); }
266 
267  void get_fileinfo (const std::string& filename, double& filesize,
268  time_t& filetime, bool& fileisdir)
269  {
270  rep->get_fileinfo (filename, filesize, filetime, fileisdir);
271  }
272 
273  std::string pwd (void) { return rep->pwd (); }
274 
275  void http_get (const Array<std::string>& param) { rep->http_get (param); }
276 
277  void http_post (const Array<std::string>& param) { rep->http_post (param); }
278 
280  const std::string& action)
281  {
282  rep->http_action (param, action);
283  }
284 
285  private:
286 
288  };
289 }
290 
291 #if defined (OCTAVE_USE_DEPRECATED_FUNCTIONS)
292 
293 OCTAVE_DEPRECATED ("use 'octave::base_url_transfer' instead")
294 typedef octave::base_url_transfer base_url_transfer;
295 
296 OCTAVE_DEPRECATED ("use 'octave::url_transfer' instead")
297 typedef octave::url_transfer url_transfer;
298 
299 #endif
300 
301 #endif
bool is_binary(void) const
Definition: url-transfer.h:226
base_url_transfer * rep
Definition: url-transfer.h:287
Octave interface to the compression and uncompression libraries.
Definition: aepbalance.cc:47
For example cd octave end example noindent changes the current working directory to file
Definition: dirfns.cc:120
string_vector list(void)
Definition: url-transfer.h:265
virtual void put(const std::string &, std::istream &)
Definition: url-transfer.h:112
void mkdir(const std::string &path)
Definition: url-transfer.h:234
base_url_transfer(const std::string &url, std::ostream &os)
Definition: url-transfer.h:68
base_url_transfer(const std::string &host, const std::string &, const std::string &, std::ostream &os)
Definition: url-transfer.h:60
void rename(const std::string &oldname, const std::string &newname)
Definition: url-transfer.h:236
bool is_ascii(void) const
Definition: url-transfer.h:224
void http_post(const Array< std::string > &param)
Definition: url-transfer.h:277
bool is_valid(void) const
Definition: url-transfer.h:204
STL namespace.
virtual void del(const std::string &)
Definition: url-transfer.h:103
std::string filename
Definition: urlwrite.cc:340
octave_refcount< size_t > count
Definition: url-transfer.h:145
void put(const std::string &file, std::istream &is)
Definition: url-transfer.h:241
virtual string_vector list(void)
Definition: url-transfer.h:126
std::istream & set_istream(std::istream &is)
Definition: url-transfer.h:215
virtual void http_get(const Array< std::string > &)
Definition: url-transfer.h:135
void mget_directory(const std::string &directory, const std::string &target)
Definition: url-transfer.h:251
virtual void dir(void)
Definition: url-transfer.h:124
url_transfer(const url_transfer &h)
Definition: url-transfer.h:179
bool is_valid(void) const
Definition: url-transfer.h:75
double h
Definition: graphics.cc:11205
bool is_ascii(void) const
Definition: url-transfer.h:97
virtual std::istream & set_istream(std::istream &)
Definition: url-transfer.h:88
string_vector mput_directory(const std::string &base, const std::string &directory)
Definition: url-transfer.h:257
virtual void binary(void)
Definition: url-transfer.h:95
virtual void perform(void)
Definition: url-transfer.h:79
std::string lasterror(void) const
Definition: url-transfer.h:208
virtual void rmdir(const std::string &)
Definition: url-transfer.h:105
bool good(void) const
Definition: url-transfer.h:77
is false
Definition: cellfun.cc:398
void rmdir(const std::string &path)
Definition: url-transfer.h:232
void get_fileinfo(const std::string &filename, double &filesize, time_t &filetime, bool &fileisdir)
Definition: url-transfer.h:267
virtual void get_fileinfo(const std::string &, double &, time_t &, bool &)
Definition: url-transfer.h:128
Array< std::string > param
Definition: urlwrite.cc:343
bool good(void) const
Definition: url-transfer.h:206
static void reset_path(base_url_transfer *curl_xfer)
Definition: url-transfer.h:46
virtual void rename(const std::string &, const std::string &)
Definition: url-transfer.h:109
std::string url
Definition: urlwrite.cc:337
void http_get(const Array< std::string > &param)
Definition: url-transfer.h:275
virtual std::string lasterror(void) const
Definition: url-transfer.h:81
bool is_binary(void) const
Definition: url-transfer.h:99
virtual void cwd(const std::string &)
Definition: url-transfer.h:101
void cwd(const std::string &path)
Definition: url-transfer.h:228
void http_action(const Array< std::string > &param, const std::string &action)
Definition: url-transfer.h:279
void del(const std::string &file)
Definition: url-transfer.h:230
virtual std::ostream & set_ostream(std::ostream &)
Definition: url-transfer.h:83
static void delete_file(const std::string &file)
Definition: urlwrite.cc:56
virtual void mkdir(const std::string &)
Definition: url-transfer.h:107
virtual ~base_url_transfer(void)
Definition: url-transfer.h:73
virtual std::string pwd(void)
Definition: url-transfer.h:133
virtual void http_action(const Array< std::string > &, const std::string &)
Definition: url-transfer.h:139
virtual void ascii(void)
Definition: url-transfer.h:93
std::ostream & set_ostream(std::ostream &os)
Definition: url-transfer.h:210
write the output to stdout if nargout is
Definition: load-save.cc:1576
std::string pwd(void)
Definition: url-transfer.h:273
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:854
virtual void http_post(const Array< std::string > &)
Definition: url-transfer.h:137
std::ostream * curr_ostream
Definition: url-transfer.h:155
std::istream * curr_istream
Definition: url-transfer.h:154
OCTAVE_EXPORT octave_value_list directory
Definition: variables.cc:582