Skip to content

Commit 14e00a6

Browse files
committed
UPD | errors
1 parent f2a8a25 commit 14e00a6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+460
-339
lines changed

include/ManapiDebug.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
#include "async/ManapiAsyncLogger.hpp"
1313

1414
#if _MSC_VER
15-
# define MANAPIHTTP_LOG(msg, ...) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE__, __FUNCTION__, manapi::ERR_DEBUG, msg, __VA_ARGS__)
16-
# define MANAPIHTTP_LOG2(msg) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE__, __FUNCTION__, manapi::ERR_DEBUG, msg);
15+
# define MANAPIHTTP_LOG(msg, ...) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE__, __FUNCTION__, manapi::ERR_OK, msg, __VA_ARGS__)
16+
# define MANAPIHTTP_LOG2(msg) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE__, __FUNCTION__, manapi::ERR_OK, msg);
1717
# define RETHROW_MANAPIHTTP_EXCEPTION(errnum, msg, ...) manapi::debug::_error (__LINE__, __FILE__, __FUNCTION__, errnum, msg, __VA_ARGS__)
1818
# define RETHROW_MANAPIHTTP_EXCEPTION2(errnum, msg, ...) manapi::debug::_error (__LINE__, __FILE__, __FUNCTION__, errnum, msg)
1919
#else
20-
# define MANAPIHTTP_LOG(msg, ...) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE_NAME__, __FUNCTION__, manapi::ERR_DEBUG, msg, __VA_ARGS__)
21-
# define MANAPIHTTP_LOG2(msg) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE_NAME__, __FUNCTION__, manapi::ERR_DEBUG, msg);
20+
# define MANAPIHTTP_LOG(msg, ...) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE_NAME__, __FUNCTION__, manapi::ERR_OK, msg, __VA_ARGS__)
21+
# define MANAPIHTTP_LOG2(msg) manapi::debug::_log (manapi::async::current()->logger(), __LINE__, __FILE_NAME__, __FUNCTION__, manapi::ERR_OK, msg);
2222
# define RETHROW_MANAPIHTTP_EXCEPTION(errnum, msg, ...) manapi::debug::_error (__LINE__, __FILE_NAME__, __FUNCTION__, errnum, msg, __VA_ARGS__)
2323
# define RETHROW_MANAPIHTTP_EXCEPTION2(errnum, msg, ...) manapi::debug::_error (__LINE__, __FILE_NAME__, __FUNCTION__, errnum, msg)
2424
#endif

include/ManapiErrors.hpp

