aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIlya Kitaev <mbg033@gmail.com>2016-04-26 13:46:20 +0300
committerIlya Kitaev <mbg033@gmail.com>2016-04-26 13:46:20 +0300
commit566166aafd29bbca1f4916d4383752945892eb20 (patch)
tree785b1711ffdb6a1a97d41849f649b103ef28110a /src
parentMerge remote-tracking branch 'upstream/master' into develop (diff)
downloadmonero-566166aafd29bbca1f4916d4383752945892eb20.tar.xz
merged with upstream
Diffstat (limited to 'src')
-rw-r--r--src/wallet/CMakeLists.txt3
-rw-r--r--src/wallet/api/utils.cpp79
-rw-r--r--src/wallet/api/wallet.cpp19
-rw-r--r--src/wallet/api/wallet.h3
-rw-r--r--src/wallet/wallet2_api.h5
5 files changed, 106 insertions, 3 deletions
diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt
index 33af4f30d..49f936f5c 100644
--- a/src/wallet/CMakeLists.txt
+++ b/src/wallet/CMakeLists.txt
@@ -36,7 +36,8 @@ set(wallet_sources
api/wallet_manager.cpp
api/transaction_info.cpp
api/transaction_history.cpp
- api/pending_transaction.cpp)
+ api/pending_transaction.cpp
+ api/utils.cpp)
set(wallet_headers)
diff --git a/src/wallet/api/utils.cpp b/src/wallet/api/utils.cpp
new file mode 100644
index 000000000..aa85323f0
--- /dev/null
+++ b/src/wallet/api/utils.cpp
@@ -0,0 +1,79 @@
+// Copyright (c) 2014-2016, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
+
+
+
+#include "include_base_utils.h" // LOG_PRINT_x
+#include "net/http_client.h" // epee::net_utils::...
+#include <boost/asio.hpp>
+
+using namespace std;
+
+namespace Bitmonero {
+namespace Utils {
+
+
+// copy-pasted from simplewallet.
+
+bool isAddressLocal(const std::string &address)
+{
+ // extract host
+ epee::net_utils::http::url_content u_c;
+ if (!epee::net_utils::parse_url(address, u_c))
+ {
+ LOG_PRINT_L1("Failed to determine whether daemon is local, assuming not");
+ return false;
+ }
+ if (u_c.host.empty())
+ {
+ LOG_PRINT_L1("Failed to determine whether daemon is local, assuming not");
+ return false;
+ }
+
+ // resolve to IP
+ boost::asio::io_service io_service;
+ boost::asio::ip::tcp::resolver resolver(io_service);
+ boost::asio::ip::tcp::resolver::query query(u_c.host, "");
+ boost::asio::ip::tcp::resolver::iterator i = resolver.resolve(query);
+ while (i != boost::asio::ip::tcp::resolver::iterator())
+ {
+ const boost::asio::ip::tcp::endpoint &ep = *i;
+ if (ep.address().is_loopback())
+ return true;
+ ++i;
+ }
+
+ return false;
+}
+
+}
+
+
+} // namespace
diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp
index 5f32908de..d9d24b4f0 100644
--- a/src/wallet/api/wallet.cpp
+++ b/src/wallet/api/wallet.cpp
@@ -56,7 +56,7 @@ string Wallet::displayAmount(uint64_t amount)
///////////////////////// WalletImpl implementation ////////////////////////
WalletImpl::WalletImpl(bool testnet)
- :m_wallet(nullptr), m_status(Wallet::Status_Ok)
+ :m_wallet(nullptr), m_status(Wallet::Status_Ok), m_trustedDaemon(false)
{
m_wallet = new tools::wallet2(testnet);
m_history = new TransactionHistoryImpl(this);
@@ -237,6 +237,10 @@ bool WalletImpl::init(const std::string &daemon_address, uint64_t upper_transact
clearStatus();
try {
m_wallet->init(daemon_address, upper_transaction_size_limit);
+ if (Utils::isAddressLocal(daemon_address)) {
+ this->setTrustedDaemon(true);
+ }
+
} catch (const std::exception &e) {
LOG_ERROR("Error initializing wallet: " << e.what());
m_status = Status_Error;
@@ -315,7 +319,8 @@ PendingTransaction *WalletImpl::createTransaction(const string &dst_addr, uint64
try {
- transaction->m_pending_tx = m_wallet->create_transactions(dsts, fake_outs_count, 0 /* unlock_time */, 0 /* unused fee arg*/, extra);
+ transaction->m_pending_tx = m_wallet->create_transactions(dsts, fake_outs_count, 0 /* unlock_time */,
+ 0 /* unused fee arg*/, extra, m_trustedDaemon);
} catch (const tools::error::daemon_busy&) {
// TODO: make it translatable with "tr"?
@@ -404,6 +409,16 @@ bool WalletImpl::connectToDaemon()
return result;
}
+void WalletImpl::setTrustedDaemon(bool arg)
+{
+ m_trustedDaemon = arg;
+}
+
+bool WalletImpl::trustedDaemon() const
+{
+ return m_trustedDaemon;
+}
+
void WalletImpl::clearStatus()
{
m_status = Status_Ok;
diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h
index 3eaaec59e..3671c2f7a 100644
--- a/src/wallet/api/wallet.h
+++ b/src/wallet/api/wallet.h
@@ -62,6 +62,8 @@ public:
bool store(const std::string &path);
bool init(const std::string &daemon_address, uint64_t upper_transaction_size_limit);
bool connectToDaemon();
+ void setTrustedDaemon(bool arg);
+ bool trustedDaemon() const;
uint64_t balance() const;
uint64_t unlockedBalance() const;
bool refresh();
@@ -81,6 +83,7 @@ private:
std::string m_errorString;
std::string m_password;
TransactionHistoryImpl * m_history;
+ bool m_trustedDaemon;
};
diff --git a/src/wallet/wallet2_api.h b/src/wallet/wallet2_api.h
index 4954db0d2..ab715dbf9 100644
--- a/src/wallet/wallet2_api.h
+++ b/src/wallet/wallet2_api.h
@@ -38,6 +38,9 @@
// Public interface for libwallet library
namespace Bitmonero {
+ namespace Utils {
+ bool isAddressLocal(const std::string &hostaddr);
+ }
/**
* @brief Transaction-like interface for sending money
*/
@@ -117,6 +120,8 @@ struct Wallet
virtual bool store(const std::string &path) = 0;
virtual bool init(const std::string &daemon_address, uint64_t upper_transaction_size_limit) = 0;
virtual bool connectToDaemon() = 0;
+ virtual void setTrustedDaemon(bool arg) = 0;
+ virtual bool trustedDaemon() const = 0;
virtual uint64_t balance() const = 0;
virtual uint64_t unlockedBalance() const = 0;
static std::string displayAmount(uint64_t amount);