/* This file is part of cpp-ethereum. cpp-ethereum is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. cpp-ethereum is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with cpp-ethereum. If not, see . */ /** @file WebThreeStubServer.cpp * @authors: * Gav Wood * Marek Kotewicz * @date 2014 */ // Make sure boost/asio.hpp is included before windows.h. #include #include #include #include #include #include "WebThreeStubServer.h" using namespace std; using namespace dev; using namespace dev::eth; WebThreeStubServer::WebThreeStubServer(jsonrpc::AbstractServerConnector& _conn, WebThreeDirect& _web3, shared_ptr const& _ethAccounts, std::vector const& _shhAccounts, KeyManager& _keyMan): WebThreeStubServerBase(_conn, _ethAccounts, _shhAccounts), m_web3(_web3), m_keyMan(_keyMan) { auto path = getDataDir() + "/.web3"; boost::filesystem::create_directories(path); ldb::Options o; o.create_if_missing = true; ldb::DB::Open(o, path, &m_db); } std::string WebThreeStubServer::newSession(SessionPermissions const& _p) { std::string s = toBase64(h64::random().ref()); m_sessions[s] = _p; return s; } bool WebThreeStubServer::eth_notePassword(string const& _password) { m_keyMan.notePassword(_password); return true; } Json::Value WebThreeStubServer::admin_eth_blockQueueStatus(string const& _session) { Json::Value ret; if (isAdmin(_session)) { BlockQueueStatus bqs = m_web3.ethereum()->blockQueue().status(); ret["importing"] = (int)bqs.importing; ret["verified"] = (int)bqs.verified; ret["verifying"] = (int)bqs.verifying; ret["unverified"] = (int)bqs.unverified; ret["future"] = (int)bqs.future; ret["unknown"] = (int)bqs.unknown; ret["bad"] = (int)bqs.bad; } return ret; } std::string WebThreeStubServer::web3_clientVersion() { return m_web3.clientVersion(); } dev::eth::Interface* WebThreeStubServer::client() { return m_web3.ethereum(); } std::shared_ptr WebThreeStubServer::face() { return m_web3.whisper(); } dev::WebThreeNetworkFace* WebThreeStubServer::network() { return &m_web3; } dev::WebThreeStubDatabaseFace* WebThreeStubServer::db() { return this; } std::string WebThreeStubServer::get(std::string const& _name, std::string const& _key) { bytes k = sha3(_name).asBytes() + sha3(_key).asBytes(); string ret; m_db->Get(m_readOptions, ldb::Slice((char const*)k.data(), k.size()), &ret); return ret; } void WebThreeStubServer::put(std::string const& _name, std::string const& _key, std::string const& _value) { bytes k = sha3(_name).asBytes() + sha3(_key).asBytes(); m_db->Put(m_writeOptions, ldb::Slice((char const*)k.data(), k.size()), ldb::Slice((char const*)_value.data(), _value.size())); }