Lines changed: 91 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -9,80 +9,29 @@
99
namespace manapi {
1010
enum err_num {
1111
ERR_OK = 0,
12-
ERR_FATAL = 1,
13-
ERR_UNDEFINED = 2,
14-
ERR_DEBUG = 3,
15-
ERR_COMPRESS_DATA = 4,
16-
ERR_FILE_EXISTS = 5,
17-
ERR_FILE_IO = 6,
18-
ERR_HTTP_PARAM_MISSING = 7,
19-
ERR_HTTP_BODY_MISSING = 8,
20-
ERR_HTTP_BODY_TOO_LONG = 9,
21-
ERR_HTTP_CONTENT_TYPE_MISSING = 10,
22-
ERR_HTTP_BODY_BOUNDARY_MISSING = 12,
23-
ERR_HTTP_INVALID_CONTENT_TYPE = 13,
24-
ERR_HTTP_BODY_MASK_FAILED = 14,
25-
ERR_HTTP_BODY_NOT_CONTAINS_FILE = 15,
26-
ERR_HTTP_IMPORTANT_HEADER_MISSING = 16,
27-
ERR_HTTP_PROTOCOL_ERROR = 17,
28-
ERR_HTTP_QUERY_PARAM_MISSING = 18,
29-
ERR_DIVIDED_BY_ZERO = 19,
30-
ERR_EXTERNAL_LIB_CRASH = 20,
31-
ERR_CONFIG_ERROR = 21,
32-
ERR_HTTP_HEADER_MISSING = 22,
33-
ERR_HTTP_HEADER_INVALID = 23,
34-
ERR_HTTP_ADD_PAGE = 24,
35-
ERR_HTTP_SETTINGS_INCOMPATIBILITY = 25,
36-
ERR_HTTP_UNSUPPORTED = 26,
37-
ERR_UNSUPPORTED = 27,
38-
ERR_STORAGE_OBJECT_IS_NULL = 28,
39-
ERR_FUNCTION_IS_NULL = 29,
40-
ERR_HTTP_CONNECTION_WAS_CLOSED = 30,
41-
ERR_HTTP_PARSER_BUG = 31,
42-
ERR_ALGORITHM_NO_SUPPORT = 32,
43-
ERR_ALGORITHM_INIT_FAIL = 33,
44-
ERR_QUIC_PROTOCOL_ERROR = 34,
45-
ERR_BUG = 35,
46-
ERR_SUBSCRIBE_FAILURE = 36,
47-
ERR_INTERRUPTED = 37,
48-
ERR_THREAD_SAFE = 38,
49-
ERR_POSTGRE_ERROR = 39,
50-
ERR_POSTGRE_RESULT = 40,
51-
ERR_CONNECTION_TIMEOUT = 41,
52-
ERR_PARSE_ERROR = 42,
53-
ERR_PARSE_INVALID_SYMBOL = 43,
54-
ERR_PARSE_UNEXPECTED_END = 44,
55-
ERR_PARSE_INVALID_CHAR = 45,
56-
ERR_HTTP_GET_PARAMS_MASK_FAILED = 46,
57-
ERR_SOCKET = 47,
58-
ERR_FILE_DESCRIPTOR = 48,
59-
ERR_INCOMPATIBLE_SETTING = 49,
60-
ERR_CANCELLED = 50,
61-
ERR_CANCELLATION_FAILED = 51,
62-
ERR_FS_IO = 52,
63-
ERR_FS_IO_RESULT = 53,
64-
ERR_FILE_NOT_FOUND = 54,
65-
ERR_TIMER_ERROR = 55,
66-
ERR_WATCHER_ERROR = 56,
67-
ERR_WATCHER_BIND = 57,
68-
ERR_UNHANDLED_EXCEPTION = 58,
69-
ERR_IP = 59,
70-
ERR_SSL_CONNECTION = 60,
71-
ERR_ASYNC = 61,
72-
ERR_OS_ENV = 62
12+
ERR_UNKNOWN,
13+
ERR_INVALID_ARGUMENT,
14+
ERR_NOT_FOUND,
15+
ERR_CANCELLED,
16+
ERR_DEADLINE_EXCEEDED,
17+
ERR_ALREADY_EXISTS,
18+
ERR_PERMISSION_DENIED,
19+
ERR_UNAUTHENTICATED,
20+
ERR_RESOURCE_EXHAUSTED,
21+
ERR_FAILED_PRECONDITION,
22+
ERR_ABORTED,
23+
ERR_UNAVAILABLE,
24+
ERR_OUT_OF_RANGE,
25+
ERR_UNIMPLEMENTED,
26+
ERR_INTERNAL,
27+
ERR_DATA_LOSS,
28+
ERR_FILESYSTEM_FAILED,
29+
ERR_PARSE_FAILED
7330
};
7431

75-
extern const std::map <err_num, std::string> err_msg;
32+
std::string_view get_msg_by_err_num(err_num errnum);
7633

77-
const inline std::string & get_msg_by_err_num(const err_num &errnum) {
78-
if (err_msg.contains(errnum))
79-
{
80-
return err_msg.at(errnum);
81-
}
82-
return err_msg.at(ERR_UNDEFINED);
83-
}
84-
85-
void rethrow_exception_ptr (std::exception_ptr err, int *errnum, std::string *msg, class json *data);
34+
void extract_exception_ptr (std::exception_ptr err, int *errnum, std::string *msg, class json *data);
8635

8736
class exception : public std::exception {
8837
public:
@@ -96,6 +45,77 @@ namespace manapi {
9645
std::string message;
9746
std::shared_ptr<json> data_;
9847
};
48+
49+
namespace error {
50+
class status {
51+
public:
52+
status ();
53+
status (err_num code, std::string_view msg);
54+
55+
[[nodiscard]] std::string_view msg () const;
56+
[[nodiscard]] err_num code () const;
57+
[[nodiscard]] bool ok () const;
58+
private:
59+
std::string_view msg_;
60+
err_num code_;
61+
};
62+
63+
template<typename T>
64+
requires(!std::is_same_v<status, T>)
65+
class status_or {
66+
public:
67+
status_or (T value) : err_() {
68+
this->value_ = std::move(value);
69+
}
70+
71+
status_or (status status) {
72+
this->err_ = std::move(status);
73+
}
74+
75+
[[nodiscard]] manapi::err_num code () const {
76+
return this->err_.code();
77+
}
78+
79+
[[nodiscard]] std::string_view status_msg () const {
80+
return get_msg_by_err_num(this->err_.code());
81+
}
82+
83+
[[nodiscard]] std::string_view message () const {
84+
return this->err_.msg();
85+
}
86+
87+
T value () {
88+
return this->value_.value();
89+
}
90+
91+
[[nodiscard]] bool ok () const {
92+
return this->err_.code() == manapi::ERR_OK;
93+
}
94+
private:
95+
std::optional<T> value_;
96+
status err_;
97+
};
98+
99+
status status_ok ();
100+
status status_unknown (std::string_view msg);
101+
status status_cancelled (std::string_view msg);
102+
status status_invalid_argument (std::string_view msg);
103+
status status_deadline_exceeded (std::string_view msg);
104+
status status_not_found (std::string_view msg);
105+
status status_already_exists (std::string_view msg);
106+
status status_permission_denied (std::string_view msg);
107+
status status_unauthenticated (std::string_view msg);
108+
status status_resource_exhausted (std::string_view msg);
109+
status status_failed_precondition (std::string_view msg);
110+
status status_aborted (std::string_view msg);
111+
status status_unavailable (std::string_view msg);
112+
status status_out_of_range (std::string_view msg);
113+
status status_unimplemented (std::string_view msg);
114+
status status_internal (std::string_view msg);
115+
status status_data_loss (std::string_view msg);
116+
status status_filesystem_failed (std::string_view msg);
117+
status status_parse_failed (std::string_view msg);
118+
}
99119
}
100120

101121
template <>

include/ManapiProcess.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
#include <string>
44

5+
#include "ManapiErrors.hpp"
6+
57
namespace manapi::process {
6-
void set_env (std::string_view name, std::string_view key);
7-
std::string get_env (std::string_view name);
8-
}
8+
manapi::error::status set_env (std::string_view name, std::string_view key);
9+
manapi::error::status_or<std::string> get_env (std::string_view name);
10+
}

