diff --git a/liboctave/util/url-transfer.cc b/liboctave/util/url-transfer.cc --- a/liboctave/util/url-transfer.cc +++ b/liboctave/util/url-transfer.cc @@ -45,6 +45,28 @@ along with Octave; see the file COPYING. # include #endif +static std::string +default_user_agent (void) +{ + return "Octave/4.1.0+ (x86_64-pc-linux-gnu)"; +} + +base_url_transfer::base_url_transfer (const std::string& host, + const std::string& /* user_arg */, + const std::string& /* passwd */, + std::ostream& os) + : count (1), host_or_url (host), user_agent (default_user_agent ()), + valid (false), ftp (true), ascii_mode (false), ok (true), errmsg (), + curr_istream (&std::cin), curr_ostream (&os) +{ } + +base_url_transfer::base_url_transfer (const std::string& url, + std::ostream& os) + : count (1), host_or_url (url), user_agent (default_user_agent ()), + valid (false), ftp (false), ascii_mode (false), ok (true), errmsg (), + curr_istream (&std::cin), curr_ostream (&os) +{ } + void base_url_transfer::delete_file (const std::string& file) { @@ -613,6 +635,7 @@ public: if (! query_string.empty ()) url += "?" + query_string; + SETOPT (CURLOPT_USERAGENT, user_agent.c_str ()); SETOPT (CURLOPT_URL, url.c_str ()); perform (); @@ -620,6 +643,7 @@ public: void http_post (const Array& param) { + SETOPT (CURLOPT_USERAGENT, user_agent.c_str ()); SETOPT (CURLOPT_URL, host_or_url.c_str ()); std::string query_string = form_query_string (param); diff --git a/liboctave/util/url-transfer.h b/liboctave/util/url-transfer.h --- a/liboctave/util/url-transfer.h +++ b/liboctave/util/url-transfer.h @@ -59,18 +59,16 @@ public: base_url_transfer (const std::string& host, const std::string& /* user_arg */, const std::string& /* passwd */, - std::ostream& os) - : count (1), host_or_url (host), valid (false), ftp (true), - ascii_mode (false), ok (true), errmsg (), curr_istream (&std::cin), - curr_ostream (&os) { } + std::ostream& os); - base_url_transfer (const std::string& url, std::ostream& os) - : count (1), host_or_url (url), valid (false), ftp (false), - ascii_mode (false), ok (true), errmsg (), - curr_istream (&std::cin), curr_ostream (&os) { } + base_url_transfer (const std::string& url, std::ostream& os); virtual ~base_url_transfer (void) { } + std::string get_user_agent (void) const { return user_agent; } + + void set_user_agent (const std::string& ua) { user_agent = ua; } + bool is_valid (void) const { return valid; } bool good (void) const { return valid && ok; } @@ -143,8 +141,12 @@ protected: // Reference count. octave_refcount count; - // Host for ftp transfers or full URL for http requests. + // Host for ftp transfers or full URL for HTTP requests. std::string host_or_url; + + // User Agent string for HTTP requests. + std::string user_agent; + bool valid; bool ftp; bool ascii_mode; @@ -200,6 +202,10 @@ public: return *this; } + std::string get_user_agent (void) const { return rep->get_user_agent (); } + + void set_user_agent (const std::string& ua) { rep->set_user_agent (ua); } + bool is_valid (void) const { return rep->is_valid (); } bool good (void) const { return rep->good (); }