Mercurial > octave
annotate liboctave/util/url-transfer.cc @ 30564:796f54d4ddbf stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
In all .txi and .texi files except gpl.txi and gpl.texi in the
doc/liboctave and doc/interpreter directories, change the copyright
to "Octave Project Developers", the same as used for other source
files. Update copyright notices for 2022 (not done since 2019). For
gpl.txi and gpl.texi, change the copyright notice to be "Free Software
Foundation, Inc." and leave the date at 2007 only because this file
only contains the text of the GPL, not anything created by the Octave
Project Developers.
Add Paul Thomas to contributors.in.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 28 Dec 2021 18:22:40 -0500 |
parents | f3f3e3793fb5 |
children | 243b51ec9ff0 |
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 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
30394
diff
changeset
|
3 // Copyright (C) 2006-2022 The Octave Project Developers |
27923
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 //////////////////////////////////////////////////////////////////////// |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21202
diff
changeset
|
27 # include "config.h" |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 #endif |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
29 |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
30 #include <fstream> |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 #include <iomanip> |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
32 #include <iostream> |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 #include "dir-ops.h" |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 #include "file-ops.h" |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 #include "file-stat.h" |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
37 #include "lo-sysdep.h" |
25281
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
38 #include "oct-env.h" |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 #include "unwind-prot.h" |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 #include "url-transfer.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
|
41 #include "version.h" |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
43 #if defined (HAVE_CURL) |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
44 # include <curl/curl.h> |
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
45 # include <curl/curlver.h> |
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
46 # include <curl/easy.h> |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
47 #endif |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
48 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
49 namespace octave |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 { |
25438
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
51 base_url_transfer::base_url_transfer (void) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
52 : m_host_or_url (), m_valid (false), m_ftp (false), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
53 m_ascii_mode (false), m_ok (true), m_errmsg (), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
54 m_curr_istream (&std::cin), m_curr_ostream (&std::cout) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
55 { } |
25438
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
56 |
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
57 base_url_transfer::base_url_transfer (const std::string& host, |
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
58 const std::string& /* user_arg */, |
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
59 const std::string& /* passwd */, |
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
60 std::ostream& os) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
61 : m_host_or_url (host), m_valid (false), m_ftp (true), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
62 m_ascii_mode (false), m_ok (true), m_errmsg (), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
63 m_curr_istream (&std::cin), m_curr_ostream (&os) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
64 { } |
25438
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
65 |
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
66 base_url_transfer::base_url_transfer (const std::string& url, |
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
67 std::ostream& os) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
68 : m_host_or_url (url), m_valid (false), m_ftp (false), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
69 m_ascii_mode (false), m_ok (true), m_errmsg (), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
70 m_curr_istream (&std::cin), m_curr_ostream (&os) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
71 { } |
25438
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25281
diff
changeset
|
72 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
73 void |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
74 base_url_transfer::mget_directory (const std::string& directory, |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
75 const std::string& target) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
76 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23457
diff
changeset
|
77 std::string sep = sys::file_ops::dir_sep_str (); |
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23457
diff
changeset
|
78 sys::file_stat fs (directory); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
79 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
80 if (! fs || ! fs.is_dir ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
81 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
82 std::string msg; |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23457
diff
changeset
|
83 int status = sys::mkdir (directory, 0777, msg); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
84 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
85 if (status < 0) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
86 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
87 m_ok = false; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
88 m_errmsg = "__ftp_mget__: can not create directory '" |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
89 + target + sep + directory + "': " + msg; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
90 return; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
91 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
92 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
94 cwd (directory); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
95 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
96 if (good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
97 { |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
28857
diff
changeset
|
98 unwind_action_safe reset_path (&base_url_transfer::cwd, this, ".."); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
99 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
100 string_vector sv = list (); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
101 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
102 for (octave_idx_type i = 0; i < sv.numel (); i++) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
103 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
104 time_t ftime; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
105 bool fisdir; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
106 double fsize; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
107 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
108 get_fileinfo (sv(i), fsize, ftime, fisdir); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
109 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
110 if (fisdir) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
111 mget_directory (sv(i), target + directory + sep); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
112 else |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
113 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
114 std::string realfile = target + directory + sep + sv(i); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 |
28467
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
28223
diff
changeset
|
116 std::ofstream ofile = |
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
28223
diff
changeset
|
117 sys::ofstream (realfile.c_str (), |
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
28223
diff
changeset
|
118 std::ios::out | std::ios::binary); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
119 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
120 if (! ofile.is_open ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
121 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
122 m_ok = false; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
123 m_errmsg = "__ftp_mget__: unable to open file"; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
124 break; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
125 } |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
28857
diff
changeset
|
126 int(*unlink_fptr)(const std::string&) = sys::unlink; |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
28857
diff
changeset
|
127 unwind_action_safe delete_file (unlink_fptr, realfile); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
128 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
129 get (sv(i), ofile); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
130 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
131 ofile.close (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
132 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
133 if (good ()) |
29299
20092ae957da
Add discard() as an alias for set() for unwind_actions.
Rik <rik@octave.org>
parents:
29253
diff
changeset
|
134 delete_file.discard (); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
135 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
136 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
137 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
138 break; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
139 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
140 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
141 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
142 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
143 string_vector |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
144 base_url_transfer::mput_directory (const std::string& base, |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
145 const std::string& directory) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
146 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
147 string_vector file_list; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
148 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
149 std::string realdir |
21885
0806871e3e1e
maint: Prefer is_empty() rather than "length () == 0".
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
150 = (base.empty () |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23457
diff
changeset
|
151 ? directory : base + sys::file_ops::dir_sep_str () + directory); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
152 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
153 mkdir (directory); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
154 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
155 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
156 return file_list; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
157 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
158 cwd (directory); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
159 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
160 if (good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
161 { |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
28857
diff
changeset
|
162 unwind_action_safe reset_path (&base_url_transfer::cwd, this, ".."); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
163 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
164 string_vector files; |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
165 std::string msg; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
166 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
167 if (sys::get_dirlist (realdir, files, msg)) |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
168 for (octave_idx_type i = 0; i < files.numel (); i++) |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
169 { |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
170 std::string file = files (i); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
171 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
172 if (file == "." || file == "..") |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
173 continue; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
174 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
175 std::string realfile |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
176 = realdir + sys::file_ops::dir_sep_str () + file; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
177 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
178 sys::file_stat fs (realfile); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
179 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
180 if (! fs.exists ()) |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
181 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
182 m_ok = false; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
183 m_errmsg = "__ftp__mput: file '" + realfile |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
184 + "' does not exist"; |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
185 break; |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
186 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
187 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
188 if (fs.is_dir ()) |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
189 { |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
190 file_list.append (mput_directory (realdir, file)); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
191 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
192 if (! good ()) |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
193 break; |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
194 } |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
195 else |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
196 { |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
197 // FIXME: Does ascii mode need to be flagged here? |
28467
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
28223
diff
changeset
|
198 std::ifstream ifile = |
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
28223
diff
changeset
|
199 sys::ifstream (realfile.c_str (), |
159b6a1eb408
Use wide character overload to open file streams on Windows.
Markus Mützel <markus.muetzel@gmx.de>
parents:
28223
diff
changeset
|
200 std::ios::in | std::ios::binary); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
201 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
202 if (! ifile.is_open ()) |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
203 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
204 m_ok = false; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
205 m_errmsg = "__ftp_mput__: unable to open file '" |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
206 + realfile + "'"; |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
207 break; |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
208 } |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
209 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
210 put (file, ifile); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
211 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
212 ifile.close (); |
17597
e5932e528721
* url-transfer.cc (base_url_transfer::mput_directory): Return file list.
John W. Eaton <jwe@octave.org>
parents:
17596
diff
changeset
|
213 |
25516
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
214 if (! good ()) |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
215 break; |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
216 |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
217 file_list.append (realfile); |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
218 } |
8945a6a6c0eb
Add Unicode support for getting directory listing in Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25438
diff
changeset
|
219 } |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
220 else |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
221 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
222 m_ok = false; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
223 m_errmsg = "__ftp_mput__: can not read the directory '" |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
224 + realdir + "'"; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
225 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
226 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
227 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
228 return file_list; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
229 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
231 #if defined (HAVE_CURL) |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
232 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
233 static int |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
234 write_data (void *buffer, std::size_t size, std::size_t nmemb, void *streamp) |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
235 { |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
236 std::ostream& stream = *(static_cast<std::ostream *> (streamp)); |
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
237 stream.write (static_cast<const char *> (buffer), size*nmemb); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
238 return (stream.fail () ? 0 : size * nmemb); |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
239 } |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
240 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
241 static int |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
242 read_data (void *buffer, std::size_t size, std::size_t nmemb, void *streamp) |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
243 { |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
244 std::istream& stream = *(static_cast<std::istream *> (streamp)); |
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
245 stream.read (static_cast<char *> (buffer), size*nmemb); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
246 if (stream.eof ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
247 return stream.gcount (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
248 else |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
249 return (stream.fail () ? 0 : size * nmemb); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
250 } |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
251 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
252 static std::size_t |
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
253 throw_away (void *, std::size_t size, std::size_t nmemb, void *) |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
254 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
255 return static_cast<std::size_t> (size * nmemb); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
256 } |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
257 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
258 // I'd love to rewrite this as a private method of the url_transfer |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
259 // class, but you can't pass the va_list from the wrapper SETOPT to |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
260 // the curl_easy_setopt function. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
261 #define SETOPT(option, parameter) \ |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
262 do \ |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
263 { \ |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
264 CURLcode res = curl_easy_setopt (m_curl, option, parameter); \ |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
265 if (res != CURLE_OK) \ |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
266 { \ |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
267 m_ok = false; \ |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
268 m_errmsg = curl_easy_strerror (res); \ |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
269 return; \ |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
270 } \ |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
271 } \ |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
272 while (0) |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
273 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
274 // Same as above but with a return value. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
275 #define SETOPTR(option, parameter) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
276 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
277 { \ |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
278 CURLcode res = curl_easy_setopt (m_curl, option, parameter); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
279 if (res != CURLE_OK) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
280 { \ |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
281 m_ok = false; \ |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
282 m_errmsg = curl_easy_strerror (res); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
283 return retval; \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
284 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
285 } \ |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
286 while (0) |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
287 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
288 class curl_transfer : public base_url_transfer |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17595
diff
changeset
|
289 { |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
290 public: |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
291 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
292 curl_transfer (void) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
293 : base_url_transfer (), m_curl (curl_easy_init ()), m_errnum (), m_url (), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
294 m_userpwd () |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
295 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
296 if (m_curl) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
297 m_valid = true; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
298 else |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
299 m_errmsg = "can not create curl object"; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
300 } |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17595
diff
changeset
|
301 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
302 curl_transfer (const std::string& host, const std::string& user_arg, |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
303 const std::string& passwd, std::ostream& os) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
304 : base_url_transfer (host, user_arg, passwd, os), |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
305 m_curl (curl_easy_init ()), m_errnum (), m_url (), m_userpwd () |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
306 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
307 if (m_curl) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
308 m_valid = true; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
309 else |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
310 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
311 m_errmsg = "can not create curl object"; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
312 return; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
313 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
314 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
315 init (user_arg, passwd, std::cin, os); |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17595
diff
changeset
|
316 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
317 m_url = "ftp://" + host; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
318 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
319 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
320 // Set up the link, with no transfer. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
321 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
322 } |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17595
diff
changeset
|
323 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
324 curl_transfer (const std::string& url_str, std::ostream& os) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
325 : base_url_transfer (url_str, os), m_curl (curl_easy_init ()), |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
326 m_errnum (), m_url (), m_userpwd () |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
327 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
328 if (m_curl) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
329 m_valid = true; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
330 else |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
331 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
332 m_errmsg = "can not create curl object"; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
333 return; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
334 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
335 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
336 init ("", "", std::cin, os); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
337 |
25281
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
338 std::string cainfo = sys::env::getenv ("CURLOPT_CAINFO"); |
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
339 if (! cainfo.empty ()) |
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
340 SETOPT (CURLOPT_CAINFO, cainfo.c_str ()); |
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
341 |
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
342 std::string capath = sys::env::getenv ("CURLOPT_CAPATH"); |
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
343 if (! capath.empty ()) |
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
344 SETOPT (CURLOPT_CAPATH, capath.c_str ()); |
35115cc6183b
allow users to set path to CA certificates for cURL
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
345 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
346 SETOPT (CURLOPT_NOBODY, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
347 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
348 // Restore the default HTTP request method to GET after setting |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
349 // NOBODY to true (in the init method) and back to false (above). |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
350 // This is needed for backward compatibility with versions of |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
351 // libcurl < 7.18.2. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
352 SETOPT (CURLOPT_HTTPGET, 1); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
353 } |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17595
diff
changeset
|
354 |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
355 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
356 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
357 curl_transfer (const curl_transfer&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
358 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
359 curl_transfer& operator = (const curl_transfer&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
360 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
361 ~curl_transfer (void) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
362 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
363 if (m_curl) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
364 curl_easy_cleanup (m_curl); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
365 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
366 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
367 void perform (void) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
368 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
369 m_errnum = curl_easy_perform (m_curl); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
370 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
371 if (m_errnum != CURLE_OK) |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
372 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
373 m_ok = false; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
374 m_errmsg = curl_easy_strerror (m_errnum); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
375 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
376 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
377 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
378 std::string lasterror (void) const |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
379 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
380 return std::string (curl_easy_strerror (m_errnum)); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
381 } |
17596
43b9181340fb
separate object creation from http actions in url_transfer class
John W. Eaton <jwe@octave.org>
parents:
17595
diff
changeset
|
382 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
383 std::ostream& set_ostream (std::ostream& os) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
384 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
385 std::ostream& retval = *m_curr_ostream; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
386 m_curr_ostream = &os; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
387 SETOPTR (CURLOPT_WRITEDATA, static_cast<void *> (m_curr_ostream)); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
388 return retval; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
389 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
390 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
391 std::istream& set_istream (std::istream& is) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
392 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
393 std::istream& retval = *m_curr_istream; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
394 m_curr_istream = &is; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
395 SETOPTR (CURLOPT_READDATA, static_cast<void *> (m_curr_istream)); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
396 return retval; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
397 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
398 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
399 void ascii (void) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
400 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
401 m_ascii_mode = true; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
402 SETOPT (CURLOPT_TRANSFERTEXT, 1); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
403 } |
17601
9e507e30c9ea
keep a copy of user+password data for older cURL libraries
John W. Eaton <jwe@octave.org>
parents:
17598
diff
changeset
|
404 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
405 void binary (void) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
406 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
407 m_ascii_mode = false; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
408 SETOPT (CURLOPT_TRANSFERTEXT, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
409 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
410 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
411 void cwd (const std::string& path) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
412 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
413 ftp_file_or_dir_action (path, "cwd"); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
414 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
415 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
416 void del (const std::string& file) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
417 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
418 ftp_file_or_dir_action (file, "dele"); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
419 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
420 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
421 void rmdir (const std::string& path) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
422 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
423 ftp_file_or_dir_action (path, "rmd"); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
424 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
425 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
426 void mkdir (const std::string& path) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
427 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
428 ftp_file_or_dir_action (path, "mkd"); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
429 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
430 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
431 void rename (const std::string& oldname, const std::string& newname) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
432 { |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23447
diff
changeset
|
433 struct curl_slist *slist = nullptr; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
434 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
435 unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); }); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
436 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
437 std::string cmd = "rnfr " + oldname; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
438 slist = curl_slist_append (slist, cmd.c_str ()); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
439 cmd = "rnto " + newname; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
440 slist = curl_slist_append (slist, cmd.c_str ()); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
441 SETOPT (CURLOPT_POSTQUOTE, slist); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
442 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
443 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
444 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
445 return; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
446 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
447 SETOPT (CURLOPT_POSTQUOTE, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
448 } |
17601
9e507e30c9ea
keep a copy of user+password data for older cURL libraries
John W. Eaton <jwe@octave.org>
parents:
17598
diff
changeset
|
449 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
450 void put (const std::string& file, std::istream& is) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
451 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
452 m_url = "ftp://" + m_host_or_url + '/' + file; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
453 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
454 SETOPT (CURLOPT_UPLOAD, 1); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
455 SETOPT (CURLOPT_NOBODY, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
456 std::istream& old_is = set_istream (is); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
457 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
458 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
459 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
460 return; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
461 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
462 set_istream (old_is); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
463 SETOPT (CURLOPT_NOBODY, 1); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
464 SETOPT (CURLOPT_UPLOAD, 0); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
465 m_url = "ftp://" + m_host_or_url; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
466 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
467 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
468 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
469 void get (const std::string& file, std::ostream& os) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
470 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
471 m_url = "ftp://" + m_host_or_url + '/' + file; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
472 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
473 SETOPT (CURLOPT_NOBODY, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
474 std::ostream& old_os = set_ostream (os); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
475 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
476 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
477 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
478 return; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
479 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
480 set_ostream (old_os); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
481 SETOPT (CURLOPT_NOBODY, 1); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
482 m_url = "ftp://" + m_host_or_url; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
483 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
484 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
485 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
486 void dir (void) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
487 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
488 m_url = "ftp://" + m_host_or_url + '/'; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
489 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
490 SETOPT (CURLOPT_NOBODY, 0); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
491 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
492 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
493 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
494 return; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
495 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
496 SETOPT (CURLOPT_NOBODY, 1); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
497 m_url = "ftp://" + m_host_or_url; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
498 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
499 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
500 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
501 string_vector list (void) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
502 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
503 string_vector retval; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
504 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
505 std::ostringstream buf; |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
506 m_url = "ftp://" + m_host_or_url + '/'; |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
507 SETOPTR (CURLOPT_WRITEDATA, static_cast<void *> (&buf)); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
508 SETOPTR (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
509 SETOPTR (CURLOPT_DIRLISTONLY, 1); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
510 SETOPTR (CURLOPT_NOBODY, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
511 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
512 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
513 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
514 return retval; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
515 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
516 SETOPTR (CURLOPT_NOBODY, 1); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
517 m_url = "ftp://" + m_host_or_url; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
518 SETOPTR (CURLOPT_WRITEDATA, static_cast<void *> (m_curr_ostream)); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
519 SETOPTR (CURLOPT_DIRLISTONLY, 0); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
520 SETOPTR (CURLOPT_URL, m_url.c_str ()); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
521 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
522 // Count number of directory entries |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
523 std::string str = buf.str (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
524 octave_idx_type n = 0; |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
525 std::size_t pos = 0; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
526 while (true) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
527 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
528 pos = str.find_first_of ('\n', pos); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
529 if (pos == std::string::npos) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
530 break; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
531 pos++; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
532 n++; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
533 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
534 retval.resize (n); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
535 pos = 0; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
536 for (octave_idx_type i = 0; i < n; i++) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
537 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
538 std::size_t newpos = str.find_first_of ('\n', pos); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
539 if (newpos == std::string::npos) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
540 break; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
541 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
542 retval(i) = str.substr(pos, newpos - pos); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
543 pos = newpos + 1; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
544 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
545 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
546 return retval; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
547 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
548 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
549 void get_fileinfo (const std::string& filename, double& filesize, |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
550 time_t& filetime, bool& fileisdir) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
551 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
552 std::string path = pwd (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
553 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
554 m_url = "ftp://" + m_host_or_url + '/' + path + '/' + filename; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
555 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
556 SETOPT (CURLOPT_FILETIME, 1); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
557 SETOPT (CURLOPT_HEADERFUNCTION, throw_away); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
558 SETOPT (CURLOPT_WRITEFUNCTION, throw_away); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
559 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
560 // FIXME |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
561 // The MDTM command fails for a directory on the servers I tested |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21744
diff
changeset
|
562 // so this is a means of testing for directories. It also means |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
563 // I can't get the date of directories! |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
564 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
565 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
566 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
567 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
568 fileisdir = true; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
569 filetime = -1; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
570 filesize = 0; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
571 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
572 return; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
573 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
574 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
575 fileisdir = false; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
576 time_t ft; |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
577 curl_easy_getinfo (m_curl, CURLINFO_FILETIME, &ft); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
578 filetime = ft; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
579 double fs; |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
580 curl_easy_getinfo (m_curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &fs); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
581 filesize = fs; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
582 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
583 SETOPT (CURLOPT_WRITEFUNCTION, write_data); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
584 SETOPT (CURLOPT_HEADERFUNCTION, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
585 SETOPT (CURLOPT_FILETIME, 0); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
586 m_url = "ftp://" + m_host_or_url; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
587 SETOPT (CURLOPT_URL, m_url.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
588 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
589 // The MDTM command seems to reset the path to the root with the |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21744
diff
changeset
|
590 // servers I tested with, so cd again into the correct path. Make |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
591 // the path absolute so that this will work even with servers that |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
592 // don't end up in the root after an MDTM command. |
23807
336f89b6208b
Use character literals 'c' rather than string literals "c" when possible.
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
593 cwd ('/' + path); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
594 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
595 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
596 std::string pwd (void) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
597 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
598 std::string retval; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
599 |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23447
diff
changeset
|
600 struct curl_slist *slist = nullptr; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
601 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
602 unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); }); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
603 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
604 slist = curl_slist_append (slist, "pwd"); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
605 SETOPTR (CURLOPT_POSTQUOTE, slist); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
606 SETOPTR (CURLOPT_HEADERFUNCTION, write_data); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
607 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
608 std::ostringstream buf; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
609 SETOPTR (CURLOPT_WRITEHEADER, static_cast<void *>(&buf)); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
610 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
611 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
612 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
613 return retval; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
614 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
615 retval = buf.str (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
616 |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
617 // Can I assume that the path is always in "" on the last line |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
618 std::size_t pos2 = retval.rfind ('"'); |
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
619 std::size_t pos1 = retval.rfind ('"', pos2 - 1); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
620 retval = retval.substr (pos1 + 1, pos2 - pos1 - 1); |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
621 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
622 SETOPTR (CURLOPT_HEADERFUNCTION, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
623 SETOPTR (CURLOPT_WRITEHEADER, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
624 SETOPTR (CURLOPT_POSTQUOTE, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
625 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
626 return retval; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
627 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
628 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
629 void http_get (const Array<std::string>& param) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
630 { |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
631 http_action (param, "get"); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
632 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
633 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
634 void http_post (const Array<std::string>& param) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
635 { |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
636 http_action (param, "post"); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
637 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
638 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
639 void http_action (const Array<std::string>& param, const std::string& action) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
640 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
641 m_url = m_host_or_url; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
642 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
643 std::string query_string; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
644 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
645 query_string = form_query_string (param); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
646 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
647 if (action.empty () || action == "get") |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
648 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
649 if (! query_string.empty ()) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
650 m_url += '?' + query_string; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
651 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
652 SETOPT (CURLOPT_URL, m_url.c_str ()); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
653 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
654 else if (action == "post" || action == "put" || action == "delete") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
655 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
656 SETOPT (CURLOPT_POSTFIELDS, query_string.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
|
657 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
658 if (action == "put") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
659 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
660 SETOPT (CURLOPT_CUSTOMREQUEST, "PUT"); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
661 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
662 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
663 if (action == "delete") |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
664 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
665 SETOPT (CURLOPT_CUSTOMREQUEST, "DELETE"); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
666 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
667 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
668 SETOPT (CURLOPT_URL, m_url.c_str ()); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
669 } |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
670 else |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
671 { |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
672 m_ok = false; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
673 m_errmsg = "curl_transfer: unknown http action"; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
674 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
675 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
676 if (m_ok) |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
677 perform (); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
678 } |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
679 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
680 void cookie_jar (const std::string& filename) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
681 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
682 SETOPT (CURLOPT_COOKIEJAR, filename.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
|
683 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
684 SETOPT (CURLOPT_COOKIEFILE, filename.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
|
685 } |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
686 |
27929
265b386f8b20
maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
687 // Sets the header fields in a transfer. Input should be in the form |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
688 // of an array of strings with pairs of keys and values together |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
689 void set_header_fields (const Array<std::string>& param) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
690 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
691 struct curl_slist *slist = nullptr; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
692 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
693 unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); }); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
694 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
695 if (param.numel () >= 2) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
696 { |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
697 for (int i = 0; i < param.numel (); i += 2) |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
698 { |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
699 std::string header = param(i) + ": " + param(i+1); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
700 |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
701 slist = curl_slist_append (slist, header.c_str ()); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
702 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
703 |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
704 SETOPT (CURLOPT_HTTPHEADER, slist); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
705 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
706 } |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
707 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
708 // Sets and sends the form data associated with a transfer. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
709 // Input should be an array of strings with each pair of strings |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
710 // corresponding to the fieldname and it's value. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
711 // To attach a file, you should use 'file' as the fieldname with the |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
712 // path of the file as its value. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
713 void form_data_post (const Array<std::string>& param) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
714 { |
28824
a98fd0657e35
Replace unwind_protect with more efficient constructs in liboctave (bug #59192).
Rik <rik@octave.org>
parents:
28467
diff
changeset
|
715 struct curl_httppost *post = nullptr; |
a98fd0657e35
Replace unwind_protect with more efficient constructs in liboctave (bug #59192).
Rik <rik@octave.org>
parents:
28467
diff
changeset
|
716 struct curl_httppost *last = nullptr; |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
717 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
718 SETOPT (CURLOPT_URL, m_host_or_url.c_str ()); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
719 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
720 unwind_action cleanup_httppost ([=] () { curl_formfree (post); }); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
721 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
722 if (param.numel () >= 2) |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
723 { |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
724 for (int i = 0; i < param.numel (); i += 2) |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
725 { |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
726 std::string name = param(i); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
727 std::string data = param(i+1); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
728 |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
729 if (name == "file") |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
730 curl_formadd (&post, &last, CURLFORM_COPYNAME, name.c_str (), |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
731 CURLFORM_FILE, data.c_str (), CURLFORM_END); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
732 else |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
733 curl_formadd(&post, &last, CURLFORM_COPYNAME, name.c_str (), |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
734 CURLFORM_COPYCONTENTS, data.c_str (), CURLFORM_END); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
735 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
736 |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
737 SETOPT (CURLOPT_HTTPPOST, post); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
738 } |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
739 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
740 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
741 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
742 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
743 // Sets the various options specified by weboptions object. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
744 void set_weboptions (const struct weboptions& options) |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
745 { |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
746 // Remove this after completing fixmes. |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
747 std::string temp = ""; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
748 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
749 set_header_fields (options.HeaderFields); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
750 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
751 SETOPT (CURLOPT_TIMEOUT, options.Timeout); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
752 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
753 if (! options.UserAgent.empty ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
754 SETOPT (CURLOPT_USERAGENT, options.UserAgent.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
|
755 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
756 if (! options.Username.empty ()) |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
757 { |
27933
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
758 if (! options.Password.empty ()) |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
759 { |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
760 std::string tmp = options.Username + ":" + options.Password; |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
761 SETOPT (CURLOPT_USERPWD, tmp.c_str ()); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
762 } |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
763 else |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
764 { |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
765 std::string tmp = options.Username + ":"; |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
766 SETOPT (CURLOPT_USERPWD, tmp.c_str ()); |
863ae57eee69
maint: Use Octave coding conventions in liboctave/
Rik <rik@octave.org>
parents:
27929
diff
changeset
|
767 } |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
768 } |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
769 |
27929
265b386f8b20
maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
770 // Unimplemented. Only for MATLAB compatibility. |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
771 if (! options.ContentReader.empty ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
772 temp = options.ContentReader; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
773 |
27929
265b386f8b20
maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
774 // Unimplemented. Only for MATLAB compatibility. |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
775 if (! options.ArrayFormat.empty ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
776 temp = options.ArrayFormat; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
777 |
27929
265b386f8b20
maint: Use two spaces between sentences in code comments.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
778 // Unimplemented. Only for MATLAB compatibility. |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
779 if (! options.CertificateFilename.empty ()) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
780 temp = options.CertificateFilename; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
781 } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
782 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
783 private: |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
784 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
785 // Pointer to cURL object. |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
786 CURL *m_curl; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
787 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
788 // cURL error code. |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
789 CURLcode m_errnum; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
790 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
791 // The cURL library changed the curl_easy_setopt call to make an |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21744
diff
changeset
|
792 // internal copy of string parameters in version 7.17.0. Prior |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
793 // versions only held a pointer to a string provided by the caller |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
794 // that must persist for the lifetime of the CURL handle. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
795 // |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
796 // The associated API did not change, only the behavior of the library |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
797 // implementing the function call. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
798 // |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
799 // To be compatible with any version of cURL, the caller must keep a |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
800 // copy of all string parameters associated with a CURL handle until |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21744
diff
changeset
|
801 // the handle is released. The curl_handle::curl_handle_rep class |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
802 // contains the pointer to the CURL handle and so is the best |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
803 // candidate for storing the strings as well. (bug #36717) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
804 std::string m_url; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
805 std::string m_userpwd; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
806 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
807 void init (const std::string& user, const std::string& passwd, |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
808 std::istream& is, std::ostream& os) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
809 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
810 // No data transfer by default |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
811 SETOPT (CURLOPT_NOBODY, 1); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
812 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
813 // Set the username and password |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
814 m_userpwd = user; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
815 if (! passwd.empty ()) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
816 m_userpwd += ':' + passwd; |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
817 if (! m_userpwd.empty ()) |
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
818 SETOPT (CURLOPT_USERPWD, m_userpwd.c_str ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
819 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
820 // Define our callback to get called when there's data to be written. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
821 SETOPT (CURLOPT_WRITEFUNCTION, write_data); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
822 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
823 // Set a pointer to our struct to pass to the callback. |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
824 SETOPT (CURLOPT_WRITEDATA, static_cast<void *> (&os)); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
825 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
826 // Define our callback to get called when there's data to be read |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
827 SETOPT (CURLOPT_READFUNCTION, read_data); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
828 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
829 // Set a pointer to our struct to pass to the callback. |
23447
db1fdf4384dd
maint: Use convention "static_cast<void *>" for casting of pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
830 SETOPT (CURLOPT_READDATA, static_cast<void *> (&is)); |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
831 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
832 // Follow redirects. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
833 SETOPT (CURLOPT_FOLLOWLOCATION, true); |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
834 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
835 // Don't use EPSV since connecting to sites that don't support it |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
836 // will hang for some time (3 minutes?) before moving on to try PASV |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
837 // instead. |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
838 SETOPT (CURLOPT_FTP_USE_EPSV, false); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
839 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
840 // Set the user agent for the curl request |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
841 // Needed by mediaWiki API. |
30394
f3f3e3793fb5
maint: style check C++ files in liboctave/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29655
diff
changeset
|
842 curl_version_info_data *data = curl_version_info(CURLVERSION_NOW); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
843 const char *lib_ver = data->version; |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27174
diff
changeset
|
844 std::string user_agent |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27174
diff
changeset
|
845 ("GNU Octave/" |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27174
diff
changeset
|
846 + std::string (OCTAVE_VERSION) |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27174
diff
changeset
|
847 + " (https://www.gnu.org/software/octave/ ; help@octave.org) libcurl/" |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27174
diff
changeset
|
848 + std::string (lib_ver)); |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
849 |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
850 SETOPT (CURLOPT_USERAGENT, user_agent.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
|
851 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
852 SETOPT (CURLOPT_NOPROGRESS, true); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
853 SETOPT (CURLOPT_FAILONERROR, true); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
854 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
855 SETOPT (CURLOPT_POSTQUOTE, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
856 SETOPT (CURLOPT_QUOTE, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
857 } |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
858 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
859 std::string form_query_string (const Array<std::string>& param) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
860 { |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
861 std::ostringstream query; |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
862 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
863 if (param.numel () >= 2) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
864 for (int i = 0; i < param.numel (); i += 2) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
865 { |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
866 std::string name = param(i); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
867 std::string text = param(i+1); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
868 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
869 // Encode strings. |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
870 char *enc_name = curl_easy_escape (m_curl, name.c_str (), |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
871 name.length ()); |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
872 char *enc_text = curl_easy_escape (m_curl, text.c_str (), |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
873 text.length ()); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
874 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
875 query << enc_name << '=' << enc_text; |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
876 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
877 curl_free (enc_name); |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
878 curl_free (enc_text); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
879 |
27048
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
880 if (i < param.numel ()-2) |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
881 query << '&'; |
159402e52cfa
New implementation of RESTful web services as part of GSoC 2018 (patch #9795).
Sahil Yadav <yadavsahil5198@gmail.com>
parents:
26376
diff
changeset
|
882 } |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
883 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
884 query.flush (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
885 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
886 return query.str (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
887 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
888 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
889 void ftp_file_or_dir_action (const std::string& file_or_dir, |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
890 const std::string& action) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
891 { |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23447
diff
changeset
|
892 struct curl_slist *slist = nullptr; |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
893 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
894 unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); }); |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
895 |
23807
336f89b6208b
Use character literals 'c' rather than string literals "c" when possible.
Rik <rik@octave.org>
parents:
23696
diff
changeset
|
896 std::string cmd = action + ' ' + file_or_dir; |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
897 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
898 slist = curl_slist_append (slist, cmd.c_str ()); |
17595
4b65355a31f2
avoid some code duplication in url-transfer ftp methods
John W. Eaton <jwe@octave.org>
parents:
17563
diff
changeset
|
899 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
900 SETOPT (CURLOPT_POSTQUOTE, slist); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
901 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
902 perform (); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
903 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
904 if (! good ()) |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
905 return; |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
906 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
907 SETOPT (CURLOPT_POSTQUOTE, 0); |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
908 } |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
909 }; |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
910 |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
911 #undef SETOPT |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
912 |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
913 #endif |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
914 |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
915 #if defined (HAVE_CURL) |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
916 # define REP_CLASS curl_transfer |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
917 #else |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
20955
diff
changeset
|
918 # define REP_CLASS base_url_transfer |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
919 #endif |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
920 |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
921 url_transfer::url_transfer (void) : m_rep (new REP_CLASS ()) |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
922 { } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
923 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
924 url_transfer::url_transfer (const std::string& host, const std::string& user, |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
925 const std::string& passwd, std::ostream& os) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
926 : m_rep (new REP_CLASS (host, user, passwd, os)) |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
927 { } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
928 |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
929 url_transfer::url_transfer (const std::string& url, std::ostream& os) |
27174
b42350f18afb
style fixes for url-transfer classes
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
930 : m_rep (new REP_CLASS (url, os)) |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
931 { } |
17555
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
932 |
0946b0e06544
move url_transfer classes to liboctave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
933 #undef REP_CLASS |
21744
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
934 |
e1be0b36fbed
use namespace for url_transfer class
John W. Eaton <jwe@octave.org>
parents:
21743
diff
changeset
|
935 } |