include/async/ManapiAsyncParallelRun.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ namespace manapi::async {
7575
});
7676
}
7777
else {
78-
THROW_MANAPIHTTP_EXCEPTION2 (ERR_SUBSCRIBE_FAILURE, "parallel run is busy");
78+
THROW_MANAPIHTTP_EXCEPTION2 (ERR_INTERNAL, "parallel run is busy");
7979
}
8080
}
8181

include/components/ManapiEventStructures.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
int listen (int backlog, uv_connection_cb cb) MANAPI_EV_NOEXPECT; \
2727
static int ip4_addr (const char *ip, int port, sockaddr_in *addr) MANAPI_EV_NOEXPECT; \
2828
static int ip6_addr (const char *ip, int port, sockaddr_in6 *addr) MANAPI_EV_NOEXPECT;
29-
#define MANAPI_EV_CHECK(expr) if (expr) { THROW_MANAPIHTTP_EXCEPTION2(manapi::ERR_EXTERNAL_LIB_CRASH, #expr); }
29+
#define MANAPI_EV_CHECK(expr) if (expr) { THROW_MANAPIHTTP_EXCEPTION2(manapi::ERR_INTERNAL, #expr); }
3030

3131
namespace manapi {
3232
typedef uv_os_fd_t fd_t;

include/crypto/ManapiAEAD.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ namespace manapi::crypto {
5252
cipher = EVP_aes_256_cbc();
5353
break;
5454
default:
55-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "Available: [AES_256_GCM, AES_128_GCM]");
55+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "Available: [AES_256_GCM, AES_128_GCM]");
5656
}
5757

