Mercurial > octave
annotate libinterp/corefcn/urlwrite.cc @ 28467:159b6a1eb408
Use wide character overload to open file streams on Windows.
* liboctave/system/lo-sysdep.cc, liboctave/system/lo-sysdep.h (fstream,
ifstream, ofstream): Add "wrapper" functions to open file streams.
* libinterp/corefcn/__fcn__.cc (F__ftp_mput__, F__ftp_mget__),
libinterp/corefcn/debug.cc (do_dbtype),
libinterp/corefcn/help.cc (help_system::raw_help_from_docstrings_file),
libinterp/corefcn/load-save.cc (check_gzip_magic,
load_save_system::get_file_format, load_save_system::dump_octave_core,
load_save_system::load, load_save_system::save),
libinterp/corefcn/oct-hist.cc (mk_tmp_hist_file,
history_system::do_edit_history),
libinterp/corefcn/urlwrite.cc (Furlwrite),
libinterp/octave-value/ov-java.cc (read_java_opts, read_classpath_txt),
libinterp/parse-tree/oct-parse.yy (get_file_line),
liboctave/util/cmd-hist.cc (gnu_history::do_append),
liboctave/util/file-info.cc (file_info::snarf_file),
liboctave/util/url-transfer.cc (base_url_transfer::mget_directory,
base_url_transfer::mput_directory): Use new functions.
* libinterp/corefcn/dlmread.cc (dlmread): Use wide character overload for
std::ifstream::open on Windows.
* src/mkoctfile.in.cc (octave_u8_conv_to_encoding): Dummy function for
cross-compiler.
(main): Use wide character overload of std::ofstream::open on Windows.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Fri, 12 Jun 2020 22:13:04 +0200 |
parents | 9f9ac219896d |
children | 28913793f678 0a5b15007766 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 2006-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
6043 | 25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21547
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
6043 | 28 #endif |
29 | |
30 #include <string> | |
31 #include <fstream> | |
32 #include <iomanip> | |
33 | |
9880 | 34 #include "dir-ops.h" |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
35 #include "file-ops.h" |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
36 #include "file-stat.h" |
25548
d6050ba12c0c
Call get_ASCII_filename for std::ifstream (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
37 #include "lo-sysdep.h" |
6043 | 38 #include "oct-env.h" |
17548
92541ff4cc3c
improve implementation of ftp object handles
John W. Eaton <jwe@octave.org>
parents:
17546
diff
changeset
|
39 #include "oct-handle.h" |
9880 | 40 #include "glob-match.h" |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
41 #include "url-transfer.h" |
6043 | 42 |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
43 #include "defun.h" |
6043 | 44 #include "error.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
45 #include "interpreter.h" |
9880 | 46 #include "oct-map.h" |
13985
43cc49c7abd1
Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
13978
diff
changeset
|
47 #include "oct-refcount.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
48 #include "ov-cell.h" |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
49 #include "ov-classdef.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
50 #include "ovl.h" |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
51 #include "pager.h" |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
52 #include "unwind-prot.h" |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
53 #include "url-handle-manager.h" |
17550
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
54 |
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
55 static void |
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
56 delete_file (const std::string& file) |
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
57 { |
21733
cb0fdd941d84
use namespace for system file_ops class
John W. Eaton <jwe@octave.org>
parents:
21732
diff
changeset
|
58 octave::sys::unlink (file); |
17550
77127a3badaa
move curl_object actions to rep class
John W. Eaton <jwe@octave.org>
parents:
17549
diff
changeset
|
59 } |
6043 | 60 |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
61 DEFUN (urlwrite, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
62 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
63 @deftypefn {} {} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
64 @deftypefnx {} {@var{f} =} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
65 @deftypefnx {} {[@var{f}, @var{success}] =} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
66 @deftypefnx {} {[@var{f}, @var{success}, @var{message}] =} urlwrite (@var{url}, @var{localfile}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
67 Download a remote file specified by its @var{url} and save it as |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
68 @var{localfile}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
69 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
70 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
71 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
72 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
73 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
74 urlwrite ("ftp://ftp.octave.org/pub/README", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
75 "README.txt"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
76 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
77 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
78 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
79 The full path of the downloaded file is returned in @var{f}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
80 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
81 The variable @var{success} is 1 if the download was successful, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
82 otherwise it is 0 in which case @var{message} contains an error message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
83 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
84 If no output argument is specified and an error occurs, then the error is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
85 signaled through Octave's error handling mechanism. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
86 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
87 This function uses libcurl. Curl supports, among others, the HTTP, FTP, and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
88 FILE protocols. Username and password may be specified in the URL, for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
89 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
90 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
91 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
92 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
93 urlwrite ("http://username:password@@example.com/file.txt", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
94 "file.txt"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
95 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
96 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
97 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
98 GET and POST requests can be specified by @var{method} and @var{param}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
99 The parameter @var{method} is either @samp{get} or @samp{post} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
100 @var{param} is a cell array of parameter and value pairs. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
101 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
102 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
103 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
104 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
105 urlwrite ("http://www.google.com/search", "search.html", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
106 "get", @{"query", "octave"@}); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
107 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
108 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
109 @seealso{urlread} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
110 @end deftypefn */) |
6043 | 111 { |
112 int nargin = args.length (); | |
113 | |
114 // verify arguments | |
115 if (nargin != 2 && nargin != 4) | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
116 print_usage (); |
6043 | 117 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
118 std::string url = args(0).xstring_value ("urlwrite: URL must be a string"); |
6043 | 119 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
120 // name to store the file if download is successful |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
121 std::string filename = args(1).xstring_value ("urlwrite: LOCALFILE must be a string"); |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
122 |
6043 | 123 std::string method; |
17554
f0d21e7d4653
avoid Cell arrays in usr_transfer classes
John W. Eaton <jwe@octave.org>
parents:
17553
diff
changeset
|
124 Array<std::string> param; |
6043 | 125 |
126 if (nargin == 4) | |
127 { | |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
128 method = args(2).xstring_value ("urlwrite: METHOD must be a string"); |
6043 | 129 |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
130 if (method != "get" && method != "post") |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23742
diff
changeset
|
131 error (R"(urlwrite: METHOD must be "get" or "post")"); |
6043 | 132 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
133 param = args(3).xcellstr_value ("urlwrite: parameters (PARAM) for get and post requests must be given as a cell array of strings"); |
6043 | 134 |
18678
6113e0c6920b
maint: Clean up extra spaces before/after parentheses.
Rik <rik@octave.org>
parents:
18391
diff
changeset
|
135 if (param.numel () % 2 == 1) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
136 error ("urlwrite: number of elements in PARAM must be even"); |
6043 | 137 } |
138 | |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
139 // The file should only be deleted if it doesn't initially exist, we |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
140 // create it, and the download fails. We use unwind_protect to do |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
141 // it so that the deletion happens no matter how we exit the function. |
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
142 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21733
diff
changeset
|
143 octave::sys::file_stat fs (filename); |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
144 |
28467
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27985
diff
changeset
|
145 std::ofstream ofile = |
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
27985
diff
changeset
|
146 octave::sys::ofstream (filename.c_str (), std::ios::out | std::ios::binary); |
6043 | 147 |
6986 | 148 if (! ofile.is_open ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
149 error ("urlwrite: unable to open file"); |
6043 | 150 |
21743
f4d7d0eb5b0c
use namespace for unwind_protect class
John W. Eaton <jwe@octave.org>
parents:
21736
diff
changeset
|
151 octave::unwind_protect_safe frame; |
8151
3725f819b5b3
urlwrite.cc (Furlwrite): delete files we create if download fails
John W. Eaton <jwe@octave.org>
parents:
7481
diff
changeset
|
152 |
17549
a646665cd574
eliminate unecessary static function in urlwrite.cc
John W. Eaton <jwe@octave.org>
parents:
17548
diff
changeset
|
153 frame.add_fcn (delete_file, filename); |
9880 | 154 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
155 octave::url_transfer url_xfer (url, ofile); |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17556
diff
changeset
|
156 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
157 octave_value_list retval; |
6043 | 158 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
159 if (! url_xfer.is_valid ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
160 error ("support for URL transfers was disabled when Octave was built"); |
17553
2d01e20abd85
rework error handling for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17551
diff
changeset
|
161 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
162 url_xfer.http_action (param, method); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
163 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
164 ofile.close (); |
18287
9a43d8d6e29e
avoid startup crash if curl library is not available (bug #41067)
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
165 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
166 if (url_xfer.good ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
167 frame.discard (); |
18287
9a43d8d6e29e
avoid startup crash if curl library is not available (bug #41067)
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
168 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
169 if (nargout > 0) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
170 { |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
171 if (url_xfer.good ()) |
21732
6a1eded90355
use namespace for system env class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
172 retval = ovl (octave::sys::env::make_absolute (filename), true, ""); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
173 else |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
174 retval = ovl ("", false, url_xfer.lasterror ()); |
17553
2d01e20abd85
rework error handling for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17551
diff
changeset
|
175 } |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
176 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
177 if (nargout < 2 && ! url_xfer.good ()) |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
178 error ("urlwrite: %s", url_xfer.lasterror ().c_str ()); |
6043 | 179 |
180 return retval; | |
181 } | |
182 | |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
17554
diff
changeset
|
183 DEFUN (urlread, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
184 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
185 @deftypefn {} {@var{s} =} urlread (@var{url}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
186 @deftypefnx {} {[@var{s}, @var{success}] =} urlread (@var{url}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
187 @deftypefnx {} {[@var{s}, @var{success}, @var{message}] =} urlread (@var{url}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
188 @deftypefnx {} {[@dots{}] =} urlread (@var{url}, @var{method}, @var{param}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
189 Download a remote file specified by its @var{url} and return its content |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
190 in string @var{s}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
191 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
192 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
193 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
194 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
195 s = urlread ("ftp://ftp.octave.org/pub/README"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
196 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
197 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
198 The variable @var{success} is 1 if the download was successful, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
199 otherwise it is 0 in which case @var{message} contains an error |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
200 message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
201 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
202 If no output argument is specified and an error occurs, then the error is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
203 signaled through Octave's error handling mechanism. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
204 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
205 This function uses libcurl. Curl supports, among others, the HTTP, FTP, and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
206 FILE protocols. Username and password may be specified in the URL@. For |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
207 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
208 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
209 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
210 s = urlread ("http://user:password@@example.com/file.txt"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
211 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
212 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
213 GET and POST requests can be specified by @var{method} and @var{param}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
214 The parameter @var{method} is either @samp{get} or @samp{post} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
215 @var{param} is a cell array of parameter and value pairs. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
216 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
217 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
218 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
219 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
220 s = urlread ("http://www.google.com/search", "get", |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
221 @{"query", "octave"@}); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
222 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
223 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
224 @seealso{urlwrite} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21782
diff
changeset
|
225 @end deftypefn */) |
6043 | 226 { |
227 int nargin = args.length (); | |
228 | |
229 // verify arguments | |
19403
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
19220
diff
changeset
|
230 if (nargin != 1 && nargin != 3) |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
231 print_usage (); |
6043 | 232 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
233 std::string url = args(0).xstring_value ("urlread: URL must be a string"); |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
234 |
6043 | 235 std::string method; |
17554
f0d21e7d4653
avoid Cell arrays in usr_transfer classes
John W. Eaton <jwe@octave.org>
parents:
17553
diff
changeset
|
236 Array<std::string> param; |
6043 | 237 |
238 if (nargin == 3) | |
239 { | |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
240 method = args(1).xstring_value ("urlread: METHOD must be a string"); |
6043 | 241 |
19404
c2f4f6eb5907
A few more instances of stricter input validation for strings (bug #42651).
Rik <rik@octave.org>
parents:
19403
diff
changeset
|
242 if (method != "get" && method != "post") |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23742
diff
changeset
|
243 error (R"(urlread: METHOD must be "get" or "post")"); |
6043 | 244 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20681
diff
changeset
|
245 param = args(2).xcellstr_value ("urlread: parameters (PARAM) for get and post requests must be given as a cell array of strings"); |
6043 | 246 |
18678
6113e0c6920b
maint: Clean up extra spaces before/after parentheses.
Rik <rik@octave.org>
parents:
18391
diff
changeset
|
247 if (param.numel () % 2 == 1) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
248 error ("urlread: number of elements in PARAM must be even"); |
6043 | 249 } |
250 | |
6986 | 251 std::ostringstream buf; |
6043 | 252 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
253 octave::url_transfer url_xfer = octave::url_transfer (url, buf); |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17556
diff
changeset
|
254 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
255 if (! url_xfer.is_valid ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
256 error ("support for URL transfers was disabled when Octave was built"); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
257 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
258 url_xfer.http_action (param, method); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
259 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
260 octave_value_list retval; |
6043 | 261 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
262 if (nargout > 0) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
263 { |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
264 // Return empty string if no error occurred. |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
265 retval = ovl (buf.str (), url_xfer.good (), |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
266 url_xfer.good () ? "" : url_xfer.lasterror ()); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20909
diff
changeset
|
267 } |
18287
9a43d8d6e29e
avoid startup crash if curl library is not available (bug #41067)
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
268 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
269 if (nargout < 2 && ! url_xfer.good ()) |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23577
diff
changeset
|
270 error ("urlread: %s", url_xfer.lasterror ().c_str ()); |
6043 | 271 |
272 return retval; | |
273 } | |
9880 | 274 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
275 DEFUN (__restful_service__, args, nargout, |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
276 doc: /* -*- texinfo -*- |
27795
afbaad39d25c
doc: grammarcheck C++ files in libinterp/ directory.
Rik <rik@octave.org>
parents:
27357
diff
changeset
|
277 @deftypefn {} {@var{response} =} __restful_service__ (@var{url}, @var{param}, @var{weboptions}) |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
278 Undocumented internal function. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
279 @end deftypefn */) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
280 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
281 int nargin = args.length (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
282 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
283 if (nargin < 1) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
284 print_usage (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
285 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
286 std::string url = args(0).xstring_value ("__restful_service__: URL must be a string"); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
287 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
288 std::ostringstream content; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
289 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
290 octave::url_transfer url_xfer (url, content); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
291 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
292 if (! url_xfer.is_valid ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
293 error ("support for URL transfers was disabled when Octave was built"); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
294 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
295 Array<std::string> param = args(1).cellstr_value (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
296 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
297 std::string data, method; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
298 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
299 struct octave::weboptions options; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
300 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
301 octave::cdef_object object = args (nargin - 1).classdef_object_value () |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
302 -> get_object (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
303 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
304 // We could've used object.map_value () instead to return a map but that |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
305 // shows a warning about about overriding access restrictions. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
306 // Nevertheless, we are keeping checking that here if the keys are not |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
307 // equal to "delete" and "display", getting away with the warning. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
308 string_vector keys = object.map_keys (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
309 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
310 for (int i = 0; i < keys.numel (); i++) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
311 { |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
312 if (keys(i) == "Timeout") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
313 { |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
314 float timeout = object.get (keys(i)).float_value (); |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
315 options.Timeout = static_cast<long>(timeout * 1000); |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
316 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
317 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
318 if (keys(i) == "HeaderFields") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
319 { |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
320 options.HeaderFields = object.get (keys(i)).cellstr_value (); |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
321 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
322 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
323 // FIXME: 'delete' and 'display', auto-generated, probably by cdef_object |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
324 // class? Remaining fields have already been adjusted elsewhere in the |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
325 // m-script. Set 'value' as the Value of the Key wherever it's a string. |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
326 if (keys(i) != "Timeout" && keys(i) != "HeaderFields" |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
327 && keys(i) != "delete" && keys(i) != "display") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
328 { |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
329 std::string value = object.get (keys(i)).string_value (); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
330 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
331 if (keys(i) == "UserAgent") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
332 options.UserAgent = value; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
333 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
334 if (keys(i) == "Username") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
335 options.Username = value; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
336 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
337 if (keys(i) == "Password") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
338 options.Password = value; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
339 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
340 if (keys(i) == "ContentReader") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
341 // Unimplemented. Only for MATLAB compatibility. |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
342 options.ContentReader = ""; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
343 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
344 if (keys(i) == "RequestMethod") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
345 method = value; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
346 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
347 if (keys(i) == "ArrayFormat") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
348 options.ArrayFormat = value; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
349 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
350 if (keys(i) == "CertificateFilename") |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
351 options.CertificateFilename = ""; |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
352 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
353 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
354 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
355 url_xfer.set_weboptions (options); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
356 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
357 url_xfer.http_action (param, method); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
358 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
359 if (nargout < 2 && ! url_xfer.good ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
360 error ("__restful_service__: %s", url_xfer.lasterror ().c_str ()); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
361 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
362 return ovl (content.str ()); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
363 } |