From e034dbc2997f130437da26185674c6238f02c15e Mon Sep 17 00:00:00 2001 From: tastytea Date: Fri, 22 Feb 2019 12:03:28 +0100 Subject: [PATCH] Replaced return codes in API::http. --- README.md | 17 +++++++---------- src/http.cpp | 41 +++++++++++++++++++---------------------- src/mastodon-cpp.cpp | 3 +++ src/mastodon-cpp.hpp | 12 +++++------- 4 files changed, 34 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 6dd91c0..10925da 100644 --- a/README.md +++ b/README.md @@ -79,19 +79,16 @@ g++ -std=c++14 -lmastodon-cpp example.cpp ## Error codes -mastodon-cpp will never use error codes below 11, except 0. - | Code | Explanation | | --------: |:---------------------------------| | 0 | No error | -| 11 | Invalid call | -| 12 | Not implemented | -| 13 | URL changed (HTTP 301 or 308) | -| 14 | Aborted by user | -| 15 | Network error (curlpp exception) | -| 16 | Timeout | -| 100 - 999 | HTTP status codes | -| 65535 | Unknown error | +| 22 | Invalid argument | +| 78 | URL changed (HTTP 301 or 308) | +| 110 | Connection timed out | +| 111 | Connection refused | +| 132 | curlpp runtime error | +| 133 | curlpp logic error | +| 255 | Unknown error | If you use a debug build, you get more verbose error messages. diff --git a/src/http.cpp b/src/http.cpp index cd82f47..71f927d 100644 --- a/src/http.cpp +++ b/src/http.cpp @@ -44,21 +44,18 @@ API::http::~http() curlpp::terminate(); } -uint16_t API::http::request(const method &meth, - const string &path, - string &answer) +return_call API::http::request(const method &meth, const string &path) { - return request(meth, path, curlpp::Forms(), answer); + return request(meth, path, curlpp::Forms()); } -uint16_t API::http::request(const method &meth, - const string &path, - const curlpp::Forms &formdata, - string &answer) +return_call API::http::request(const method &meth, + const string &path, + const curlpp::Forms &formdata) { using namespace std::placeholders; // _1, _2, _3 - uint16_t ret = 0; + string answer; ttdebug << "Path is: " << path << '\n'; try @@ -131,31 +128,31 @@ uint16_t API::http::request(const method &meth, answer.clear(); request.perform(); - ret = curlpp::infos::ResponseCode::get(request); - ttdebug << "Response code: " << ret << '\n'; + uint16_t http_code = curlpp::infos::ResponseCode::get(request); + ttdebug << "Response code: " << http_code << '\n'; // Work around "HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK" size_t pos = answer.find("\r\n\r\n", 25); _headers = answer.substr(0, pos); // Only return body answer = answer.substr(pos + 4); - if (ret == 200 || ret == 302 || ret == 307) + if (http_code == 200 || http_code == 302 || http_code == 307) { // OK or Found or Temporary Redirect - return 0; + return { 0, "", http_code, answer }; } - else if (ret == 301 || ret == 308) + else if (http_code == 301 || http_code == 308) { // Moved Permanently or Permanent Redirect // return new URL answer = curlpp::infos::EffectiveUrl::get(request); - return 13; + return { 78, "Remote address changed", http_code, answer }; } - else if (ret == 0) + else if (http_code == 0) { - return 0xffff; + return { 255, "Unknown error", http_code, answer }; } else { - return ret; + return { 111, "Connection refused", http_code, answer }; } } catch (curlpp::RuntimeError &e) @@ -166,12 +163,12 @@ uint16_t API::http::request(const method &meth, (what.compare(0, 19, "Failed writing body") == 0)) { ttdebug << "Request was cancelled by user\n"; - return 14; + return { 0, "Request was cancelled by user", 0, "" }; } else if (what.compare(what.size() - 20, 20, "Connection timed out") == 0) { ttdebug << "Timeout\n"; - return 16; + return { 110, "Connection timed out", 0, "" }; } if (parent.exceptions()) @@ -181,7 +178,7 @@ uint16_t API::http::request(const method &meth, else { ttdebug << "curlpp::RuntimeError: " << e.what() << std::endl; - return 15; + return { 132, e.what(), 0, "" }; } } catch (curlpp::LogicError &e) @@ -192,7 +189,7 @@ uint16_t API::http::request(const method &meth, } ttdebug << "curlpp::LogicError: " << e.what() << std::endl; - return 15; + return { 133, e.what(), 0, "" }; } } diff --git a/src/mastodon-cpp.cpp b/src/mastodon-cpp.cpp index a59c971..0bfa246 100644 --- a/src/mastodon-cpp.cpp +++ b/src/mastodon-cpp.cpp @@ -55,6 +55,9 @@ std::ostream &operator <<(std::ostream &out, const return_call &ret) return out; } +return_call::return_call() +{} + return_call::return_call(const uint8_t ec, const string &em, const uint16_t hec, const string &a) : http_error_code(hec) diff --git a/src/mastodon-cpp.hpp b/src/mastodon-cpp.hpp index 915692d..750e34e 100644 --- a/src/mastodon-cpp.hpp +++ b/src/mastodon-cpp.hpp @@ -62,6 +62,7 @@ namespace Mastodon friend std::ostream &operator <<(std::ostream &out, const return_call &ret); + return_call(); return_call(const uint8_t ec, const string &em, const uint16_t hec, const string &a); } return_call; @@ -116,9 +117,7 @@ public: explicit http(const API &api, const string &instance, const string &access_token); ~http(); - uint16_t request(const method &meth, - const string &path, - string &answer); + return_call request(const method &meth, const string &path); /*! * @brief HTTP Request. @@ -133,10 +132,9 @@ public: * * @since before 0.11.0 */ - uint16_t request(const method &meth, - const string &path, - const curlpp::Forms &formdata, - string &answer); + return_call request(const method &meth, + const string &path, + const curlpp::Forms &formdata); /*! * @brief Get all headers in a string