5858
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
@@ -126,7 +126,7 @@ namespace manapi::crypto {
126126
cipher = wolfSSL_EVP_aes_256_cbc();
127127
break;
128128
default:
129-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "Available: [AES_256_GCM, AES_128_GCM]");
129+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "Available: [AES_256_GCM, AES_128_GCM]");
130130
}
131131

132132
WOLFSSL_EVP_CIPHER_CTX *ctx = wolfSSL_EVP_CIPHER_CTX_new();
@@ -207,7 +207,7 @@ namespace manapi::crypto {
207207
cipher = EVP_aes_256_cbc();
208208
break;
209209
default:
210-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "Available: [AES_256_GCM, AES_128_GCM, AES_128_CBC, AES_256_CBC]");
210+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "Available: [AES_256_GCM, AES_128_GCM, AES_128_CBC, AES_256_CBC]");
211211
}
212212

213213
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
@@ -281,7 +281,7 @@ namespace manapi::crypto {
281281
cipher = wolfSSL_EVP_aes_256_cbc();
282282
break;
283283
default:
284-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "Available: [AES_256_GCM, AES_128_GCM, AES_128_CBC, AES_256_CBC]");
284+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "Available: [AES_256_GCM, AES_128_GCM, AES_128_CBC, AES_256_CBC]");
285285
}
286286

287287
WOLFSSL_EVP_CIPHER_CTX *ctx = wolfSSL_EVP_CIPHER_CTX_new();

include/crypto/ManapiAES.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace manapi::crypto {
3636
algorithm_cb = EVP_aes_256_ecb();
3737
break;
3838
default:
39-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "Algorithm is invalid. "
39+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "Algorithm is invalid. "
4040
"Available: [AES_128_CBC, AES_128_GBC]");
4141
}
4242
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
@@ -79,7 +79,7 @@ namespace manapi::crypto {
7979

8080
return std::move(out);
8181
#else
82-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "openssl or wolfssl is required");
82+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "openssl or wolfssl is required");
8383
#endif
8484
}
8585

@@ -106,7 +106,7 @@ namespace manapi::crypto {
106106
algorithm_cb = EVP_aes_256_ecb();
107107
break;
108108
default:
109-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "Algorithm is invalid. "
109+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "Algorithm is invalid. "
110110
"Available: [AES_128_CBC, AES_128_GBC]");
111111
}
112112

@@ -152,7 +152,7 @@ namespace manapi::crypto {
152152

153153
return std::move(out);
154154
#else
155-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "openssl or wolfssl is required");
155+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "openssl or wolfssl is required");
156156
#endif
157157
}
158158
}

include/crypto/ManapiHKDF.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace manapi::crypto {
3434
algorithm = EVP_sha512();
3535
break;
3636
default:
37-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ALGORITHM_NO_SUPPORT, "Available: [SHA256, SHA512]");
37+
THROW_MANAPIHTTP_EXCEPTION2(ERR_UNIMPLEMENTED, "Available: [SHA256, SHA512]");
3838
}
3939

4040
HMAC(

0 commit comments

Comments
 (0)