From 3e23cde4a95f01cb6baf6722e237540927b552e6 Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto Date: Tue, 3 Dec 2024 10:04:21 -0500 Subject: add try-catch into monero code --- impls/monero.dart/lib/src/checksum_monero.dart | 6 +- .../lib/src/generated_bindings_monero.g.dart | 33 -- impls/monero.ts/checksum_monero.ts | 6 +- .../monero_libwallet2_api_c.exp | 2 - monero_libwallet2_api_c/src/main/cpp/helpers.cpp | 4 +- monero_libwallet2_api_c/src/main/cpp/helpers.hpp | 40 ++ .../src/main/cpp/monero_checksum.h | 6 +- .../src/main/cpp/wallet2_api_c.cpp | 567 ++++++++++++++++++++- .../src/main/cpp/wallet2_api_c.h | 2 - 9 files changed, 597 insertions(+), 69 deletions(-) diff --git a/impls/monero.dart/lib/src/checksum_monero.dart b/impls/monero.dart/lib/src/checksum_monero.dart index 1092533..ba038bd 100644 --- a/impls/monero.dart/lib/src/checksum_monero.dart +++ b/impls/monero.dart/lib/src/checksum_monero.dart @@ -1,4 +1,4 @@ // ignore_for_file: constant_identifier_names -const String wallet2_api_c_h_sha256 = "198a27486ce4f014b737f52ec2879a90838c3b3ca088de8dc7d55b79a10f4a5b"; -const String wallet2_api_c_cpp_sha256 = "22b0c9dd542fb55edfe9e17da67e97ddf5f80bcdd3e126e1bd64cce54234bde1-b089f9ee69924882c5d14dd1a6991deb05d9d1cd"; -const String wallet2_api_c_exp_sha256 = "c1f785d62709fd8b849063ecf4fe8854d9e3b05b568b9716de98d33e7bdaf522"; +const String wallet2_api_c_h_sha256 = "9e80c4b59a0509aa02fbf01e8df2881b89f82225d1765bfa7856cbdbaf7af116"; +const String wallet2_api_c_cpp_sha256 = "c26f377e5793264d1d5702515f2646e59750f92f576eff5d003642c1dfa4ea7b-b089f9ee69924882c5d14dd1a6991deb05d9d1cd"; +const String wallet2_api_c_exp_sha256 = "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d"; diff --git a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart index cd2124b..77e2899 100644 --- a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart +++ b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart @@ -2763,39 +2763,6 @@ class MoneroC { _MONERO_Wallet_daemonBlockChainHeightPtr.asFunction< int Function(ffi.Pointer)>(); - int MONERO_Wallet_daemonBlockChainHeight_cached( - ffi.Pointer wallet_ptr, - ) { - return _MONERO_Wallet_daemonBlockChainHeight_cached( - wallet_ptr, - ); - } - - late final _MONERO_Wallet_daemonBlockChainHeight_cachedPtr = - _lookup)>>( - 'MONERO_Wallet_daemonBlockChainHeight_cached'); - late final _MONERO_Wallet_daemonBlockChainHeight_cached = - _MONERO_Wallet_daemonBlockChainHeight_cachedPtr.asFunction< - int Function(ffi.Pointer)>(); - - void MONERO_Wallet_daemonBlockChainHeight_runThread( - ffi.Pointer wallet_ptr, - int seconds, - ) { - return _MONERO_Wallet_daemonBlockChainHeight_runThread( - wallet_ptr, - seconds, - ); - } - - late final _MONERO_Wallet_daemonBlockChainHeight_runThreadPtr = _lookup< - ffi - .NativeFunction, ffi.Int)>>( - 'MONERO_Wallet_daemonBlockChainHeight_runThread'); - late final _MONERO_Wallet_daemonBlockChainHeight_runThread = - _MONERO_Wallet_daemonBlockChainHeight_runThreadPtr.asFunction< - void Function(ffi.Pointer, int)>(); - int MONERO_Wallet_daemonBlockChainTargetHeight( ffi.Pointer wallet_ptr, ) { diff --git a/impls/monero.ts/checksum_monero.ts b/impls/monero.ts/checksum_monero.ts index b8e57cb..732396a 100644 --- a/impls/monero.ts/checksum_monero.ts +++ b/impls/monero.ts/checksum_monero.ts @@ -1,5 +1,5 @@ export const moneroChecksum = { - wallet2_api_c_h_sha256: "198a27486ce4f014b737f52ec2879a90838c3b3ca088de8dc7d55b79a10f4a5b", - wallet2_api_c_cpp_sha256: "22b0c9dd542fb55edfe9e17da67e97ddf5f80bcdd3e126e1bd64cce54234bde1-b089f9ee69924882c5d14dd1a6991deb05d9d1cd", - wallet2_api_c_exp_sha256: "c1f785d62709fd8b849063ecf4fe8854d9e3b05b568b9716de98d33e7bdaf522", + wallet2_api_c_h_sha256: "9e80c4b59a0509aa02fbf01e8df2881b89f82225d1765bfa7856cbdbaf7af116", + wallet2_api_c_cpp_sha256: "c26f377e5793264d1d5702515f2646e59750f92f576eff5d003642c1dfa4ea7b-b089f9ee69924882c5d14dd1a6991deb05d9d1cd", + wallet2_api_c_exp_sha256: "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d", } diff --git a/monero_libwallet2_api_c/monero_libwallet2_api_c.exp b/monero_libwallet2_api_c/monero_libwallet2_api_c.exp index 3b2931c..d42f14a 100644 --- a/monero_libwallet2_api_c/monero_libwallet2_api_c.exp +++ b/monero_libwallet2_api_c/monero_libwallet2_api_c.exp @@ -165,8 +165,6 @@ _MONERO_Wallet_blockChainHeight _MONERO_Wallet_approximateBlockChainHeight _MONERO_Wallet_estimateBlockChainHeight _MONERO_Wallet_daemonBlockChainHeight -_MONERO_Wallet_daemonBlockChainHeight_cached -_MONERO_Wallet_daemonBlockChainHeight_runThread _MONERO_Wallet_daemonBlockChainTargetHeight _MONERO_Wallet_synchronized _MONERO_Wallet_displayAmount diff --git a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp index 8e45eba..324c12d 100644 --- a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp +++ b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include #ifdef __ANDROID__ #include @@ -260,4 +262,4 @@ std::vector splitStringUint(const std::string& str, const std::string& } tokens.push_back(std::stoull(content)); // Inserting the last token return tokens; -} +} \ No newline at end of file diff --git a/monero_libwallet2_api_c/src/main/cpp/helpers.hpp b/monero_libwallet2_api_c/src/main/cpp/helpers.hpp index c3a64e6..b12ec8c 100644 --- a/monero_libwallet2_api_c/src/main/cpp/helpers.hpp +++ b/monero_libwallet2_api_c/src/main/cpp/helpers.hpp @@ -3,6 +3,46 @@ #include #include +#define WRAPPER_TRY() \ + try { + +#define WRAPPER_CATCH_CONST_CHAR() \ + } catch (const std::exception &e) { \ + std::string error_message = std::string("Exception caught: ") + e.what(); \ + char* result = static_cast(malloc(error_message.size() + 1)); \ + if (result) { \ + std::strcpy(result, error_message.c_str()); \ + } \ + return result; \ + } catch (...) { \ + std::string error_message = "Unknown exception caught."; \ + char* result = static_cast(malloc(error_message.size() + 1)); \ + if (result) { \ + std::strcpy(result, error_message.c_str()); \ + } \ + return result; \ + } + +#define WRAPPER_CATCH(default_value) \ + } catch (const std::exception &e) { \ + std::cerr << "Exception caught: " << e.what() << std::endl; \ + return default_value; \ + } catch (...) { \ + std::cerr << "Unknown exception caught." << std::endl; \ + return default_value; \ + } + + +#define WRAPPER_CATCH_VOID() \ + } catch (const std::exception &e) { \ + std::cerr << "Exception caught: " << e.what() << std::endl; \ + return; \ + } catch (...) { \ + std::cerr << "Unknown exception caught." << std::endl; \ + return; \ + } + + const char* vectorToString(const std::vector& vec, const std::string separator); const char* vectorToString(const std::vector& vec, const std::string separator); const char* vectorToString(const std::vector& vec, const std::string separator); diff --git a/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h b/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h index 4d3d39f..8f3f44a 100644 --- a/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h +++ b/monero_libwallet2_api_c/src/main/cpp/monero_checksum.h @@ -1,6 +1,6 @@ #ifndef MONEROC_CHECKSUMS #define MONEROC_CHECKSUMS -const char * MONERO_wallet2_api_c_h_sha256 = "198a27486ce4f014b737f52ec2879a90838c3b3ca088de8dc7d55b79a10f4a5b"; -const char * MONERO_wallet2_api_c_cpp_sha256 = "22b0c9dd542fb55edfe9e17da67e97ddf5f80bcdd3e126e1bd64cce54234bde1-b089f9ee69924882c5d14dd1a6991deb05d9d1cd"; -const char * MONERO_wallet2_api_c_exp_sha256 = "c1f785d62709fd8b849063ecf4fe8854d9e3b05b568b9716de98d33e7bdaf522"; +const char * MONERO_wallet2_api_c_h_sha256 = "9e80c4b59a0509aa02fbf01e8df2881b89f82225d1765bfa7856cbdbaf7af116"; +const char * MONERO_wallet2_api_c_cpp_sha256 = "c26f377e5793264d1d5702515f2646e59750f92f576eff5d003642c1dfa4ea7b-b089f9ee69924882c5d14dd1a6991deb05d9d1cd"; +const char * MONERO_wallet2_api_c_exp_sha256 = "d0f95f1f3bc49f1f59fe4eb0b61826128d7d3bb75405d5a01a252d02db03097d"; #endif diff --git a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp index 0cc2f9f..b0bea5f 100644 --- a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp +++ b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp @@ -63,252 +63,346 @@ extern "C" // PendingTransaction int MONERO_PendingTransaction_status(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); return pendingTx->status(); + WRAPPER_CATCH(0) } const char* MONERO_PendingTransaction_errorString(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::string str = pendingTx->errorString(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } bool MONERO_PendingTransaction_commit(void* pendingTx_ptr, const char* filename, bool overwrite) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); return pendingTx->commit(std::string(filename), overwrite); + WRAPPER_CATCH(false) } const char* MONERO_PendingTransaction_commitUR(void* pendingTx_ptr, int max_fragment_length) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::string str = pendingTx->commitUR(max_fragment_length); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } uint64_t MONERO_PendingTransaction_amount(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); return pendingTx->amount(); + WRAPPER_CATCH(0) } uint64_t MONERO_PendingTransaction_dust(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); return pendingTx->dust(); + WRAPPER_CATCH(0) } uint64_t MONERO_PendingTransaction_fee(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); return pendingTx->fee(); + WRAPPER_CATCH(0) } const char* MONERO_PendingTransaction_txid(void* pendingTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::vector txid = pendingTx->txid(); return vectorToString(txid, std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } uint64_t MONERO_PendingTransaction_txCount(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); return pendingTx->txCount(); + WRAPPER_CATCH(0) } const char* MONERO_PendingTransaction_subaddrAccount(void* pendingTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::vector subaddrAccount = pendingTx->subaddrAccount(); return vectorToString(subaddrAccount, std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_PendingTransaction_subaddrIndices(void* pendingTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::vector> subaddrIndices = pendingTx->subaddrIndices(); return vectorToString(subaddrIndices, std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_PendingTransaction_multisigSignData(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::string str = pendingTx->multisigSignData(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } void MONERO_PendingTransaction_signMultisigTx(void* pendingTx_ptr) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); return pendingTx->signMultisigTx(); + WRAPPER_CATCH_VOID() } const char* MONERO_PendingTransaction_signersKeys(void* pendingTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::vector txid = pendingTx->signersKeys(); return vectorToString(txid, std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_PendingTransaction_hex(void* pendingTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::vector txid = pendingTx->hex(); return vectorToString(txid, std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_PendingTransaction_txKey(void* pendingTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::PendingTransaction *pendingTx = reinterpret_cast(pendingTx_ptr); std::vector txid = pendingTx->txKey(); return vectorToString(txid, std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } // UnsignedTransaction int MONERO_UnsignedTransaction_status(void* unsignedTx_ptr) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return unsignedTx->status(); + WRAPPER_CATCH(0) } const char* MONERO_UnsignedTransaction_errorString(void* unsignedTx_ptr) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); std::string str = unsignedTx->errorString(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_UnsignedTransaction_amount(void* unsignedTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return vectorToString(unsignedTx->amount(), std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_UnsignedTransaction_fee(void* unsignedTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return vectorToString(unsignedTx->fee(), std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_UnsignedTransaction_mixin(void* unsignedTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return vectorToString(unsignedTx->mixin(), std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_UnsignedTransaction_confirmationMessage(void* unsignedTx_ptr) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); std::string str = unsignedTx->confirmationMessage(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_UnsignedTransaction_paymentId(void* unsignedTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return vectorToString(unsignedTx->paymentId(), std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_UnsignedTransaction_recipientAddress(void* unsignedTx_ptr, const char* separator) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return vectorToString(unsignedTx->recipientAddress(), std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } uint64_t MONERO_UnsignedTransaction_minMixinCount(void* unsignedTx_ptr) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return unsignedTx->minMixinCount(); + WRAPPER_CATCH(0) } uint64_t MONERO_UnsignedTransaction_txCount(void* unsignedTx_ptr) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return unsignedTx->txCount(); + WRAPPER_CATCH(0) } bool MONERO_UnsignedTransaction_sign(void* unsignedTx_ptr, const char* signedFileName) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); return unsignedTx->sign(std::string(signedFileName)); + WRAPPER_CATCH(false) } const char* MONERO_UnsignedTransaction_signUR(void* unsignedTx_ptr, int max_fragment_length) { + WRAPPER_TRY() Monero::UnsignedTransaction *unsignedTx = reinterpret_cast(unsignedTx_ptr); std::string str = unsignedTx->signUR(max_fragment_length); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // TransactionInfo int MONERO_TransactionInfo_direction(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->direction(); + WRAPPER_CATCH(0) } bool MONERO_TransactionInfo_isPending(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->isPending(); + WRAPPER_CATCH(false) } bool MONERO_TransactionInfo_isFailed(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->isFailed(); + WRAPPER_CATCH(false) } bool MONERO_TransactionInfo_isCoinbase(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->isCoinbase(); + WRAPPER_CATCH(false) } uint64_t MONERO_TransactionInfo_amount(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->amount(); + WRAPPER_CATCH(0) } uint64_t MONERO_TransactionInfo_fee(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->fee(); + WRAPPER_CATCH(0) } uint64_t MONERO_TransactionInfo_blockHeight(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->blockHeight(); + WRAPPER_CATCH(0) } const char* MONERO_TransactionInfo_description(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); std::string str = txInfo->description(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_TransactionInfo_subaddrIndex(void* txInfo_ptr, const char* separator) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); std::set subaddrIndex = txInfo->subaddrIndex(); return vectorToString(subaddrIndex, std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } uint32_t MONERO_TransactionInfo_subaddrAccount(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->subaddrAccount(); + WRAPPER_CATCH(0) } const char* MONERO_TransactionInfo_label(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); std::string str = txInfo->label(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } uint64_t MONERO_TransactionInfo_confirmations(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->confirmations(); + WRAPPER_CATCH(0) } uint64_t MONERO_TransactionInfo_unlockTime(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->unlockTime(); + WRAPPER_CATCH(0) } const char* MONERO_TransactionInfo_hash(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); std::string str = txInfo->hash(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } uint64_t MONERO_TransactionInfo_timestamp(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->timestamp(); + WRAPPER_CATCH(0) } const char* MONERO_TransactionInfo_paymentId(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); std::string str = txInfo->paymentId(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } int MONERO_TransactionInfo_transfers_count(void* txInfo_ptr) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->transfers().size(); + WRAPPER_CATCH(0) } uint64_t MONERO_TransactionInfo_transfers_amount(void* txInfo_ptr, int index) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); return txInfo->transfers()[index].amount; + WRAPPER_CATCH(0) } const char* MONERO_TransactionInfo_transfers_address(void* txInfo_ptr, int index) { + WRAPPER_TRY() Monero::TransactionInfo *txInfo = reinterpret_cast(txInfo_ptr); std::string str = txInfo->transfers()[index].address; const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } @@ -316,8 +410,10 @@ const char* MONERO_TransactionInfo_transfers_address(void* txInfo_ptr, int index // TransactionHistory int MONERO_TransactionHistory_count(void* txHistory_ptr) { + WRAPPER_TRY() Monero::TransactionHistory *txHistory = reinterpret_cast(txHistory_ptr); return txHistory->count(); + WRAPPER_CATCH(0) } void* MONERO_TransactionHistory_transaction(void* txHistory_ptr, int index) { Monero::TransactionHistory *txHistory = reinterpret_cast(txHistory_ptr); @@ -329,63 +425,79 @@ void* MONERO_TransactionHistory_transactionById(void* txHistory_ptr, const char* } void MONERO_TransactionHistory_refresh(void* txHistory_ptr) { + WRAPPER_TRY() Monero::TransactionHistory *txHistory = reinterpret_cast(txHistory_ptr); return txHistory->refresh(); + WRAPPER_CATCH_VOID() } void MONERO_TransactionHistory_setTxNote(void* txHistory_ptr, const char* txid, const char* note) { + WRAPPER_TRY() Monero::TransactionHistory *txHistory = reinterpret_cast(txHistory_ptr); return txHistory->setTxNote(std::string(txid), std::string(note)); + WRAPPER_CATCH_VOID() } // AddressBokRow // std::string extra; const char* MONERO_AddressBookRow_extra(void* addressBookRow_ptr) { + WRAPPER_TRY() Monero::AddressBookRow *addressBookRow = reinterpret_cast(addressBookRow_ptr); std::string str = addressBookRow->extra; const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getAddress() const {return m_address;} const char* MONERO_AddressBookRow_getAddress(void* addressBookRow_ptr) { + WRAPPER_TRY() Monero::AddressBookRow *addressBookRow = reinterpret_cast(addressBookRow_ptr); std::string str = addressBookRow->getAddress(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getDescription() const {return m_description;} const char* MONERO_AddressBookRow_getDescription(void* addressBookRow_ptr) { + WRAPPER_TRY() Monero::AddressBookRow *addressBookRow = reinterpret_cast(addressBookRow_ptr); std::string str = addressBookRow->getDescription(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getPaymentId() const {return m_paymentId;} const char* MONERO_AddressBookRow_getPaymentId(void* addressBookRow_ptr) { + WRAPPER_TRY() Monero::AddressBookRow *addressBookRow = reinterpret_cast(addressBookRow_ptr); std::string str = addressBookRow->getPaymentId(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::size_t getRowId() const {return m_rowId;} size_t MONERO_AddressBookRow_getRowId(void* addressBookRow_ptr) { + WRAPPER_TRY() Monero::AddressBookRow *addressBookRow = reinterpret_cast(addressBookRow_ptr); return addressBookRow->getRowId(); + WRAPPER_CATCH(0) } // AddressBook // virtual std::vector getAll() const = 0; int MONERO_AddressBook_getAll_size(void* addressBook_ptr) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); return addressBook->getAll().size(); + WRAPPER_CATCH(0) } void* MONERO_AddressBook_getAll_byIndex(void* addressBook_ptr, int index) { Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); @@ -393,172 +505,228 @@ void* MONERO_AddressBook_getAll_byIndex(void* addressBook_ptr, int index) { } // virtual bool addRow(const std::string &dst_addr , const std::string &payment_id, const std::string &description) = 0; bool MONERO_AddressBook_addRow(void* addressBook_ptr, const char* dst_addr , const char* payment_id, const char* description) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); return addressBook->addRow(std::string(dst_addr), std::string(payment_id), std::string(description)); + WRAPPER_CATCH(false) } // virtual bool deleteRow(std::size_t rowId) = 0; bool MONERO_AddressBook_deleteRow(void* addressBook_ptr, size_t rowId) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); return addressBook->deleteRow(rowId); + WRAPPER_CATCH(false) } // virtual bool setDescription(std::size_t index, const std::string &description) = 0; bool MONERO_AddressBook_setDescription(void* addressBook_ptr, size_t rowId, const char* description) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); return addressBook->setDescription(rowId, std::string(description)); + WRAPPER_CATCH(false) } // virtual void refresh() = 0; void MONERO_AddressBook_refresh(void* addressBook_ptr) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); return addressBook->refresh(); + WRAPPER_CATCH_VOID() } // virtual std::string errorString() const = 0; const char* MONERO_AddressBook_errorString(void* addressBook_ptr) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); std::string str = addressBook->errorString(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual int errorCode() const = 0; int MONERO_AddressBook_errorCode(void* addressBook_ptr) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); return addressBook->errorCode(); + WRAPPER_CATCH(0) } // virtual int lookupPaymentID(const std::string &payment_id) const = 0; int MONERO_AddressBook_lookupPaymentID(void* addressBook_ptr, const char* payment_id) { + WRAPPER_TRY() Monero::AddressBook *addressBook = reinterpret_cast(addressBook_ptr); return addressBook->lookupPaymentID(std::string(payment_id)); + WRAPPER_CATCH(0) } // CoinsInfo uint64_t MONERO_CoinsInfo_blockHeight(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->blockHeight(); + WRAPPER_CATCH(0) } // virtual std::string hash() const = 0; const char* MONERO_CoinsInfo_hash(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); std::string str = coinsInfo->hash(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual size_t internalOutputIndex() const = 0; size_t MONERO_CoinsInfo_internalOutputIndex(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->internalOutputIndex(); + WRAPPER_CATCH(0) } // virtual uint64_t globalOutputIndex() const = 0; uint64_t MONERO_CoinsInfo_globalOutputIndex(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->globalOutputIndex(); + WRAPPER_CATCH(0) } // virtual bool spent() const = 0; bool MONERO_CoinsInfo_spent(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->spent(); + WRAPPER_CATCH(false) } // virtual bool frozen() const = 0; bool MONERO_CoinsInfo_frozen(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->frozen(); + WRAPPER_CATCH(false) } // virtual uint64_t spentHeight() const = 0; uint64_t MONERO_CoinsInfo_spentHeight(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->spentHeight(); + WRAPPER_CATCH(0) } // virtual uint64_t amount() const = 0; uint64_t MONERO_CoinsInfo_amount(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->amount(); + WRAPPER_CATCH(0) } // virtual bool rct() const = 0; bool MONERO_CoinsInfo_rct(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->rct(); + WRAPPER_CATCH(false) } // virtual bool keyImageKnown() const = 0; bool MONERO_CoinsInfo_keyImageKnown(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->keyImageKnown(); + WRAPPER_CATCH(false) } // virtual size_t pkIndex() const = 0; size_t MONERO_CoinsInfo_pkIndex(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->pkIndex(); + WRAPPER_CATCH(0) } // virtual uint32_t subaddrIndex() const = 0; uint32_t MONERO_CoinsInfo_subaddrIndex(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->subaddrIndex(); + WRAPPER_CATCH(0) } // virtual uint32_t subaddrAccount() const = 0; uint32_t MONERO_CoinsInfo_subaddrAccount(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->subaddrAccount(); + WRAPPER_CATCH(0) } // virtual std::string address() const = 0; const char* MONERO_CoinsInfo_address(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); std::string str = coinsInfo->address(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual std::string addressLabel() const = 0; const char* MONERO_CoinsInfo_addressLabel(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); std::string str = coinsInfo->addressLabel(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual std::string keyImage() const = 0; const char* MONERO_CoinsInfo_keyImage(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); std::string str = coinsInfo->keyImage(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual uint64_t unlockTime() const = 0; uint64_t MONERO_CoinsInfo_unlockTime(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->unlockTime(); + WRAPPER_CATCH(0) } // virtual bool unlocked() const = 0; bool MONERO_CoinsInfo_unlocked(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->unlocked(); + WRAPPER_CATCH(false) } // virtual std::string pubKey() const = 0; const char* MONERO_CoinsInfo_pubKey(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); std::string str = coinsInfo->pubKey(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual bool coinbase() const = 0; bool MONERO_CoinsInfo_coinbase(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); return coinsInfo->coinbase(); + WRAPPER_CATCH(false) } // virtual std::string description() const = 0; const char* MONERO_CoinsInfo_description(void* coinsInfo_ptr) { + WRAPPER_TRY() Monero::CoinsInfo *coinsInfo = reinterpret_cast(coinsInfo_ptr); std::string str = coinsInfo->description(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } @@ -567,8 +735,10 @@ const char* MONERO_CoinsInfo_description(void* coinsInfo_ptr) { // virtual ~Coins() = 0; // virtual int count() const = 0; int MONERO_Coins_count(void* coins_ptr) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->count(); + WRAPPER_CATCH(0) } // virtual CoinsInfo * coin(int index) const = 0; void* MONERO_Coins_coin(void* coins_ptr, int index) { @@ -577,8 +747,10 @@ void* MONERO_Coins_coin(void* coins_ptr, int index) { } int MONERO_Coins_getAll_size(void* coins_ptr) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->getAll().size(); + WRAPPER_CATCH(0) } void* MONERO_Coins_getAll_byIndex(void* coins_ptr, int index) { Monero::Coins *coins = reinterpret_cast(coins_ptr); @@ -588,80 +760,104 @@ void* MONERO_Coins_getAll_byIndex(void* coins_ptr, int index) { // virtual std::vector getAll() const = 0; // virtual void refresh() = 0; void MONERO_Coins_refresh(void* coins_ptr) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->refresh(); + WRAPPER_CATCH_VOID() } // virtual void setFrozen(std::string public_key) = 0; void MONERO_Coins_setFrozenByPublicKey(void* coins_ptr, const char* public_key) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->setFrozen(std::string(public_key)); + WRAPPER_CATCH_VOID() } // virtual void setFrozen(int index) = 0; void MONERO_Coins_setFrozen(void* coins_ptr, int index) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->setFrozen(index); + WRAPPER_CATCH_VOID() } // virtual void thaw(int index) = 0; void MONERO_Coins_thaw(void* coins_ptr, int index) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->thaw(index); + WRAPPER_CATCH_VOID() } // virtual void thaw(std::string public_key) = 0; void MONERO_Coins_thawByPublicKey(void* coins_ptr, const char* public_key) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->thaw(std::string(public_key)); + WRAPPER_CATCH_VOID() } // virtual bool isTransferUnlocked(uint64_t unlockTime, uint64_t blockHeight) = 0; bool MONERO_Coins_isTransferUnlocked(void* coins_ptr, uint64_t unlockTime, uint64_t blockHeight) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); return coins->isTransferUnlocked(unlockTime, blockHeight); + WRAPPER_CATCH(false) } // virtual void setDescription(const std::string &public_key, const std::string &description) = 0; void MONERO_Coins_setDescription(void* coins_ptr, const char* public_key, const char* description) { + WRAPPER_TRY() Monero::Coins *coins = reinterpret_cast(coins_ptr); - coins->setDescription(std::string(public_key), std::string(description)); + return coins->setDescription(std::string(public_key), std::string(description)); + WRAPPER_CATCH_VOID() } // SubaddressRow // std::string extra; const char* MONERO_SubaddressRow_extra(void* subaddressRow_ptr) { + WRAPPER_TRY() Monero::SubaddressRow *subaddressRow = reinterpret_cast(subaddressRow_ptr); std::string str = subaddressRow->extra; const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getAddress() const {return m_address;} const char* MONERO_SubaddressRow_getAddress(void* subaddressRow_ptr) { + WRAPPER_TRY() Monero::SubaddressRow *subaddressRow = reinterpret_cast(subaddressRow_ptr); std::string str = subaddressRow->getAddress(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getLabel() const {return m_label;} const char* MONERO_SubaddressRow_getLabel(void* subaddressRow_ptr) { + WRAPPER_TRY() Monero::SubaddressRow *subaddressRow = reinterpret_cast(subaddressRow_ptr); std::string str = subaddressRow->getLabel(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::size_t getRowId() const {return m_rowId;} size_t MONERO_SubaddressRow_getRowId(void* subaddressRow_ptr) { + WRAPPER_TRY() Monero::SubaddressRow *subaddressRow = reinterpret_cast(subaddressRow_ptr); return subaddressRow->getRowId(); + WRAPPER_CATCH(0) } // Subaddress int MONERO_Subaddress_getAll_size(void* subaddress_ptr) { + WRAPPER_TRY() Monero::Subaddress *subaddress = reinterpret_cast(subaddress_ptr); return subaddress->getAll().size(); + WRAPPER_CATCH(0) } void* MONERO_Subaddress_getAll_byIndex(void* subaddress_ptr, int index) { Monero::Subaddress *subaddress = reinterpret_cast(subaddress_ptr); @@ -669,71 +865,89 @@ void* MONERO_Subaddress_getAll_byIndex(void* subaddress_ptr, int index) { } // virtual void addRow(uint32_t accountIndex, const std::string &label) = 0; void MONERO_Subaddress_addRow(void* subaddress_ptr, uint32_t accountIndex, const char* label) { + WRAPPER_TRY() Monero::Subaddress *subaddress = reinterpret_cast(subaddress_ptr); return subaddress->addRow(accountIndex, std::string(label)); + WRAPPER_CATCH_VOID() } // virtual void setLabel(uint32_t accountIndex, uint32_t addressIndex, const std::string &label) = 0; void MONERO_Subaddress_setLabel(void* subaddress_ptr, uint32_t accountIndex, uint32_t addressIndex, const char* label) { + WRAPPER_TRY() Monero::Subaddress *subaddress = reinterpret_cast(subaddress_ptr); return subaddress->setLabel(accountIndex, addressIndex, std::string(label)); + WRAPPER_CATCH_VOID() } // virtual void refresh(uint32_t accountIndex) = 0; void MONERO_Subaddress_refresh(void* subaddress_ptr, uint32_t accountIndex) { + WRAPPER_TRY() Monero::Subaddress *subaddress = reinterpret_cast(subaddress_ptr); return subaddress->refresh(accountIndex); + WRAPPER_CATCH_VOID() } // SubaddressAccountRow // std::string extra; const char* MONERO_SubaddressAccountRow_extra(void* subaddressAccountRow_ptr) { + WRAPPER_TRY() Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast(subaddressAccountRow_ptr); std::string str = subaddressAccountRow->extra; const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getAddress() const {return m_address;} const char* MONERO_SubaddressAccountRow_getAddress(void* subaddressAccountRow_ptr) { + WRAPPER_TRY() Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast(subaddressAccountRow_ptr); std::string str = subaddressAccountRow->getAddress(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getLabel() const {return m_label;} const char* MONERO_SubaddressAccountRow_getLabel(void* subaddressAccountRow_ptr) { + WRAPPER_TRY() Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast(subaddressAccountRow_ptr); std::string str = subaddressAccountRow->getLabel(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getBalance() const {return m_balance;} const char* MONERO_SubaddressAccountRow_getBalance(void* subaddressAccountRow_ptr) { + WRAPPER_TRY() Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast(subaddressAccountRow_ptr); std::string str = subaddressAccountRow->getBalance(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::string getUnlockedBalance() const {return m_unlockedBalance;} const char* MONERO_SubaddressAccountRow_getUnlockedBalance(void* subaddressAccountRow_ptr) { + WRAPPER_TRY() Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast(subaddressAccountRow_ptr); std::string str = subaddressAccountRow->getUnlockedBalance(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // std::size_t getRowId() const {return m_rowId;} size_t MONERO_SubaddressAccountRow_getRowId(void* subaddressAccountRow_ptr) { + WRAPPER_TRY() Monero::SubaddressAccountRow *subaddressAccountRow = reinterpret_cast(subaddressAccountRow_ptr); return subaddressAccountRow->getRowId(); + WRAPPER_CATCH(0) } // struct SubaddressAccount @@ -741,8 +955,10 @@ size_t MONERO_SubaddressAccountRow_getRowId(void* subaddressAccountRow_ptr) { // virtual ~SubaddressAccount() = 0; // virtual std::vector getAll() const = 0; int MONERO_SubaddressAccount_getAll_size(void* subaddressAccount_ptr) { + WRAPPER_TRY() Monero::SubaddressAccount *subaddress = reinterpret_cast(subaddressAccount_ptr); return subaddress->getAll().size(); + WRAPPER_CATCH(0) } void* MONERO_SubaddressAccount_getAll_byIndex(void* subaddressAccount_ptr, int index) { Monero::SubaddressAccount *subaddress = reinterpret_cast(subaddressAccount_ptr); @@ -750,41 +966,55 @@ void* MONERO_SubaddressAccount_getAll_byIndex(void* subaddressAccount_ptr, int i } // virtual void addRow(const std::string &label) = 0; void MONERO_SubaddressAccount_addRow(void* subaddressAccount_ptr, const char* label) { + WRAPPER_TRY() Monero::SubaddressAccount *subaddress = reinterpret_cast(subaddressAccount_ptr); return subaddress->addRow(std::string(label)); + WRAPPER_CATCH_VOID() } // virtual void setLabel(uint32_t accountIndex, const std::string &label) = 0; void MONERO_SubaddressAccount_setLabel(void* subaddressAccount_ptr, uint32_t accountIndex, const char* label) { + WRAPPER_TRY() Monero::SubaddressAccount *subaddress = reinterpret_cast(subaddressAccount_ptr); return subaddress->setLabel(accountIndex, std::string(label)); + WRAPPER_CATCH_VOID() } // virtual void refresh() = 0; void MONERO_SubaddressAccount_refresh(void* subaddressAccount_ptr) { + WRAPPER_TRY() Monero::SubaddressAccount *subaddress = reinterpret_cast(subaddressAccount_ptr); return subaddress->refresh(); + WRAPPER_CATCH_VOID() } // MultisigState // bool isMultisig; bool MONERO_MultisigState_isMultisig(void* multisigState_ptr) { + WRAPPER_TRY() Monero::MultisigState *multisigState = reinterpret_cast(multisigState_ptr); return multisigState->isMultisig; + WRAPPER_CATCH(false) } // bool isReady; bool MONERO_MultisigState_isReady(void* multisigState_ptr) { + WRAPPER_TRY() Monero::MultisigState *multisigState = reinterpret_cast(multisigState_ptr); return multisigState->isReady; + WRAPPER_CATCH(false) } // uint32_t threshold; uint32_t MONERO_MultisigState_threshold(void* multisigState_ptr) { + WRAPPER_TRY() Monero::MultisigState *multisigState = reinterpret_cast(multisigState_ptr); return multisigState->threshold; + WRAPPER_CATCH(0) } // uint32_t total; uint32_t MONERO_MultisigState_total(void* multisigState_ptr) { + WRAPPER_TRY() Monero::MultisigState *multisigState = reinterpret_cast(multisigState_ptr); return multisigState->total; + WRAPPER_CATCH(0) } // DeviceProgress @@ -792,364 +1022,468 @@ uint32_t MONERO_MultisigState_total(void* multisigState_ptr) { // virtual double progress() const { return m_progress; } bool MONERO_DeviceProgress_progress(void* deviceProgress_ptr) { + WRAPPER_TRY() Monero::DeviceProgress *deviceProgress = reinterpret_cast(deviceProgress_ptr); return deviceProgress->progress(); + WRAPPER_CATCH(false) } // virtual bool indeterminate() const { return m_indeterminate; } bool MONERO_DeviceProgress_indeterminate(void* deviceProgress_ptr) { + WRAPPER_TRY() Monero::DeviceProgress *deviceProgress = reinterpret_cast(deviceProgress_ptr); return deviceProgress->indeterminate(); + WRAPPER_CATCH(false) } // Wallet const char* MONERO_Wallet_seed(void* wallet_ptr, const char* seed_offset) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->seed(std::string(seed_offset)); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_getSeedLanguage(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->getSeedLanguage(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } void MONERO_Wallet_setSeedLanguage(void* wallet_ptr, const char* arg) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setSeedLanguage(std::string(arg)); + WRAPPER_CATCH_VOID() } int MONERO_Wallet_status(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->status(); + WRAPPER_CATCH(0) } const char* MONERO_Wallet_errorString(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->errorString(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } bool MONERO_Wallet_setPassword(void* wallet_ptr, const char* password) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setPassword(std::string(password)); + WRAPPER_CATCH(false) } const char* MONERO_Wallet_getPassword(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->getPassword(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } bool MONERO_Wallet_setDevicePin(void* wallet_ptr, const char* pin) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setDevicePin(std::string(pin)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_setDevicePassphrase(void* wallet_ptr, const char* passphrase) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setDevicePassphrase(std::string(passphrase)); + WRAPPER_CATCH(false) } const char* MONERO_Wallet_address(void* wallet_ptr, uint64_t accountIndex, uint64_t addressIndex) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->address(accountIndex, addressIndex); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_path(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->path(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } int MONERO_Wallet_nettype(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->nettype(); + WRAPPER_CATCH(0) } uint8_t MONERO_Wallet_useForkRules(void* wallet_ptr, uint8_t version, int64_t early_blocks) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->useForkRules(version, early_blocks); + WRAPPER_CATCH(0) } const char* MONERO_Wallet_integratedAddress(void* wallet_ptr, const char* payment_id) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->integratedAddress(std::string(payment_id)); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_secretViewKey(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->secretViewKey(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_publicViewKey(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->publicViewKey(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_secretSpendKey(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->secretSpendKey(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_publicSpendKey(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->publicSpendKey(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_publicMultisigSignerKey(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->publicMultisigSignerKey(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } void MONERO_Wallet_stop(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); - wallet->stop(); + return wallet->stop(); + WRAPPER_CATCH_VOID() } bool MONERO_Wallet_store(void* wallet_ptr, const char* path) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->store(std::string(path)); + WRAPPER_CATCH(false) } const char* MONERO_Wallet_filename(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->filename(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_keysFilename(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->keysFilename(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual bool init(const std::string &daemon_address, uint64_t upper_transaction_size_limit = 0, const std::string &daemon_username = "", const std::string &daemon_password = "", bool use_ssl = false, bool lightWallet = false, const std::string &proxy_address = "") = 0; bool MONERO_Wallet_init(void* wallet_ptr, const char* daemon_address, uint64_t upper_transaction_size_limit, const char* daemon_username, const char* daemon_password, bool use_ssl, bool lightWallet, const char* proxy_address) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->init(std::string(daemon_address), upper_transaction_size_limit, std::string(daemon_username), std::string(daemon_password), use_ssl, lightWallet, std::string(proxy_address)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_createWatchOnly(void* wallet_ptr, const char* path, const char* password, const char* language) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->createWatchOnly(std::string(path), std::string(password), std::string(language)); + WRAPPER_CATCH(false) } void MONERO_Wallet_setRefreshFromBlockHeight(void* wallet_ptr, uint64_t refresh_from_block_height) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setRefreshFromBlockHeight(refresh_from_block_height); + WRAPPER_CATCH_VOID() } uint64_t MONERO_Wallet_getRefreshFromBlockHeight(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getRefreshFromBlockHeight(); + WRAPPER_CATCH(0) } void MONERO_Wallet_setRecoveringFromSeed(void* wallet_ptr, bool recoveringFromSeed) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setRecoveringFromSeed(recoveringFromSeed); + WRAPPER_CATCH_VOID() } void MONERO_Wallet_setRecoveringFromDevice(void* wallet_ptr, bool recoveringFromDevice) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setRecoveringFromDevice(recoveringFromDevice); + WRAPPER_CATCH_VOID() } void MONERO_Wallet_setSubaddressLookahead(void* wallet_ptr, uint32_t major, uint32_t minor) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setSubaddressLookahead(major, minor); + WRAPPER_CATCH_VOID() } bool MONERO_Wallet_connectToDaemon(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->connectToDaemon(); + WRAPPER_CATCH(false) } int MONERO_Wallet_connected(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->connected(); + WRAPPER_CATCH(0) } void MONERO_Wallet_setTrustedDaemon(void* wallet_ptr, bool arg) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setTrustedDaemon(arg); + WRAPPER_CATCH_VOID() } bool MONERO_Wallet_trustedDaemon(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->trustedDaemon(); + WRAPPER_CATCH(false) } bool MONERO_Wallet_setProxy(void* wallet_ptr, const char* address) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setProxy(std::string(address)); + WRAPPER_CATCH(false) } uint64_t MONERO_Wallet_balance(void* wallet_ptr, uint32_t accountIndex) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->balance(accountIndex); + WRAPPER_CATCH(0) } uint64_t MONERO_Wallet_unlockedBalance(void* wallet_ptr, uint32_t accountIndex) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->unlockedBalance(accountIndex); + WRAPPER_CATCH(0) } uint64_t MONERO_Wallet_viewOnlyBalance(void* wallet_ptr, uint32_t accountIndex) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->viewOnlyBalance(accountIndex); + WRAPPER_CATCH(0) } // TODO bool MONERO_Wallet_watchOnly(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->watchOnly(); + WRAPPER_CATCH(false) } bool MONERO_Wallet_isDeterministic(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->isDeterministic(); + WRAPPER_CATCH(false) } uint64_t MONERO_Wallet_blockChainHeight(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->blockChainHeight(); + WRAPPER_CATCH(0) } uint64_t MONERO_Wallet_approximateBlockChainHeight(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->approximateBlockChainHeight(); + WRAPPER_CATCH(0) } uint64_t MONERO_Wallet_estimateBlockChainHeight(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->estimateBlockChainHeight(); + WRAPPER_CATCH(0) } uint64_t MONERO_Wallet_daemonBlockChainHeight(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->daemonBlockChainHeight(); -} - -uint64_t daemonBlockChainHeight_cached = 0; - -uint64_t MONERO_Wallet_daemonBlockChainHeight_cached(void* wallet_ptr) { - return daemonBlockChainHeight_cached; -} - -void MONERO_Wallet_daemonBlockChainHeight_runThread(void* wallet_ptr, int seconds) { - std::cout << "DEPRECATED: this was used as an experiment, and will be removed in newer release. use ${COIN}_cw_* listener functions instead." << std::endl; - while (true) { - Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); - daemonBlockChainHeight_cached = wallet->daemonBlockChainHeight(); - sleep(seconds); - std::cout << "MONERO: TICK: MONERO_Wallet_daemonBlockChainHeight_runThread(" << seconds << "): " << daemonBlockChainHeight_cached << std::endl; - } + WRAPPER_CATCH(0) } uint64_t MONERO_Wallet_daemonBlockChainTargetHeight(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->daemonBlockChainTargetHeight(); + WRAPPER_CATCH(0) } bool MONERO_Wallet_synchronized(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->synchronized(); + WRAPPER_CATCH(false) } const char* MONERO_Wallet_displayAmount(uint64_t amount) { + WRAPPER_TRY() std::string str = Monero::Wallet::displayAmount(amount); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // static uint64_t amountFromString(const std::string &amount); uint64_t MONERO_Wallet_amountFromString(const char* amount) { + WRAPPER_TRY() return Monero::Wallet::amountFromString(amount); + WRAPPER_CATCH(0) } // static uint64_t amountFromDouble(double amount); uint64_t MONERO_Wallet_amountFromDouble(double amount) { + WRAPPER_TRY() return Monero::Wallet::amountFromDouble(amount); + WRAPPER_CATCH(0) } // static std::string genPaymentId(); const char* MONERO_Wallet_genPaymentId() { + WRAPPER_TRY() std::string str = Monero::Wallet::genPaymentId(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // static bool paymentIdValid(const std::string &paiment_id); bool MONERO_Wallet_paymentIdValid(const char* paiment_id) { + WRAPPER_TRY() return Monero::Wallet::paymentIdValid(std::string(paiment_id)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_addressValid(const char* str, int nettype) { + WRAPPER_TRY() // Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return Monero::Wallet::addressValid(std::string(str), nettype); + WRAPPER_CATCH(false) } bool MONERO_Wallet_keyValid(const char* secret_key_string, const char* address_string, bool isViewKey, int nettype) { + WRAPPER_TRY() std::string error; return Monero::Wallet::keyValid(std::string(secret_key_string), std::string(address_string), isViewKey, nettype, error); + WRAPPER_CATCH(false) } const char* MONERO_Wallet_keyValid_error(const char* secret_key_string, const char* address_string, bool isViewKey, int nettype) { + WRAPPER_TRY() std::string str; Monero::Wallet::keyValid(std::string(secret_key_string), std::string(address_string), isViewKey, nettype, str); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() + } const char* MONERO_Wallet_paymentIdFromAddress(const char* strarg, int nettype) { + WRAPPER_TRY() std::string str = Monero::Wallet::paymentIdFromAddress(std::string(strarg), nettype); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } uint64_t MONERO_Wallet_maximumAllowedAmount() { + WRAPPER_TRY() return Monero::Wallet::maximumAllowedAmount(); + WRAPPER_CATCH(0) } void MONERO_Wallet_init3(void* wallet_ptr, const char* argv0, const char* default_log_base_name, const char* log_path, bool console) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->init(argv0, default_log_base_name, log_path, console); + WRAPPER_CATCH_VOID() } const char* MONERO_Wallet_getPolyseed(void* wallet_ptr, const char* passphrase) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string seed = ""; std::string _passphrase = std::string(passphrase); @@ -1159,9 +1493,11 @@ const char* MONERO_Wallet_getPolyseed(void* wallet_ptr, const char* passphrase) char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // static bool createPolyseed(std::string &seed_words, std::string &err, const std::string &language = "English"); const char* MONERO_Wallet_createPolyseed(const char* language) { + WRAPPER_TRY() std::string seed_words = ""; std::string err; Monero::Wallet::createPolyseed(seed_words, err, std::string(language)); @@ -1172,68 +1508,97 @@ const char* MONERO_Wallet_createPolyseed(const char* language) { char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } void MONERO_Wallet_startRefresh(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->startRefresh(); + WRAPPER_CATCH_VOID() } void MONERO_Wallet_pauseRefresh(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->pauseRefresh(); + WRAPPER_CATCH_VOID() } bool MONERO_Wallet_refresh(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->refresh(); + WRAPPER_CATCH(false) } void MONERO_Wallet_refreshAsync(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->refreshAsync(); + WRAPPER_CATCH_VOID() } bool MONERO_Wallet_rescanBlockchain(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->rescanBlockchain(); + WRAPPER_CATCH(false) } void MONERO_Wallet_rescanBlockchainAsync(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->rescanBlockchainAsync(); + WRAPPER_CATCH_VOID() } void MONERO_Wallet_setAutoRefreshInterval(void* wallet_ptr, int millis) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setAutoRefreshInterval(millis); + WRAPPER_CATCH_VOID() } int MONERO_Wallet_autoRefreshInterval(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->autoRefreshInterval(); + WRAPPER_CATCH(0) } void MONERO_Wallet_addSubaddressAccount(void* wallet_ptr, const char* label) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->addSubaddressAccount(std::string(label)); + WRAPPER_CATCH_VOID() } size_t MONERO_Wallet_numSubaddressAccounts(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->numSubaddressAccounts(); + WRAPPER_CATCH(0) } size_t MONERO_Wallet_numSubaddresses(void* wallet_ptr, uint32_t accountIndex) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->numSubaddresses(accountIndex); + WRAPPER_CATCH(0) } void MONERO_Wallet_addSubaddress(void* wallet_ptr, uint32_t accountIndex, const char* label) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->addSubaddress(accountIndex, std::string(label)); + WRAPPER_CATCH_VOID() } const char* MONERO_Wallet_getSubaddressLabel(void* wallet_ptr, uint32_t accountIndex, uint32_t addressIndex) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->getSubaddressLabel(accountIndex, addressIndex); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } void MONERO_Wallet_setSubaddressLabel(void* wallet_ptr, uint32_t accountIndex, uint32_t addressIndex, const char* label) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setSubaddressLabel(accountIndex, addressIndex, std::string(label)); + WRAPPER_CATCH_VOID() } void* MONERO_Wallet_multisig(void* wallet_ptr) { @@ -1243,33 +1608,40 @@ void* MONERO_Wallet_multisig(void* wallet_ptr) { } const char* MONERO_Wallet_getMultisigInfo(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->getMultisigInfo(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_makeMultisig(void* wallet_ptr, const char* info, const char* info_separator, uint32_t threshold) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->makeMultisig(splitStringVector(std::string(info), std::string(info_separator)), threshold); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_exchangeMultisigKeys(void* wallet_ptr, const char* info, const char* info_separator, bool force_update_use_with_caution) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->exchangeMultisigKeys(splitStringVector(std::string(info), std::string(info_separator)), force_update_use_with_caution); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_exportMultisigImages(void* wallet_ptr, const char* separator) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str; wallet->exportMultisigImages(str); @@ -1277,16 +1649,21 @@ const char* MONERO_Wallet_exportMultisigImages(void* wallet_ptr, const char* sep char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } size_t MONERO_Wallet_importMultisigImages(void* wallet_ptr, const char* info, const char* info_separator) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->importMultisigImages(splitStringVector(std::string(info), std::string(info_separator))); + WRAPPER_CATCH(0) } size_t MONERO_Wallet_hasMultisigPartialKeyImages(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->hasMultisigPartialKeyImages(); + WRAPPER_CATCH(0) } void* MONERO_Wallet_restoreMultisigTransaction(void* wallet_ptr, const char* signData) { @@ -1358,87 +1735,121 @@ void* MONERO_Wallet_loadUnsignedTxUR(void* wallet_ptr, const char* input) { return wallet->loadUnsignedTxUR(std::string(input)); } bool MONERO_Wallet_submitTransaction(void* wallet_ptr, const char* fileName) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->submitTransaction(std::string(fileName)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_submitTransactionUR(void* wallet_ptr, const char* input) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->submitTransactionUR(std::string(input)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_hasUnknownKeyImages(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->hasUnknownKeyImages(); + WRAPPER_CATCH(false) } bool MONERO_Wallet_exportKeyImages(void* wallet_ptr, const char* filename, bool all) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->exportKeyImages(std::string(filename), all); + WRAPPER_CATCH(false) } const char* MONERO_Wallet_exportKeyImagesUR(void* wallet_ptr, size_t max_fragment_length, bool all) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->exportKeyImagesUR(max_fragment_length, all); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } bool MONERO_Wallet_importKeyImages(void* wallet_ptr, const char* filename) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->importKeyImages(std::string(filename)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_importKeyImagesUR(void* wallet_ptr, const char* input) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->importKeyImagesUR(std::string(input)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_exportOutputs(void* wallet_ptr, const char* filename, bool all) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->exportOutputs(std::string(filename), all); + WRAPPER_CATCH(false) } const char* MONERO_Wallet_exportOutputsUR(void* wallet_ptr, size_t max_fragment_length, bool all) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->exportOutputsUR(max_fragment_length, all); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } bool MONERO_Wallet_importOutputs(void* wallet_ptr, const char* filename) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->importOutputs(std::string(filename)); + WRAPPER_CATCH(false) } bool MONERO_Wallet_importOutputsUR(void* wallet_ptr, const char* input) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->importOutputsUR(std::string(input)); + WRAPPER_CATCH(false) } // virtual bool setupBackgroundSync(const BackgroundSyncType background_sync_type, const std::string &wallet_password, const optional &background_cache_password) = 0; bool MONERO_Wallet_setupBackgroundSync(void* wallet_ptr, int background_sync_type, const char* wallet_password, const char* background_cache_password) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setupBackgroundSync(Monero::Wallet::BackgroundSyncType::BackgroundSync_CustomPassword, std::string(wallet_password), std::string(background_cache_password)); + WRAPPER_CATCH(false) } // virtual BackgroundSyncType getBackgroundSyncType() const = 0; int MONERO_Wallet_getBackgroundSyncType(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getBackgroundSyncType(); + WRAPPER_CATCH(0) } // virtual bool startBackgroundSync() = 0; bool MONERO_Wallet_startBackgroundSync(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->startBackgroundSync(); + WRAPPER_CATCH(false) } // virtual bool stopBackgroundSync(const std::string &wallet_password) = 0; bool MONERO_Wallet_stopBackgroundSync(void* wallet_ptr, const char* wallet_password) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->stopBackgroundSync(std::string(wallet_password)); + WRAPPER_CATCH(false) } // virtual bool isBackgroundSyncing() const = 0; bool MONERO_Wallet_isBackgroundSyncing(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->hasUnknownKeyImages(); + WRAPPER_CATCH(false) } // virtual bool isBackgroundWallet() const = 0; bool MONERO_Wallet_isBackgroundWallet(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->isBackgroundWallet(); + WRAPPER_CATCH(false) } void* MONERO_Wallet_history(void* wallet_ptr) { Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); @@ -1465,125 +1876,166 @@ void* MONERO_Wallet_subaddressAccount(void* wallet_ptr) { } // virtual uint32_t defaultMixin() const = 0; uint32_t MONERO_Wallet_defaultMixin(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->defaultMixin(); + WRAPPER_CATCH(0) } // virtual void setDefaultMixin(uint32_t arg) = 0; void MONERO_Wallet_setDefaultMixin(void* wallet_ptr, uint32_t arg) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setDefaultMixin(arg); + WRAPPER_CATCH_VOID() } // virtual bool setCacheAttribute(const std::string &key, const std::string &val) = 0; bool MONERO_Wallet_setCacheAttribute(void* wallet_ptr, const char* key, const char* val) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setCacheAttribute(std::string(key), std::string(val)); + WRAPPER_CATCH(false) } // virtual std::string getCacheAttribute(const std::string &key) const = 0; const char* MONERO_Wallet_getCacheAttribute(void* wallet_ptr, const char* key) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->getCacheAttribute(std::string(key)); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual bool setUserNote(const std::string &txid, const std::string ¬e) = 0; bool MONERO_Wallet_setUserNote(void* wallet_ptr, const char* txid, const char* note) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setUserNote(std::string(txid), std::string(note)); + WRAPPER_CATCH(false) } // virtual std::string getUserNote(const std::string &txid) const = 0; const char* MONERO_Wallet_getUserNote(void* wallet_ptr, const char* txid) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->getUserNote(std::string(txid)); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_getTxKey(void* wallet_ptr, const char* txid) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->getTxKey(std::string(txid)); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_Wallet_signMessage(void* wallet_ptr, const char* message, const char* address) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = wallet->signMessage(std::string(message), std::string(address)); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } bool MONERO_Wallet_verifySignedMessage(void* wallet_ptr, const char* message, const char* address, const char* signature) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); bool v = wallet->verifySignedMessage(std::string(message), std::string(address), std::string(signature)); return v; + WRAPPER_CATCH(false) } bool MONERO_Wallet_rescanSpent(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->rescanSpent(); + WRAPPER_CATCH(false) } void MONERO_Wallet_setOffline(void* wallet_ptr, bool offline) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setOffline(offline); + WRAPPER_CATCH_VOID() } // virtual bool isOffline() const = 0; bool MONERO_Wallet_isOffline(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->isOffline(); + WRAPPER_CATCH(false) } void MONERO_Wallet_segregatePreForkOutputs(void* wallet_ptr, bool segregate) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->segregatePreForkOutputs(segregate); + WRAPPER_CATCH_VOID() } // virtual void segregationHeight(uint64_t height) = 0; void MONERO_Wallet_segregationHeight(void* wallet_ptr, uint64_t height) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->segregationHeight(height); + WRAPPER_CATCH_VOID() } // virtual void keyReuseMitigation2(bool mitigation) = 0; void MONERO_Wallet_keyReuseMitigation2(void* wallet_ptr, bool mitigation) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->keyReuseMitigation2(mitigation); + WRAPPER_CATCH_VOID() } // virtual bool lightWalletLogin(bool &isNewWallet) const = 0; // virtual bool lightWalletImportWalletRequest(std::string &payment_id, uint64_t &fee, bool &new_request, bool &request_fulfilled, std::string &payment_address, std::string &status) = 0; // virtual bool lockKeysFile() = 0; bool MONERO_Wallet_lockKeysFile(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->lockKeysFile(); + WRAPPER_CATCH(false) } // virtual bool unlockKeysFile() = 0; bool MONERO_Wallet_unlockKeysFile(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->unlockKeysFile(); + WRAPPER_CATCH(false) } // virtual bool isKeysFileLocked() = 0; bool MONERO_Wallet_isKeysFileLocked(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->isKeysFileLocked(); + WRAPPER_CATCH(false) } // virtual Device getDeviceType() const = 0; int MONERO_Wallet_getDeviceType(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getDeviceType(); + WRAPPER_CATCH(0) } // virtual uint64_t coldKeyImageSync(uint64_t &spent, uint64_t &unspent) = 0; uint64_t MONERO_Wallet_coldKeyImageSync(void* wallet_ptr, uint64_t spent, uint64_t unspent) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->coldKeyImageSync(spent, unspent); + WRAPPER_CATCH(0) } // virtual void deviceShowAddress(uint32_t accountIndex, uint32_t addressIndex, const std::string &paymentId) = 0; const char* MONERO_Wallet_deviceShowAddress(void* wallet_ptr, uint32_t accountIndex, uint32_t addressIndex) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); std::string str = ""; wallet->deviceShowAddress(accountIndex, addressIndex, str); @@ -1591,25 +2043,34 @@ const char* MONERO_Wallet_deviceShowAddress(void* wallet_ptr, uint32_t accountIn char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // virtual bool reconnectDevice() = 0; bool MONERO_Wallet_reconnectDevice(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->reconnectDevice(); + WRAPPER_CATCH(false) }; uint64_t MONERO_Wallet_getBytesReceived(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getBytesReceived(); + WRAPPER_CATCH(0) } uint64_t MONERO_Wallet_getBytesSent(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getBytesSent(); + WRAPPER_CATCH(0) } bool MONERO_Wallet_getStateIsConnected(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getStateIsConnected(); + WRAPPER_CATCH(false) } unsigned char* MONERO_Wallet_getSendToDevice(void* wallet_ptr) { @@ -1618,8 +2079,10 @@ unsigned char* MONERO_Wallet_getSendToDevice(void* wallet_ptr) { } size_t MONERO_Wallet_getSendToDeviceLength(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getSendToDeviceLength(); + WRAPPER_CATCH(0) } unsigned char* MONERO_Wallet_getReceivedFromDevice(void* wallet_ptr) { @@ -1628,28 +2091,38 @@ unsigned char* MONERO_Wallet_getReceivedFromDevice(void* wallet_ptr) { } size_t MONERO_Wallet_getReceivedFromDeviceLength(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getReceivedFromDeviceLength(); + WRAPPER_CATCH(0) } bool MONERO_Wallet_getWaitsForDeviceSend(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getWaitsForDeviceSend(); + WRAPPER_CATCH(false) } bool MONERO_Wallet_getWaitsForDeviceReceive(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->getWaitsForDeviceReceive(); + WRAPPER_CATCH(false) } void MONERO_Wallet_setDeviceReceivedData(void* wallet_ptr, unsigned char* data, size_t len) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setDeviceReceivedData(data, len); + WRAPPER_CATCH_VOID() } void MONERO_Wallet_setDeviceSendData(void* wallet_ptr, unsigned char* data, size_t len) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wallet->setDeviceSendData(data, len); + WRAPPER_CATCH_VOID() } void* MONERO_WalletManager_createWallet(void* wm_ptr, const char* path, const char* password, const char* language, int networkType) { @@ -1752,106 +2225,140 @@ void* MONERO_WalletManager_createWalletFromPolyseed(void* wm_ptr, const char* pa bool MONERO_WalletManager_closeWallet(void* wm_ptr, void* wallet_ptr, bool store) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return wm->closeWallet(wallet, store); + WRAPPER_CATCH(false) } bool MONERO_WalletManager_walletExists(void* wm_ptr, const char* path) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->walletExists(std::string(path)); + WRAPPER_CATCH(false) } // virtual bool verifyWalletPassword(const std::string &keys_file_name, const std::string &password, bool no_spend_key, uint64_t kdf_rounds = 1) const = 0; bool MONERO_WalletManager_verifyWalletPassword(void* wm_ptr, const char* keys_file_name, const char* password, bool no_spend_key, uint64_t kdf_rounds) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->verifyWalletPassword(std::string(keys_file_name), std::string(password), no_spend_key, kdf_rounds); + WRAPPER_CATCH(false) } // virtual bool queryWalletDevice(Wallet::Device& device_type, const std::string &keys_file_name, const std::string &password, uint64_t kdf_rounds = 1) const = 0; int MONERO_WalletManager_queryWalletDevice(void* wm_ptr, const char* keys_file_name, const char* password, uint64_t kdf_rounds) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); Monero::Wallet::Device device_type; wm->queryWalletDevice(device_type, std::string(keys_file_name), std::string(password), kdf_rounds); return device_type; + WRAPPER_CATCH(0) } // virtual std::vector findWallets(const std::string &path) = 0; const char* MONERO_WalletManager_findWallets(void* wm_ptr, const char* path, const char* separator) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return vectorToString(wm->findWallets(std::string(path)), std::string(separator)); + WRAPPER_CATCH_CONST_CHAR() } const char* MONERO_WalletManager_errorString(void* wm_ptr) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); std::string str = wm->errorString(); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } void MONERO_WalletManager_setDaemonAddress(void* wm_ptr, const char* address) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->setDaemonAddress(std::string(address)); + WRAPPER_CATCH_VOID() } bool MONERO_WalletManager_setProxy(void* wm_ptr, const char* address) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->setProxy(std::string(address)); + WRAPPER_CATCH(false) } // virtual bool connected(uint32_t *version = NULL) = 0; // virtual uint64_t blockchainHeight() = 0; uint64_t MONERO_WalletManager_blockchainHeight(void* wm_ptr) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->blockchainHeight(); + WRAPPER_CATCH(0) } // virtual uint64_t blockchainTargetHeight() = 0; uint64_t MONERO_WalletManager_blockchainTargetHeight(void* wm_ptr) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->blockchainTargetHeight(); + WRAPPER_CATCH(0) } // virtual uint64_t networkDifficulty() = 0; uint64_t MONERO_WalletManager_networkDifficulty(void* wm_ptr) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->networkDifficulty(); + WRAPPER_CATCH(0) } // virtual double miningHashRate() = 0; double MONERO_WalletManager_miningHashRate(void* wm_ptr) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->miningHashRate(); + WRAPPER_CATCH(0) } // virtual uint64_t blockTarget() = 0; uint64_t MONERO_WalletManager_blockTarget(void* wm_ptr) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->blockTarget(); + WRAPPER_CATCH(0) } // virtual bool isMining() = 0; bool MONERO_WalletManager_isMining(void* wm_ptr) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->isMining(); + WRAPPER_CATCH(false) } // virtual bool startMining(const std::string &address, uint32_t threads = 1, bool background_mining = false, bool ignore_battery = true) = 0; bool MONERO_WalletManager_startMining(void* wm_ptr, const char* address, uint32_t threads, bool backgroundMining, bool ignoreBattery) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->startMining(std::string(address), threads, backgroundMining, ignoreBattery); + WRAPPER_CATCH(false) } // virtual bool stopMining() = 0; bool MONERO_WalletManager_stopMining(void* wm_ptr, const char* address) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); return wm->stopMining(); + WRAPPER_CATCH(false) } // virtual std::string resolveOpenAlias(const std::string &address, bool &dnssec_valid) const = 0; const char* MONERO_WalletManager_resolveOpenAlias(void* wm_ptr, const char* address, bool dnssec_valid) { + WRAPPER_TRY() Monero::WalletManager *wm = reinterpret_cast(wm_ptr); std::string str = wm->resolveOpenAlias(std::string(address), dnssec_valid); const std::string::size_type size = str.size(); char *buffer = new char[size + 1]; //we need extra char for NUL memcpy(buffer, str.c_str(), size + 1); return buffer; + WRAPPER_CATCH_CONST_CHAR() } // WalletManagerFactory @@ -1862,11 +2369,15 @@ void* MONERO_WalletManagerFactory_getWalletManager() { } void MONERO_WalletManagerFactory_setLogLevel(int level) { - Monero::WalletManagerFactory::setLogLevel(level); + WRAPPER_TRY() + return Monero::WalletManagerFactory::setLogLevel(level); + WRAPPER_CATCH_VOID() } void MONERO_WalletManagerFactory_setLogCategories(const char* categories) { - Monero::WalletManagerFactory::setLogCategories(std::string(categories)); + WRAPPER_TRY() + return Monero::WalletManagerFactory::setLogCategories(std::string(categories)); + WRAPPER_CATCH_VOID() } // DEBUG functions @@ -1901,19 +2412,21 @@ void* MONERO_DEBUG_test4(uint64_t x) { } const char* MONERO_DEBUG_test5() { - const char *text = "This is a const char* text"; + const char *text = "This is a const char* text"; return text; } const char* MONERO_DEBUG_test5_std() { - std::string text ("This is a std::string text"); + std::string text("This is a std::string text"); const char *text2 = "This is a text"; return text2; } bool MONERO_DEBUG_isPointerNull(void* wallet_ptr) { + WRAPPER_TRY() Monero::Wallet *wallet = reinterpret_cast(wallet_ptr); return (wallet != NULL); + WRAPPER_CATCH(true) } // cake wallet world @@ -2000,28 +2513,38 @@ void* MONERO_cw_getWalletListener(void* wallet_ptr) { } void MONERO_cw_WalletListener_resetNeedToRefresh(void* cw_walletListener_ptr) { + WRAPPER_TRY() MONERO_cw_WalletListener *listener = reinterpret_cast(cw_walletListener_ptr); listener->cw_resetNeedToRefresh(); + WRAPPER_CATCH_VOID() } bool MONERO_cw_WalletListener_isNeedToRefresh(void* cw_walletListener_ptr) { + WRAPPER_TRY() MONERO_cw_WalletListener *listener = reinterpret_cast(cw_walletListener_ptr); return listener->cw_isNeedToRefresh(); + WRAPPER_CATCH(false) }; bool MONERO_cw_WalletListener_isNewTransactionExist(void* cw_walletListener_ptr) { + WRAPPER_TRY() MONERO_cw_WalletListener *listener = reinterpret_cast(cw_walletListener_ptr); return listener->cw_isNeedToRefresh(); + WRAPPER_CATCH(false) }; void MONERO_cw_WalletListener_resetIsNewTransactionExist(void* cw_walletListener_ptr) { + WRAPPER_TRY() MONERO_cw_WalletListener *listener = reinterpret_cast(cw_walletListener_ptr); listener->cw_isNeedToRefresh(); + WRAPPER_CATCH_VOID() }; uint64_t MONERO_cw_WalletListener_height(void* cw_walletListener_ptr) { + WRAPPER_TRY() MONERO_cw_WalletListener *listener = reinterpret_cast(cw_walletListener_ptr); return listener->cw_isNeedToRefresh(); + WRAPPER_CATCH(0) }; const char* MONERO_checksum_wallet2_api_c_h() { diff --git a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h index 143da40..17c647c 100644 --- a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h +++ b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h @@ -604,8 +604,6 @@ extern ADDAPI uint64_t MONERO_Wallet_approximateBlockChainHeight(void* wallet_pt extern ADDAPI uint64_t MONERO_Wallet_estimateBlockChainHeight(void* wallet_ptr); // virtual uint64_t daemonBlockChainHeight() const = 0; extern ADDAPI uint64_t MONERO_Wallet_daemonBlockChainHeight(void* wallet_ptr); -extern ADDAPI uint64_t MONERO_Wallet_daemonBlockChainHeight_cached(void* wallet_ptr); -extern ADDAPI void MONERO_Wallet_daemonBlockChainHeight_runThread(void* wallet_ptr, int seconds); // virtual uint64_t daemonBlockChainTargetHeight() const = 0; extern ADDAPI uint64_t MONERO_Wallet_daemonBlockChainTargetHeight(void* wallet_ptr); // virtual bool synchronized() const = 0; -- cgit v1.2.3