summaryrefslogtreecommitdiff
path: root/monero_libwallet2_api_c/src/main/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'monero_libwallet2_api_c/src/main/cpp')
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/helpers.cpp13
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/helpers.hpp3
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp55
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h7
4 files changed, 75 insertions, 3 deletions
diff --git a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp
index 3f7c66a..d692879 100644
--- a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp
+++ b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp
@@ -169,6 +169,19 @@ std::set<std::string> splitString(const std::string& str, const std::string& del
return tokens;
}
+std::vector<std::string> splitStringVector(const std::string& str, const std::string& delim) {
+ std::vector<std::string> tokens;
+ if (str.empty()) return tokens;
+ size_t pos = 0;
+ std::string content = str; // Copy of str so we can safely erase content
+ while ((pos = content.find(delim)) != std::string::npos) {
+ tokens.push_back(content.substr(0, pos));
+ content.erase(0, pos + delim.length());
+ }
+ tokens.push_back(content); // Inserting the last token
+ return tokens;
+}
+
std::vector<uint64_t> splitStringUint(const std::string& str, const std::string& delim) {
std::vector<uint64_t> tokens;
if (str.empty()) return tokens;
diff --git a/monero_libwallet2_api_c/src/main/cpp/helpers.hpp b/monero_libwallet2_api_c/src/main/cpp/helpers.hpp
index 9513fc0..c3a64e6 100644
--- a/monero_libwallet2_api_c/src/main/cpp/helpers.hpp
+++ b/monero_libwallet2_api_c/src/main/cpp/helpers.hpp
@@ -9,4 +9,5 @@ const char* vectorToString(const std::vector<uint64_t>& vec, const std::string s
const char* vectorToString(const std::vector<std::set<uint32_t>>& vec, const std::string separator);
const char* vectorToString(const std::set<uint32_t>& intSet, const std::string separator);
std::set<std::string> splitString(const std::string& str, const std::string& delim);
-std::vector<uint64_t> splitStringUint(const std::string& str, const std::string& delim); \ No newline at end of file
+std::vector<uint64_t> splitStringUint(const std::string& str, const std::string& delim);
+std::vector<std::string> splitStringVector(const std::string& str, const std::string& delim); \ No newline at end of file
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 d44c67c..8e12a25 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
@@ -1220,6 +1220,13 @@ void MONERO_Wallet_setSubaddressLabel(void* wallet_ptr, uint32_t accountIndex, u
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
return wallet->setSubaddressLabel(accountIndex, addressIndex, std::string(label));
}
+
+void* MONERO_Wallet_multisig(void* wallet_ptr) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ Monero::MultisigState *mstate_ptr = new Monero::MultisigState(wallet->multisig());
+ return reinterpret_cast<void*>(mstate_ptr);
+}
+
const char* MONERO_Wallet_getMultisigInfo(void* wallet_ptr) {
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
std::string str = wallet->getMultisigInfo();
@@ -1229,6 +1236,50 @@ const char* MONERO_Wallet_getMultisigInfo(void* wallet_ptr) {
return buffer;
}
+const char* MONERO_Wallet_makeMultisig(void* wallet_ptr, const char* info, const char* info_separator, uint32_t threshold) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(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;
+}
+
+const char* MONERO_Wallet_exchangeMultisigKeys(void* wallet_ptr, const char* info, const char* info_separator, bool force_update_use_with_caution) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(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;
+}
+
+const char* MONERO_Wallet_exportMultisigImages(void* wallet_ptr, const char* separator) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ std::string str;
+ wallet->exportMultisigImages(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;
+}
+
+size_t MONERO_Wallet_importMultisigImages(void* wallet_ptr, const char* info, const char* info_separator) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ return wallet->importMultisigImages(splitStringVector(std::string(info), std::string(info_separator)));
+}
+
+size_t MONERO_Wallet_hasMultisigPartialKeyImages(void* wallet_ptr) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ return wallet->hasMultisigPartialKeyImages();
+}
+
+void* MONERO_Wallet_restoreMultisigTransaction(void* wallet_ptr, const char* signData) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ return reinterpret_cast<void*>(wallet->restoreMultisigTransaction(std::string(signData)));
+}
+
+
Monero::PendingTransaction::Priority PendingTransaction_Priority_fromInt(int value) {
switch(value) {
case 0: return Monero::PendingTransaction::Priority::Priority_Default;
@@ -1732,8 +1783,8 @@ uint64_t MONERO_DEBUG_test3(uint64_t x) {
}
void* MONERO_DEBUG_test4(uint64_t x) {
- int y = x;
- return reinterpret_cast<void*>(&y);
+ int *y = new int(x);
+ return reinterpret_cast<void*>(y);
}
const char* MONERO_DEBUG_test5() {
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 9f58778..0bc5003 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
@@ -678,14 +678,21 @@ extern ADDAPI const char* MONERO_Wallet_getSubaddressLabel(void* wallet_ptr, uin
// virtual void setSubaddressLabel(uint32_t accountIndex, uint32_t addressIndex, const std::string &label) = 0;
extern ADDAPI void MONERO_Wallet_setSubaddressLabel(void* wallet_ptr, uint32_t accountIndex, uint32_t addressIndex, const char* label);
// virtual MultisigState multisig() const = 0;
+extern ADDAPI void* MONERO_Wallet_multisig(void* wallet_ptr);
// virtual std::string getMultisigInfo() const = 0;
extern ADDAPI const char* MONERO_Wallet_getMultisigInfo(void* wallet_ptr);
// virtual std::string makeMultisig(const std::vector<std::string>& info, uint32_t threshold) = 0;
+extern ADDAPI const char* MONERO_Wallet_makeMultisig(void* wallet_ptr, const char* info, const char* info_separator, uint32_t threshold);
// virtual std::string exchangeMultisigKeys(const std::vector<std::string> &info, const bool force_update_use_with_caution) = 0;
+extern ADDAPI const char* MONERO_Wallet_exchangeMultisigKeys(void* wallet_ptr, const char* info, const char* info_separator, bool force_update_use_with_caution);
// virtual bool exportMultisigImages(std::string& images) = 0;
+extern ADDAPI const char* MONERO_Wallet_exportMultisigImages(void* wallet_ptr, const char* separator);
// virtual size_t importMultisigImages(const std::vector<std::string>& images) = 0;
+extern ADDAPI size_t MONERO_Wallet_importMultisigImages(void* wallet_ptr, const char* info, const char* info_separator);
// virtual bool hasMultisigPartialKeyImages() const = 0;
+extern ADDAPI size_t MONERO_Wallet_hasMultisigPartialKeyImages(void* wallet_ptr);
// virtual PendingTransaction* restoreMultisigTransaction(const std::string& signData) = 0;
+extern ADDAPI void* MONERO_Wallet_restoreMultisigTransaction(void* wallet_ptr, const char* signData);
// virtual PendingTransaction * createTransactionMultDest(const std::vector<std::string> &dst_addr, const std::string &payment_id,
// optional<std::vector<uint64_t>> amount, uint32_t mixin_count,
// PendingTransaction::Priority = PendingTransaction::Priority_Low,