mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-29 23:15:49 +00:00
hookjs rollback
This commit is contained in:
committed by
RichardAH
parent
a2c3567caf
commit
80df3adac7
@@ -338,6 +338,27 @@ JSValue hook_api::JSFunction##F(JSContext *ctx, JSValueConst this_val,\
|
|||||||
: RC_ROLLBACK); \
|
: RC_ROLLBACK); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define HOOK_EXIT_JS(error_msg, error_code, exit_type)\
|
||||||
|
{\
|
||||||
|
int64_t val = 0;\
|
||||||
|
if (JS_IsNumber(error_code))\
|
||||||
|
JS_ToInt64(ctx, &val, error_code);\
|
||||||
|
hookCtx.result.exitCode = val;\
|
||||||
|
hookCtx.result.exitType = exit_type;\
|
||||||
|
if (JS_IsString(error_msg))\
|
||||||
|
{\
|
||||||
|
size_t len;\
|
||||||
|
const char* cstr = JS_ToCStringLen(ctx, &len, error_msg);\
|
||||||
|
if (len > 256)\
|
||||||
|
len = 256;\
|
||||||
|
hookCtx.result.exitReason = std::string(cstr, len);\
|
||||||
|
JS_FreeCString(ctx, cstr);\
|
||||||
|
}\
|
||||||
|
return JS_NewInt64(ctx,\
|
||||||
|
exit_type == hook_api::ExitType::ACCEPT ? RC_ACCEPT \
|
||||||
|
: RC_ROLLBACK); \
|
||||||
|
}
|
||||||
|
|
||||||
#define WRITE_WASM_MEMORY_OR_RETURN_AS_INT64( \
|
#define WRITE_WASM_MEMORY_OR_RETURN_AS_INT64( \
|
||||||
write_ptr_in, write_len_in, data_ptr_in, data_len_in, is_account_in) \
|
write_ptr_in, write_len_in, data_ptr_in, data_len_in, is_account_in) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
@@ -70,12 +70,26 @@ DECLARE_WASM_FUNCTION(
|
|||||||
uint32_t read_ptr,
|
uint32_t read_ptr,
|
||||||
uint32_t read_len,
|
uint32_t read_len,
|
||||||
int64_t error_code);
|
int64_t error_code);
|
||||||
|
|
||||||
|
DECLARE_JS_FUNCTION(
|
||||||
|
int64_t,
|
||||||
|
accept,
|
||||||
|
JSValue error_msg,
|
||||||
|
JSValue error_code);
|
||||||
|
|
||||||
DECLARE_WASM_FUNCTION(
|
DECLARE_WASM_FUNCTION(
|
||||||
int64_t,
|
int64_t,
|
||||||
rollback,
|
rollback,
|
||||||
uint32_t read_ptr,
|
uint32_t read_ptr,
|
||||||
uint32_t read_len,
|
uint32_t read_len,
|
||||||
int64_t error_code);
|
int64_t error_code);
|
||||||
|
|
||||||
|
DECLARE_JS_FUNCTION(
|
||||||
|
int64_t,
|
||||||
|
rollback,
|
||||||
|
JSValue error_msg,
|
||||||
|
JSValue error_code);
|
||||||
|
|
||||||
DECLARE_WASM_FUNCTION(
|
DECLARE_WASM_FUNCTION(
|
||||||
int64_t,
|
int64_t,
|
||||||
util_raddr,
|
util_raddr,
|
||||||
@@ -410,14 +424,6 @@ DECLARE_WASM_FUNCTION(
|
|||||||
uint32_t slot_no_meta);
|
uint32_t slot_no_meta);
|
||||||
|
|
||||||
|
|
||||||
/// JS
|
|
||||||
|
|
||||||
DECLARE_JS_FUNCTION(
|
|
||||||
int64_t,
|
|
||||||
accept,
|
|
||||||
JSValue error_msg,
|
|
||||||
JSValue error_code);
|
|
||||||
|
|
||||||
} /* end namespace hook_api */
|
} /* end namespace hook_api */
|
||||||
|
|
||||||
namespace hook {
|
namespace hook {
|
||||||
|
|||||||
@@ -2188,25 +2188,7 @@ DEFINE_JS_FUNCTION(
|
|||||||
JSValue error_code)
|
JSValue error_code)
|
||||||
{
|
{
|
||||||
JS_HOOK_SETUP();
|
JS_HOOK_SETUP();
|
||||||
int64_t val = 0;
|
HOOK_EXIT_JS(error_msg, error_code, hook_api::ExitType::ACCEPT);
|
||||||
if (JS_IsNumber(error_code))
|
|
||||||
JS_ToInt64(ctx, &val, error_code);
|
|
||||||
|
|
||||||
hookCtx.result.exitCode = val;
|
|
||||||
hookCtx.result.exitType = hook_api::ExitType::ACCEPT;
|
|
||||||
|
|
||||||
if (JS_IsString(error_msg))
|
|
||||||
{
|
|
||||||
size_t len;
|
|
||||||
const char* cstr = JS_ToCStringLen(ctx, &len, error_msg);
|
|
||||||
if (len > 256)
|
|
||||||
len = 256;
|
|
||||||
hookCtx.result.exitReason = std::string(cstr, len);
|
|
||||||
JS_FreeCString(ctx, cstr);
|
|
||||||
}
|
|
||||||
|
|
||||||
return JS_NewInt64(ctx, RC_ACCEPT);
|
|
||||||
|
|
||||||
JS_HOOK_TEARDOWN();
|
JS_HOOK_TEARDOWN();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2224,6 +2206,17 @@ DEFINE_WASM_FUNCTION(
|
|||||||
WASM_HOOK_TEARDOWN();
|
WASM_HOOK_TEARDOWN();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_JS_FUNCTION(
|
||||||
|
int64_t,
|
||||||
|
rollback,
|
||||||
|
JSValue error_msg,
|
||||||
|
JSValue error_code)
|
||||||
|
{
|
||||||
|
JS_HOOK_SETUP();
|
||||||
|
HOOK_EXIT_JS(error_msg, error_code, hook_api::ExitType::ROLLBACK);
|
||||||
|
JS_HOOK_TEARDOWN();
|
||||||
|
}
|
||||||
|
|
||||||
// Write the TxnID of the originating transaction into the write_ptr
|
// Write the TxnID of the originating transaction into the write_ptr
|
||||||
DEFINE_WASM_FUNCTION(
|
DEFINE_WASM_FUNCTION(
|
||||||
int64_t,
|
int64_t,
|
||||||
|
|||||||
Reference in New Issue
Block a user