Changed error codes and introduced error constants.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
5ddea09924
commit
915c85e9e9
@ -9,7 +9,7 @@ endif()
|
||||
include(GNUInstallDirs)
|
||||
|
||||
project (mastodon-cpp
|
||||
VERSION 0.106.0
|
||||
VERSION 0.110.0
|
||||
LANGUAGES CXX)
|
||||
|
||||
# DESCRIPTION was introduced in version 3.9.
|
||||
|
14
README.adoc
14
README.adoc
@ -105,13 +105,13 @@ Not included in this list are entities.
|
||||
|===================================================
|
||||
| Code | Explanation
|
||||
| 0 | No error
|
||||
| 22 | Invalid argument
|
||||
| 78 | URL changed (HTTP 301 or 308)
|
||||
| 110 | Connection timed out
|
||||
| 111 | Connection refused (check http_error_code)
|
||||
| 113 | No route to host / Could not resolve host
|
||||
| 150 | Encryption error (TODO: CHANGEME!)
|
||||
| 255 | Unknown error
|
||||
| 1 | Invalid argument
|
||||
| 10 | URL changed (HTTP 301 or 308)
|
||||
| 11 | Connection timed out
|
||||
| 12 | Connection refused (check http_error_code)
|
||||
| 13 | No route to host / Could not resolve host
|
||||
| 14 | Encryption error
|
||||
| 127 | Unknown error
|
||||
|===================================================
|
||||
|
||||
If you use a debug build, you get more verbose error messages.
|
||||
|
@ -78,7 +78,7 @@ return_call API::del(const Mastodon::API::v1 &call,
|
||||
default:
|
||||
{
|
||||
ttdebug << "ERROR: Invalid argument.\n";
|
||||
return { 22, "Invalid argument", 0, "" };
|
||||
return { error::INVALID_ARGUMENT, "Invalid argument", 0, "" };
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -192,7 +192,7 @@ const return_call API::get(const Mastodon::API::v1 &call,
|
||||
else
|
||||
{
|
||||
ttdebug << "ERROR: Invalid argument.\n";
|
||||
return { 22, "Invalid argument", 0, "" };
|
||||
return { error::INVALID_ARGUMENT, "Invalid argument", 0, "" };
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -239,7 +239,7 @@ const return_call API::get(const Mastodon::API::v1 &call,
|
||||
default:
|
||||
{
|
||||
ttdebug << "ERROR: Invalid argument.\n";
|
||||
return { 22, "Invalid argument", 0, "" };
|
||||
return { error::INVALID_ARGUMENT, "Invalid argument", 0, "" };
|
||||
}
|
||||
}
|
||||
|
||||
@ -276,7 +276,7 @@ const return_call API::get(const Mastodon::API::v2 &call,
|
||||
default:
|
||||
{
|
||||
ttdebug << "ERROR: Invalid argument.\n";
|
||||
return { 22, "Invalid argument", 0, "" };
|
||||
return { error::INVALID_ARGUMENT, "Invalid argument", 0, "" };
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
using namespace Mastodon;
|
||||
using std::cerr;
|
||||
using std::to_string;
|
||||
|
||||
void API::get_stream(const Mastodon::API::v1 &call,
|
||||
const parameters ¶ms,
|
||||
@ -57,8 +58,10 @@ void API::get_stream(const Mastodon::API::v1 &call,
|
||||
}
|
||||
default:
|
||||
{
|
||||
const uint8_t err = static_cast<uint8_t>(error::INVALID_ARGUMENT);
|
||||
ttdebug << "ERROR: Invalid call.\n";
|
||||
stream = "event: ERROR\ndata: {\"error_code\":22}\n";
|
||||
stream = "event: ERROR\ndata: "
|
||||
"{\"error_code\":" + to_string(err) + "}\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ return_call API::patch(const Mastodon::API::v1 &call,
|
||||
break;
|
||||
default:
|
||||
ttdebug << "ERROR: Invalid argument.\n";
|
||||
return { 22, "Invalid argument", 0, "" };
|
||||
return { error::INVALID_ARGUMENT, "Invalid argument", 0, "" };
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -198,7 +198,7 @@ return_call API::post(const Mastodon::API::v1 &call,
|
||||
default:
|
||||
{
|
||||
ttdebug << "ERROR: Invalid argument.\n";
|
||||
return { 22, "Invalid argument", 0, ""};
|
||||
return { error::INVALID_ARGUMENT, "Invalid argument", 0, ""};
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ return_call API::put(const Mastodon::API::v1 &call,
|
||||
default:
|
||||
{
|
||||
ttdebug << "ERROR: Invalid argument.\n";
|
||||
return { 22, "Invalid argument", 0, "" };
|
||||
return { error::INVALID_ARGUMENT, "Invalid argument", 0, "" };
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,6 +51,16 @@ Easy::return_entity<T>::return_entity(const uint8_t ec, const string &em,
|
||||
http_error_code = hec;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Easy::return_entity<T>::return_entity(const error ec, const string &em,
|
||||
const uint16_t hec, const T &ent)
|
||||
: entity(ent)
|
||||
{
|
||||
error_code = static_cast<uint8_t>(ec);
|
||||
error_message = em;
|
||||
http_error_code = hec;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Easy::return_entity<T>::return_entity::operator const T() const
|
||||
{
|
||||
|
@ -61,6 +61,19 @@ namespace Easy
|
||||
return_entity(const uint8_t ec, const string &em,
|
||||
const uint16_t hec, const T &ent);
|
||||
|
||||
/*!
|
||||
* @brief Return type for easy Mastodon::Easy::API.
|
||||
*
|
||||
* @param ec Error code
|
||||
* @param em Error message
|
||||
* @param hec HTTP error code
|
||||
* @param ent Answer
|
||||
*
|
||||
* @since 0.110.0
|
||||
*/
|
||||
return_entity(const error ec, const string &em,
|
||||
const uint16_t hec, const T &ent);
|
||||
|
||||
/*!
|
||||
* @brief Same as return_entity::entity.
|
||||
*
|
||||
|
@ -39,7 +39,8 @@ const return_entity<Status> API::send_post(const Status &status)
|
||||
else
|
||||
{
|
||||
ttdebug << "ERROR: Easy::Status::content can not be empty.\n";
|
||||
return { 22, "Easy::Status::content can not be empty", 0, Status() };
|
||||
return { error::INVALID_ARGUMENT,
|
||||
"Easy::Status::content can not be empty", 0, Status() };
|
||||
}
|
||||
|
||||
if (!status.in_reply_to_id().empty())
|
||||
@ -94,8 +95,9 @@ const return_entity<Status> API::send_post(const Status &status)
|
||||
else
|
||||
{
|
||||
ttdebug << "ERROR: Easy::Attachment::file can not be empty.\n";
|
||||
return { 22, "Easy::Attachment::file can not be empty",
|
||||
0, Status() };
|
||||
return { error::INVALID_ARGUMENT,
|
||||
"Easy::Attachment::file can not be empty", 0,
|
||||
Status() };
|
||||
}
|
||||
if (!att.description().empty())
|
||||
{
|
||||
|
43
src/http.cpp
43
src/http.cpp
@ -206,7 +206,7 @@ return_call API::http::request_common(const http_method &meth,
|
||||
{
|
||||
case HTTPResponse::HTTP_OK:
|
||||
{
|
||||
return { 0, "", http_code, answer };
|
||||
return { error::OK, "", http_code, answer };
|
||||
}
|
||||
// Not using the constants because some are too new for Debian stretch.
|
||||
case 301: // HTTPResponse::HTTP_MOVED_PERMANENTLY
|
||||
@ -226,8 +226,8 @@ return_call API::http::request_common(const http_method &meth,
|
||||
if (location.substr(pos1, pos2 - pos1) != _instance)
|
||||
{ // Return new location if the domain changed.
|
||||
ttdebug << "New location is on another domain.\n";
|
||||
return { 78, "Remote address changed", http_code,
|
||||
location };
|
||||
return { error::URL_CHANGED, "Remote address changed",
|
||||
http_code, location };
|
||||
}
|
||||
|
||||
location = location.substr(pos2);
|
||||
@ -235,7 +235,8 @@ return_call API::http::request_common(const http_method &meth,
|
||||
|
||||
if (http_code == 301 || http_code == 308)
|
||||
{ // Return new location for permanent redirects.
|
||||
return { 78, "Remote address changed", http_code, location };
|
||||
return { error::URL_CHANGED, "Remote address changed",
|
||||
http_code, location };
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -245,7 +246,8 @@ return_call API::http::request_common(const http_method &meth,
|
||||
}
|
||||
default:
|
||||
{
|
||||
return { 111, "Connection refused", http_code, answer };
|
||||
return { error::CONNECTION_REFUSED, "Connection refused",
|
||||
http_code, answer };
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -257,7 +259,7 @@ return_call API::http::request_common(const http_method &meth,
|
||||
}
|
||||
|
||||
ttdebug << e.displayText() << "\n";
|
||||
return { 113, e.displayText(), 0, "" };
|
||||
return { error::DNS, e.displayText(), 0, "" };
|
||||
}
|
||||
catch (const Poco::Net::ConnectionRefusedException &e)
|
||||
{
|
||||
@ -267,7 +269,7 @@ return_call API::http::request_common(const http_method &meth,
|
||||
}
|
||||
|
||||
ttdebug << e.displayText() << "\n";
|
||||
return { 111, e.displayText(), 0, "" };
|
||||
return { error::CONNECTION_REFUSED, e.displayText(), 0, "" };
|
||||
}
|
||||
catch (const Poco::Net::SSLException &e)
|
||||
{
|
||||
@ -277,7 +279,7 @@ return_call API::http::request_common(const http_method &meth,
|
||||
}
|
||||
|
||||
ttdebug << e.displayText() << "\n";
|
||||
return { 150, e.displayText(), 0, "" };
|
||||
return { error::ENCRYPTION, e.displayText(), 0, "" };
|
||||
}
|
||||
catch (const Poco::Net::NetException &e)
|
||||
{
|
||||
@ -287,7 +289,7 @@ return_call API::http::request_common(const http_method &meth,
|
||||
}
|
||||
|
||||
ttdebug << "Unknown network error: " << e.displayText() << std::endl;
|
||||
return { 255, e.displayText(), 0, "" };
|
||||
return { error::UNKNOWN, e.displayText(), 0, "" };
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
@ -297,35 +299,16 @@ return_call API::http::request_common(const http_method &meth,
|
||||
}
|
||||
|
||||
ttdebug << "Unknown error: " << e.what() << std::endl;
|
||||
return { 255, e.what(), 0, "" };
|
||||
return { error::UNKNOWN, e.what(), 0, "" };
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: get_headers() doesn't work anymore.
|
||||
void API::http::get_headers(string &headers) const
|
||||
{
|
||||
headers = _headers;
|
||||
}
|
||||
|
||||
size_t API::http::callback_write(char* data, size_t size, size_t nmemb,
|
||||
string *str)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(_mutex);
|
||||
str->append(data, size * nmemb);
|
||||
// ttdebug << "Received " << size * nmemb << " Bytes\n";
|
||||
return size * nmemb;
|
||||
}
|
||||
|
||||
double API::http::callback_progress(double /* dltotal */, double /* dlnow */,
|
||||
double /* ultotal */, double /* ulnow */)
|
||||
{
|
||||
if (_cancel_stream)
|
||||
{
|
||||
// This throws the runtime error: Callback aborted
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void API::http::cancel_stream()
|
||||
{
|
||||
_cancel_stream = true;
|
||||
|
@ -46,7 +46,6 @@ using Poco::Net::HTMLForm;
|
||||
*/
|
||||
namespace Mastodon
|
||||
{
|
||||
// TODO: error enum, different error codes.
|
||||
/*!
|
||||
* @brief Interface to the Mastodon API.
|
||||
*
|
||||
@ -57,13 +56,13 @@ namespace Mastodon
|
||||
* | Code | Explanation |
|
||||
* | --------: |:-------------------------------------------|
|
||||
* | 0 | No error |
|
||||
* | 22 | Invalid argument |
|
||||
* | 78 | URL changed (HTTP 301 or 308) |
|
||||
* | 110 | Connection timed out |
|
||||
* | 111 | Connection refused (check http_error_code) |
|
||||
* | 113 | No route to host / Could not resolve host |
|
||||
* | 150 | Encryption error |
|
||||
* | 255 | Unknown error |
|
||||
* | 1 | Invalid argument |
|
||||
* | 10 | URL changed (HTTP 301 or 308) |
|
||||
* | 11 | Connection timed out |
|
||||
* | 12 | Connection refused (check http_error_code) |
|
||||
* | 13 | No route to host / Could not resolve host |
|
||||
* | 14 | Encryption error |
|
||||
* | 127 | Unknown error |
|
||||
*
|
||||
* @since before 0.11.0
|
||||
*/
|
||||
|
@ -57,4 +57,13 @@ namespace Mastodon
|
||||
error_message = em;
|
||||
http_error_code = hec;
|
||||
}
|
||||
|
||||
return_call::return_call(const error ec, const string &em,
|
||||
const uint16_t hec, const string &a)
|
||||
: answer(a)
|
||||
{
|
||||
error_code = static_cast<uint8_t>(ec);
|
||||
error_message = em;
|
||||
http_error_code = hec;
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include "types.hpp"
|
||||
|
||||
using std::uint8_t;
|
||||
using std::uint16_t;
|
||||
@ -113,6 +114,19 @@ namespace Mastodon
|
||||
return_call(const uint8_t ec, const string &em,
|
||||
const uint16_t hec, const string &a);
|
||||
|
||||
/*!
|
||||
* @brief Return type for Mastodon::API.
|
||||
*
|
||||
* @param ec Error code
|
||||
* @param em Error message
|
||||
* @param hec HTTP error code
|
||||
* @param a Answer
|
||||
*
|
||||
* @since 0.110.0
|
||||
*/
|
||||
return_call(const error ec, const string &em,
|
||||
const uint16_t hec, const string &a);
|
||||
|
||||
/*!
|
||||
* @brief Same es return_call::answer.
|
||||
*
|
||||
|
@ -93,6 +93,18 @@ namespace Mastodon
|
||||
DELETE,
|
||||
GET_STREAM
|
||||
};
|
||||
|
||||
enum class error
|
||||
{
|
||||
OK = 0,
|
||||
INVALID_ARGUMENT = 1,
|
||||
URL_CHANGED = 10,
|
||||
CONNECTION_TIMEOUT = 11,
|
||||
CONNECTION_REFUSED = 12,
|
||||
DNS = 13,
|
||||
ENCRYPTION = 14,
|
||||
UNKNOWN = 127
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MASTODON_CPP_TYPES_HPP
|
||||
|
Reference in New Issue
Block a user