mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Merge branch 'master' of github.com:jedmccaleb/NewCoin
This commit is contained in:
184
newcoin.vcxproj
184
newcoin.vcxproj
@@ -49,7 +49,7 @@
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>BOOST_TEST_ALTERNATIVE_INIT_API;BOOST_TEST_NO_MAIN;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>.\obj;..\OpenSSL\include;..\boost_1_47_0;..\protobuf-2.4.1\src\</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>.\src;..\OpenSSL\include;..\boost_1_47_0;..\protobuf-2.4.1\src\</AdditionalIncludeDirectories>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
@@ -86,93 +86,95 @@
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="database\database.cpp" />
|
||||
<ClCompile Include="database\sqlite3.c" />
|
||||
<ClCompile Include="database\SqliteDatabase.cpp" />
|
||||
<ClCompile Include="database\win\windatabase.cpp" />
|
||||
<ClCompile Include="json\json_reader.cpp" />
|
||||
<ClCompile Include="json\json_value.cpp" />
|
||||
<ClCompile Include="json\json_writer.cpp" />
|
||||
<ClCompile Include="obj\src\ripple.pb.cc" />
|
||||
<ClCompile Include="src\AccountState.cpp" />
|
||||
<ClCompile Include="src\Amount.cpp" />
|
||||
<ClCompile Include="src\Application.cpp" />
|
||||
<ClCompile Include="src\BitcoinUtil.cpp" />
|
||||
<ClCompile Include="src\CallRPC.cpp" />
|
||||
<ClCompile Include="src\CanonicalTXSet.cpp" />
|
||||
<ClCompile Include="src\Config.cpp" />
|
||||
<ClCompile Include="src\ConnectionPool.cpp" />
|
||||
<ClCompile Include="src\Contract.cpp" />
|
||||
<ClCompile Include="src\DBInit.cpp" />
|
||||
<ClCompile Include="src\DeterministicKeys.cpp" />
|
||||
<ClCompile Include="src\ECIES.cpp" />
|
||||
<ClCompile Include="src\FieldNames.cpp" />
|
||||
<ClCompile Include="src\JobQueue.cpp" />
|
||||
<ClCompile Include="src\HashedObject.cpp" />
|
||||
<ClCompile Include="src\HTTPRequest.cpp" />
|
||||
<ClCompile Include="src\HttpsClient.cpp" />
|
||||
<ClCompile Include="src\Interpreter.cpp" />
|
||||
<ClCompile Include="src\InstanceCounter.cpp" />
|
||||
<ClCompile Include="src\Ledger.cpp" />
|
||||
<ClCompile Include="src\LedgerAcquire.cpp" />
|
||||
<ClCompile Include="src\LedgerConsensus.cpp" />
|
||||
<ClCompile Include="src\LedgerEntrySet.cpp" />
|
||||
<ClCompile Include="src\LedgerFormats.cpp" />
|
||||
<ClCompile Include="src\LedgerHistory.cpp" />
|
||||
<ClCompile Include="src\LedgerMaster.cpp" />
|
||||
<ClCompile Include="src\LedgerProposal.cpp" />
|
||||
<ClCompile Include="src\LedgerTiming.cpp" />
|
||||
<ClCompile Include="src\Log.cpp" />
|
||||
<ClCompile Include="src\main.cpp" />
|
||||
<ClCompile Include="src\NetworkOPs.cpp" />
|
||||
<ClCompile Include="src\NicknameState.cpp" />
|
||||
<ClCompile Include="src\Operation.cpp" />
|
||||
<ClCompile Include="src\OrderBook.cpp" />
|
||||
<ClCompile Include="src\OrderBookDB.cpp" />
|
||||
<ClCompile Include="src\PackedMessage.cpp" />
|
||||
<ClCompile Include="src\ParseSection.cpp" />
|
||||
<ClCompile Include="src\Pathfinder.cpp" />
|
||||
<ClCompile Include="src\Peer.cpp" />
|
||||
<ClCompile Include="src\PeerDoor.cpp" />
|
||||
<ClCompile Include="src\PlatRand.cpp" />
|
||||
<ClCompile Include="src\PubKeyCache.cpp" />
|
||||
<ClCompile Include="src\RangeSet.cpp" />
|
||||
<ClCompile Include="src\rfc1751.cpp" />
|
||||
<ClCompile Include="src\RippleAddress.cpp" />
|
||||
<ClCompile Include="src\RippleCalc.cpp" />
|
||||
<ClCompile Include="src\RippleLines.cpp" />
|
||||
<ClCompile Include="src\RippleState.cpp" />
|
||||
<ClCompile Include="src\rpc.cpp" />
|
||||
<ClCompile Include="src\RPCCommands.cpp" />
|
||||
<ClCompile Include="src\RPCDoor.cpp" />
|
||||
<ClCompile Include="src\RPCHandler.cpp" />
|
||||
<ClCompile Include="src\RPCServer.cpp" />
|
||||
<ClCompile Include="src\ScriptData.cpp" />
|
||||
<ClCompile Include="src\SerializedLedger.cpp" />
|
||||
<ClCompile Include="src\SerializedObject.cpp" />
|
||||
<ClCompile Include="src\SerializedTransaction.cpp" />
|
||||
<ClCompile Include="src\SerializedTypes.cpp" />
|
||||
<ClCompile Include="src\SerializedValidation.cpp" />
|
||||
<ClCompile Include="src\Serializer.cpp" />
|
||||
<ClCompile Include="src\SHAMap.cpp" />
|
||||
<ClCompile Include="src\SHAMapDiff.cpp" />
|
||||
<ClCompile Include="src\SHAMapNodes.cpp" />
|
||||
<ClCompile Include="src\SHAMapSync.cpp" />
|
||||
<ClCompile Include="src\SNTPClient.cpp" />
|
||||
<ClCompile Include="src\Suppression.cpp" />
|
||||
<ClCompile Include="src\Transaction.cpp" />
|
||||
<ClCompile Include="src\TransactionAction.cpp" />
|
||||
<ClCompile Include="src\TransactionEngine.cpp" />
|
||||
<ClCompile Include="src\TransactionErr.cpp" />
|
||||
<ClCompile Include="src\TransactionFormats.cpp" />
|
||||
<ClCompile Include="src\TransactionMaster.cpp" />
|
||||
<ClCompile Include="src\TransactionMeta.cpp" />
|
||||
<ClCompile Include="src\UniqueNodeList.cpp" />
|
||||
<ClCompile Include="src\utils.cpp" />
|
||||
<ClCompile Include="src\ValidationCollection.cpp" />
|
||||
<ClCompile Include="src\Wallet.cpp" />
|
||||
<ClCompile Include="src\WSConnection.cpp" />
|
||||
<ClCompile Include="src\WSDoor.cpp" />
|
||||
<ClCompile Include="src\cpp\database\database.cpp" />
|
||||
<ClCompile Include="src\cpp\database\sqlite3.c" />
|
||||
<ClCompile Include="src\cpp\database\SqliteDatabase.cpp" />
|
||||
<ClCompile Include="src\cpp\database\win\windatabase.cpp" />
|
||||
<ClCompile Include="src\cpp\json\json_reader.cpp" />
|
||||
<ClCompile Include="src\cpp\json\json_value.cpp" />
|
||||
<ClCompile Include="src\cpp\json\json_writer.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\AccountState.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Amount.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Application.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\BitcoinUtil.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\CallRPC.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\CanonicalTXSet.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Config.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\ConnectionPool.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Contract.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\DBInit.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\DeterministicKeys.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\ECIES.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\FieldNames.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\HashedObject.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\HTTPRequest.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\HttpsClient.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\InstanceCounter.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Interpreter.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\JobQueue.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Ledger.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerAcquire.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerConsensus.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerEntrySet.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerFormats.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerHistory.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerMaster.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerProposal.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\LedgerTiming.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Log.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\main.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\NetworkOPs.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\NicknameState.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Operation.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\OrderBook.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\OrderBookDB.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\PackedMessage.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\ParseSection.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Pathfinder.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Peer.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\PeerDoor.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\PlatRand.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\PubKeyCache.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RangeSet.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\rfc1751.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\ripple.pb.cc">
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\;..\OpenSSL\include;..\boost_1_47_0;..\protobuf-2.4.1\src\</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RippleAddress.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RippleCalc.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RippleLines.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RippleState.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\rpc.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RPCCommands.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RPCDoor.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RPCHandler.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\RPCServer.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\ScriptData.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SerializedLedger.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SerializedObject.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SerializedTransaction.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SerializedTypes.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SerializedValidation.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Serializer.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SHAMap.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SHAMapDiff.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SHAMapNodes.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SHAMapSync.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\SNTPClient.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Suppression.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Transaction.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\TransactionAction.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\TransactionEngine.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\TransactionErr.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\TransactionFormats.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\TransactionMaster.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\TransactionMeta.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\UniqueNodeList.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\utils.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\ValidationCollection.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\Wallet.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\WSConnection.cpp" />
|
||||
<ClCompile Include="src\cpp\ripple\WSDoor.cpp" />
|
||||
<ClCompile Include="websocketpp\src\base64\base64.cpp" />
|
||||
<ClCompile Include="websocketpp\src\md5\md5.c" />
|
||||
<ClCompile Include="websocketpp\src\messages\data.cpp" />
|
||||
@@ -295,10 +297,10 @@
|
||||
<None Include="newcoind.cfg" />
|
||||
<None Include="README" />
|
||||
<None Include="SConstruct" />
|
||||
<CustomBuild Include="src\ripple.proto">
|
||||
<CustomBuild Include="src\cpp\ripple\ripple.proto">
|
||||
<FileType>Document</FileType>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/code/protoc-2.4.1-win32/protoc -I=..\newcoin --cpp_out=\code\newcoin\obj\ ..\newcoin/src/ripple.proto</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\code\newcoin\obj\src\ripple.pb.h</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">/code/protoc-2.4.1-win32/protoc -I=..\newcoin --cpp_out=\code\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\code\newcoin\src\ripple.pb.h</Outputs>
|
||||
</CustomBuild>
|
||||
<None Include="test\buster.js" />
|
||||
<None Include="test\server.js" />
|
||||
|
||||
@@ -33,195 +33,6 @@
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="database\sqlite3.c">
|
||||
<Filter>Header Files\util</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="json\json_reader.cpp">
|
||||
<Filter>Source Files\json</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="json\json_value.cpp">
|
||||
<Filter>Source Files\json</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="json\json_writer.cpp">
|
||||
<Filter>Source Files\json</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\AccountState.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Amount.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Application.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\CallRPC.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Config.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\ConnectionPool.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\DBInit.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\DeterministicKeys.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\ECIES.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\HashedObject.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\HttpsClient.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Ledger.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerAcquire.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerFormats.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerHistory.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerMaster.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\NetworkOPs.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\PackedMessage.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\ParseSection.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Peer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\PeerDoor.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\PlatRand.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\PubKeyCache.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\rfc1751.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\rpc.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RPCCommands.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RPCDoor.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RPCServer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SerializedLedger.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SerializedObject.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SerializedTransaction.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SerializedTypes.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SerializedValidation.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Serializer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SHAMap.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SHAMapDiff.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SHAMapNodes.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SHAMapSync.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Transaction.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\TransactionEngine.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\TransactionFormats.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\TransactionMaster.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\UniqueNodeList.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\utils.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Wallet.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\BitcoinUtil.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="database\database.cpp">
|
||||
<Filter>Source Files\database</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="database\SqliteDatabase.cpp">
|
||||
<Filter>Source Files\database</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="database\win\windatabase.cpp">
|
||||
<Filter>Source Files\database</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RippleState.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Log.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerConsensus.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerProposal.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\NicknameState.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\CanonicalTXSet.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\ValidationCollection.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Suppression.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\WSDoor.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="websocketpp\src\base64\base64.cpp">
|
||||
<Filter>Source Files\websocketpp</Filter>
|
||||
</ClCompile>
|
||||
@@ -246,78 +57,267 @@
|
||||
<ClCompile Include="websocketpp\src\sha1\sha1.cpp">
|
||||
<Filter>Source Files\websocketpp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerTiming.cpp">
|
||||
<ClCompile Include="src\cpp\database\database.cpp">
|
||||
<Filter>Source Files\database</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\database\SqliteDatabase.cpp">
|
||||
<Filter>Source Files\database</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\database\win\windatabase.cpp">
|
||||
<Filter>Source Files\database</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\json\json_reader.cpp">
|
||||
<Filter>Source Files\json</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\json\json_value.cpp">
|
||||
<Filter>Source Files\json</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\json\json_writer.cpp">
|
||||
<Filter>Source Files\json</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\AccountState.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\LedgerEntrySet.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\Amount.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\TransactionMeta.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\Application.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\SNTPClient.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\BitcoinUtil.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Pathfinder.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\CallRPC.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RippleLines.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\CanonicalTXSet.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\OrderBookDB.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\Config.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\OrderBook.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\ConnectionPool.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Contract.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\Contract.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Interpreter.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\DBInit.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\ScriptData.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\DeterministicKeys.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\Operation.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\ECIES.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\FieldNames.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\FieldNames.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\TransactionAction.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\HashedObject.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RippleCalc.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\HTTPRequest.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\TransactionErr.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\HttpsClient.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="obj\src\ripple.pb.cc">
|
||||
<ClCompile Include="src\cpp\ripple\InstanceCounter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\HTTPRequest.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\Interpreter.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RPCHandler.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\JobQueue.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RippleAddress.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\Ledger.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\RangeSet.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\LedgerAcquire.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\JobQueue.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\LedgerConsensus.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\InstanceCounter.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\LedgerEntrySet.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\WSConnection.cpp">
|
||||
<ClCompile Include="src\cpp\ripple\LedgerFormats.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\LedgerHistory.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\LedgerMaster.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\LedgerProposal.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\LedgerTiming.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Log.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\NetworkOPs.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\NicknameState.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Operation.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\OrderBook.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\OrderBookDB.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\PackedMessage.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\ParseSection.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Pathfinder.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Peer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\PeerDoor.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\PlatRand.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\PubKeyCache.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RangeSet.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\rfc1751.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RippleAddress.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RippleCalc.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RippleLines.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RippleState.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\rpc.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RPCCommands.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RPCDoor.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RPCHandler.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\RPCServer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\ScriptData.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SerializedLedger.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SerializedObject.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SerializedTransaction.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SerializedTypes.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SerializedValidation.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Serializer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SHAMap.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SHAMapDiff.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SHAMapNodes.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SHAMapSync.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\SNTPClient.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Suppression.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Transaction.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\TransactionAction.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\TransactionEngine.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\TransactionErr.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\TransactionFormats.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\TransactionMaster.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\TransactionMeta.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\UniqueNodeList.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\utils.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\ValidationCollection.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\Wallet.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\WSConnection.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\WSDoor.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\ripple\ripple.pb.cc">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\cpp\database\sqlite3.c">
|
||||
<Filter>Source Files\database</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="KnownNodeList.h">
|
||||
@@ -648,6 +648,6 @@
|
||||
<None Include="test\utils.js" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="src\ripple.proto" />
|
||||
<CustomBuild Include="src\cpp\ripple\ripple.proto" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -28,6 +28,19 @@ public:
|
||||
virtual ~InfoSub() { ; }
|
||||
|
||||
virtual void send(const Json::Value& jvObj) = 0;
|
||||
|
||||
protected:
|
||||
boost::unordered_set<RippleAddress> mSubAccountInfo;
|
||||
boost::unordered_set<RippleAddress> mSubAccountTransaction;
|
||||
|
||||
boost::mutex mLock;
|
||||
|
||||
public:
|
||||
void insertSubAccountInfo(RippleAddress addr)
|
||||
{
|
||||
boost::mutex::scoped_lock sl(mLock);
|
||||
mSubAccountInfo.insert(addr);
|
||||
}
|
||||
};
|
||||
|
||||
class NetworkOPs
|
||||
|
||||
@@ -51,6 +51,7 @@ Json::Value RPCHandler::rpcError(int iError)
|
||||
{ rpcNO_ACCOUNT, "noAccount", "No such account." },
|
||||
{ rpcNO_CLOSED, "noClosed", "Closed ledger is unavailable." },
|
||||
{ rpcNO_CURRENT, "noCurrent", "Current ledger is unavailable." },
|
||||
{ rpcNO_EVENTS, "noEvents", "Current transport does not support events." },
|
||||
{ rpcNO_GEN_DECRPYT, "noGenDectypt", "Password failed to decrypt master public generator." },
|
||||
{ rpcNO_NETWORK, "noNetwork", "Network not available." },
|
||||
{ rpcNO_PERMISSION, "noPermission", "You don't have permission for this command." },
|
||||
@@ -92,6 +93,13 @@ Json::Value RPCHandler::rpcError(int iError)
|
||||
RPCHandler::RPCHandler(NetworkOPs* netOps)
|
||||
{
|
||||
mNetOps=netOps;
|
||||
mInfoSub=NULL;
|
||||
}
|
||||
|
||||
RPCHandler::RPCHandler(NetworkOPs* netOps, InfoSub* infoSub)
|
||||
{
|
||||
mNetOps=netOps;
|
||||
mInfoSub=infoSub;
|
||||
}
|
||||
|
||||
int RPCHandler::getParamCount(const Json::Value& params)
|
||||
@@ -1309,53 +1317,58 @@ Json::Value RPCHandler::doCommand(const std::string& command, Json::Value& param
|
||||
int iMinParams;
|
||||
int iMaxParams;
|
||||
bool mAdminRequired;
|
||||
bool mEvented;
|
||||
unsigned int iOptions;
|
||||
} commandsA[] = {
|
||||
// Request-response methods
|
||||
{ "accept_ledger", &RPCHandler::doAcceptLedger, 0, 0, true },
|
||||
{ "account_info", &RPCHandler::doAccountInfo, 1, 2, false, optCurrent },
|
||||
{ "account_tx", &RPCHandler::doAccountTransactions, 2, 3, false, optNetwork },
|
||||
{ "connect", &RPCHandler::doConnect, 1, 2, true },
|
||||
{ "data_delete", &RPCHandler::doDataDelete, 1, 1, true },
|
||||
{ "data_fetch", &RPCHandler::doDataFetch, 1, 1, true },
|
||||
{ "data_store", &RPCHandler::doDataStore, 2, 2, true },
|
||||
{ "get_counts", &RPCHandler::doGetCounts, 0, 1, true },
|
||||
{ "ledger", &RPCHandler::doLedger, 0, 2, false, optNetwork },
|
||||
{ "ledger_accept", &RPCHandler::doLedgerAccept, 0, 0, true, optCurrent },
|
||||
{ "ledger_closed", &RPCHandler::doLedgerClosed, 0, 0, false, optClosed },
|
||||
{ "ledger_current", &RPCHandler::doLedgerCurrent, 0, 0, false, optCurrent },
|
||||
{ "ledger_entry", &RPCHandler::doLedgerEntry, -1, -1, false, optCurrent },
|
||||
{ "log_level", &RPCHandler::doLogLevel, 0, 2, true },
|
||||
{ "logrotate", &RPCHandler::doLogRotate, 0, 0, true },
|
||||
{ "nickname_info", &RPCHandler::doNicknameInfo, 1, 1, false, optCurrent },
|
||||
{ "owner_info", &RPCHandler::doOwnerInfo, 1, 2, false, optCurrent },
|
||||
{ "account_info", &RPCHandler::doAccountInfo, 1, 2, false, false, optCurrent },
|
||||
{ "account_tx", &RPCHandler::doAccountTransactions, 2, 3, false, false, optNetwork },
|
||||
{ "connect", &RPCHandler::doConnect, 1, 2, true },
|
||||
{ "data_delete", &RPCHandler::doDataDelete, 1, 1, true },
|
||||
{ "data_fetch", &RPCHandler::doDataFetch, 1, 1, true },
|
||||
{ "data_store", &RPCHandler::doDataStore, 2, 2, true },
|
||||
{ "get_counts", &RPCHandler::doGetCounts, 0, 1, true },
|
||||
{ "ledger", &RPCHandler::doLedger, 0, 2, false, false, optNetwork },
|
||||
{ "ledger_accept", &RPCHandler::doLedgerAccept, 0, 0, true, false, optCurrent },
|
||||
{ "ledger_closed", &RPCHandler::doLedgerClosed, 0, 0, false, false, optClosed },
|
||||
{ "ledger_current", &RPCHandler::doLedgerCurrent, 0, 0, false, false, optCurrent },
|
||||
{ "ledger_entry", &RPCHandler::doLedgerEntry, -1, -1, false, false, optCurrent },
|
||||
{ "log_level", &RPCHandler::doLogLevel, 0, 2, true },
|
||||
{ "logrotate", &RPCHandler::doLogRotate, 0, 0, true },
|
||||
{ "nickname_info", &RPCHandler::doNicknameInfo, 1, 1, false, false, optCurrent },
|
||||
{ "owner_info", &RPCHandler::doOwnerInfo, 1, 2, false, false, optCurrent },
|
||||
{ "peers", &RPCHandler::doPeers, 0, 0, true },
|
||||
{ "profile", &RPCHandler::doProfile, 1, 9, false, optCurrent },
|
||||
{ "ripple_lines_get", &RPCHandler::doRippleLinesGet, 1, 2, false, optCurrent },
|
||||
{ "submit", &RPCHandler::doSubmit, 2, 2, false, optCurrent },
|
||||
{ "submit_json", &RPCHandler::doSubmitJson, -1, -1, false, optCurrent },
|
||||
{ "server_info", &RPCHandler::doServerInfo, 0, 0, true },
|
||||
{ "stop", &RPCHandler::doStop, 0, 0, true },
|
||||
{ "transaction_entry", &RPCHandler::doTransactionEntry, -1, -1, false, optCurrent },
|
||||
{ "tx", &RPCHandler::doTx, 1, 1, true },
|
||||
{ "tx_history", &RPCHandler::doTxHistory, 1, 1, false, },
|
||||
{ "profile", &RPCHandler::doProfile, 1, 9, false, false, optCurrent },
|
||||
{ "ripple_lines_get", &RPCHandler::doRippleLinesGet, 1, 2, false, false, optCurrent },
|
||||
{ "submit", &RPCHandler::doSubmit, 2, 2, false, false, optCurrent },
|
||||
{ "submit_json", &RPCHandler::doSubmitJson, -1, -1, false, false, optCurrent },
|
||||
{ "server_info", &RPCHandler::doServerInfo, 0, 0, true },
|
||||
{ "stop", &RPCHandler::doStop, 0, 0, true },
|
||||
{ "transaction_entry", &RPCHandler::doTransactionEntry, -1, -1, false, false, optCurrent },
|
||||
{ "tx", &RPCHandler::doTx, 1, 1, true },
|
||||
{ "tx_history", &RPCHandler::doTxHistory, 1, 1, false, },
|
||||
|
||||
{ "unl_add", &RPCHandler::doUnlAdd, 1, 2, true },
|
||||
{ "unl_delete", &RPCHandler::doUnlDelete, 1, 1, true },
|
||||
{ "unl_list", &RPCHandler::doUnlList, 0, 0, true },
|
||||
{ "unl_load", &RPCHandler::doUnlLoad, 0, 0, true },
|
||||
{ "unl_network", &RPCHandler::doUnlNetwork, 0, 0, true },
|
||||
{ "unl_reset", &RPCHandler::doUnlReset, 0, 0, true },
|
||||
{ "unl_score", &RPCHandler::doUnlScore, 0, 0, true },
|
||||
{ "unl_add", &RPCHandler::doUnlAdd, 1, 2, true },
|
||||
{ "unl_delete", &RPCHandler::doUnlDelete, 1, 1, true },
|
||||
{ "unl_list", &RPCHandler::doUnlList, 0, 0, true },
|
||||
{ "unl_load", &RPCHandler::doUnlLoad, 0, 0, true },
|
||||
{ "unl_network", &RPCHandler::doUnlNetwork, 0, 0, true },
|
||||
{ "unl_reset", &RPCHandler::doUnlReset, 0, 0, true },
|
||||
{ "unl_score", &RPCHandler::doUnlScore, 0, 0, true },
|
||||
|
||||
{ "validation_create", &RPCHandler::doValidationCreate, 0, 1, false },
|
||||
{ "validation_seed", &RPCHandler::doValidationSeed, 0, 1, false },
|
||||
{ "validation_create", &RPCHandler::doValidationCreate, 0, 1, false },
|
||||
{ "validation_seed", &RPCHandler::doValidationSeed, 0, 1, false },
|
||||
|
||||
{ "wallet_accounts", &RPCHandler::doWalletAccounts, 1, 1, false, optCurrent },
|
||||
{ "wallet_propose", &RPCHandler::doWalletPropose, 0, 1, false, },
|
||||
{ "wallet_seed", &RPCHandler::doWalletSeed, 0, 1, false, },
|
||||
{ "wallet_accounts", &RPCHandler::doWalletAccounts, 1, 1, false, false, optCurrent },
|
||||
{ "wallet_propose", &RPCHandler::doWalletPropose, 0, 1, false, },
|
||||
{ "wallet_seed", &RPCHandler::doWalletSeed, 0, 1, false, },
|
||||
|
||||
{ "login", &RPCHandler::doLogin, 2, 2, true },
|
||||
};
|
||||
{ "login", &RPCHandler::doLogin, 2, 2, true },
|
||||
|
||||
// Evented methods
|
||||
{ "subscribe", &RPCHandler::doSubscribe, -1, -1, false, true },
|
||||
{ "unsubscribe", &RPCHandler::doUnsubscribe, -1, -1, false, true }, };
|
||||
|
||||
int i = NUMBER(commandsA);
|
||||
|
||||
@@ -1370,6 +1383,10 @@ Json::Value RPCHandler::doCommand(const std::string& command, Json::Value& param
|
||||
{
|
||||
return rpcError(rpcNO_PERMISSION);
|
||||
}
|
||||
else if (commandsA[i].mEvented && mInfoSub == NULL)
|
||||
{
|
||||
return rpcError(rpcNO_EVENTS);
|
||||
}
|
||||
else if (commandsA[i].iMinParams >= 0
|
||||
? commandsA[i].iMaxParams
|
||||
? (params.size() < commandsA[i].iMinParams
|
||||
@@ -1933,4 +1950,183 @@ Json::Value RPCHandler::doLedgerEntry(const Json::Value& jvRequest)
|
||||
return jvResult;
|
||||
}
|
||||
|
||||
|
||||
boost::unordered_set<RippleAddress> RPCHandler::parseAccountIds(const Json::Value& jvArray)
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaResult;
|
||||
|
||||
for (Json::Value::const_iterator it = jvArray.begin(); it != jvArray.end(); it++)
|
||||
{
|
||||
RippleAddress naString;
|
||||
|
||||
if (!(*it).isString() || !naString.setAccountID((*it).asString()))
|
||||
{
|
||||
usnaResult.clear();
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
(void) usnaResult.insert(naString);
|
||||
}
|
||||
}
|
||||
|
||||
return usnaResult;
|
||||
}
|
||||
|
||||
/*
|
||||
server : Sends a message anytime the server status changes such as network connectivity.
|
||||
ledger : Sends a message at every ledger close.
|
||||
transactions : Sends a message for every transaction that makes it into a ledger.
|
||||
rt_transactions
|
||||
accounts
|
||||
rt_accounts
|
||||
*/
|
||||
Json::Value RPCHandler::doSubscribe(const Json::Value& jvRequest)
|
||||
{
|
||||
Json::Value jvResult(Json::objectValue);
|
||||
|
||||
if (jvRequest.isMember("streams"))
|
||||
{
|
||||
for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++)
|
||||
{
|
||||
if ((*it).isString())
|
||||
{
|
||||
std::string streamName=(*it).asString();
|
||||
|
||||
if(streamName=="server")
|
||||
{
|
||||
mNetOps->subServer(mInfoSub, jvResult);
|
||||
}else if(streamName=="ledger")
|
||||
{
|
||||
mNetOps->subLedger(mInfoSub, jvResult);
|
||||
}else if(streamName=="transactions")
|
||||
{
|
||||
mNetOps->subTransactions(mInfoSub);
|
||||
}else if(streamName=="rt_transactions")
|
||||
{
|
||||
mNetOps->subRTTransactions(mInfoSub);
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName);
|
||||
}
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = "malformedSteam";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("rt_accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["rt_accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mInfoSub->insertSubAccountInfo(naAccountID);
|
||||
}
|
||||
|
||||
mNetOps->subAccount(mInfoSub, usnaAccoundIds, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mInfoSub->insertSubAccountInfo(naAccountID);
|
||||
}
|
||||
|
||||
mNetOps->subAccount(mInfoSub, usnaAccoundIds, false);
|
||||
}
|
||||
}
|
||||
|
||||
return jvResult;
|
||||
}
|
||||
|
||||
Json::Value RPCHandler::doUnsubscribe(const Json::Value& jvRequest)
|
||||
{
|
||||
Json::Value jvResult(Json::objectValue);
|
||||
|
||||
if (jvRequest.isMember("streams"))
|
||||
{
|
||||
for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++)
|
||||
{
|
||||
if ((*it).isString() )
|
||||
{
|
||||
std::string streamName=(*it).asString();
|
||||
|
||||
if(streamName=="server")
|
||||
{
|
||||
mNetOps->unsubServer(mInfoSub);
|
||||
}else if(streamName=="ledger")
|
||||
{
|
||||
mNetOps->unsubLedger(mInfoSub);
|
||||
}else if(streamName=="transactions")
|
||||
{
|
||||
mNetOps->unsubTransactions(mInfoSub);
|
||||
}else if(streamName=="rt_transactions")
|
||||
{
|
||||
mNetOps->unsubRTTransactions(mInfoSub);
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName);
|
||||
}
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = "malformedSteam";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("rt_accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["rt_accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mInfoSub->insertSubAccountInfo(naAccountID);
|
||||
}
|
||||
|
||||
mNetOps->unsubAccount(mInfoSub, usnaAccoundIds,true);
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mInfoSub->insertSubAccountInfo(naAccountID);
|
||||
}
|
||||
|
||||
mNetOps->unsubAccount(mInfoSub, usnaAccoundIds,false);
|
||||
}
|
||||
}
|
||||
|
||||
return jvResult;
|
||||
}
|
||||
|
||||
// vim:ts=4
|
||||
|
||||
@@ -6,7 +6,8 @@ class NetworkOPs;
|
||||
|
||||
class RPCHandler
|
||||
{
|
||||
NetworkOPs* mNetOps;
|
||||
NetworkOPs* mNetOps;
|
||||
InfoSub* mInfoSub;
|
||||
|
||||
typedef Json::Value (RPCHandler::*doFuncPtr)(const Json::Value ¶ms);
|
||||
enum {
|
||||
@@ -15,6 +16,9 @@ class RPCHandler
|
||||
optClosed = 4+optNetwork, // Need closed ledger
|
||||
};
|
||||
|
||||
// Utilities
|
||||
void addSubmitPath(Json::Value& txJSON);
|
||||
boost::unordered_set<RippleAddress> parseAccountIds(const Json::Value& jvArray);
|
||||
int getParamCount(const Json::Value& params);
|
||||
bool extractString(std::string& param, const Json::Value& params, int index);
|
||||
|
||||
@@ -84,8 +88,9 @@ class RPCHandler
|
||||
Json::Value doLedgerEntry(const Json::Value& params);
|
||||
Json::Value doTransactionEntry(const Json::Value& params);
|
||||
|
||||
Json::Value doSubscribe(const Json::Value& params);
|
||||
Json::Value doUnsubscribe(const Json::Value& params);
|
||||
|
||||
void addSubmitPath(Json::Value& txJSON);
|
||||
|
||||
public:
|
||||
|
||||
@@ -95,6 +100,7 @@ public:
|
||||
// Misc failure
|
||||
rpcLOAD_FAILED,
|
||||
rpcNO_PERMISSION,
|
||||
rpcNO_EVENTS,
|
||||
rpcNOT_STANDALONE,
|
||||
|
||||
// Networking
|
||||
@@ -151,8 +157,9 @@ public:
|
||||
enum { GUEST, USER, ADMIN };
|
||||
|
||||
RPCHandler(NetworkOPs* netOps);
|
||||
RPCHandler(NetworkOPs* netOps, InfoSub* infoSub);
|
||||
|
||||
Json::Value doCommand(const std::string& command, Json::Value& params,int role);
|
||||
Json::Value doCommand(const std::string& command, Json::Value& params, int role);
|
||||
Json::Value rpcError(int iError);
|
||||
|
||||
Json::Value handleJSONSubmit(const Json::Value& jvRequest);
|
||||
|
||||
@@ -26,7 +26,7 @@ SETUP_LOG();
|
||||
#endif
|
||||
|
||||
RPCServer::RPCServer(boost::asio::io_service& io_service , NetworkOPs* nopNetwork)
|
||||
: mNetOps(nopNetwork), mRPCHandler(nopNetwork), mSocket(io_service)
|
||||
: mNetOps(nopNetwork), mSocket(io_service)
|
||||
{
|
||||
|
||||
mRole = RPCHandler::GUEST;
|
||||
@@ -142,6 +142,8 @@ std::string RPCServer::handleRequest(const std::string& requestStr)
|
||||
else if (!valParams.isArray())
|
||||
return(HTTPReply(400, "params unparseable"));
|
||||
|
||||
RPCHandler mRPCHandler(mNetOps);
|
||||
|
||||
cLog(lsTRACE) << valParams;
|
||||
Json::Value result = mRPCHandler.doCommand(strMethod, valParams,mRole);
|
||||
cLog(lsTRACE) << result;
|
||||
|
||||
@@ -22,9 +22,7 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
|
||||
NetworkOPs* mNetOps;
|
||||
RPCHandler mRPCHandler;
|
||||
|
||||
boost::asio::ip::tcp::socket mSocket;
|
||||
|
||||
|
||||
@@ -18,8 +18,8 @@ WSConnection::~WSConnection()
|
||||
mNetwork.unsubRTTransactions(this);
|
||||
mNetwork.unsubLedger(this);
|
||||
mNetwork.unsubServer(this);
|
||||
mNetwork.unsubAccount(this, mSubAccountInfo,true);
|
||||
mNetwork.unsubAccount(this, mSubAccountInfo,false);
|
||||
mNetwork.unsubAccount(this, mSubAccountInfo, true);
|
||||
mNetwork.unsubAccount(this, mSubAccountInfo, false);
|
||||
}
|
||||
|
||||
void WSConnection::send(const Json::Value& jvObj)
|
||||
@@ -33,17 +33,6 @@ void WSConnection::send(const Json::Value& jvObj)
|
||||
|
||||
Json::Value WSConnection::invokeCommand(Json::Value& jvRequest)
|
||||
{
|
||||
static struct {
|
||||
const char* pCommand;
|
||||
doFuncPtr dfpFunc;
|
||||
} commandsA[] = {
|
||||
// Request-Response Commands:
|
||||
{ "submit", &WSConnection::doSubmit },
|
||||
{ "subscribe", &WSConnection::doSubscribe },
|
||||
{ "unsubscribe", &WSConnection::doUnsubscribe },
|
||||
{ "rpc", &WSConnection::doRPC },
|
||||
};
|
||||
|
||||
if (!jvRequest.isMember("command"))
|
||||
{
|
||||
Json::Value jvResult(Json::objectValue);
|
||||
@@ -56,22 +45,27 @@ Json::Value WSConnection::invokeCommand(Json::Value& jvRequest)
|
||||
return jvResult;
|
||||
}
|
||||
|
||||
std::string strCommand = jvRequest["command"].asString();
|
||||
|
||||
int i = NUMBER(commandsA);
|
||||
|
||||
while (i-- && strCommand != commandsA[i].pCommand)
|
||||
;
|
||||
|
||||
RPCHandler mRPCHandler(&mNetwork, this);
|
||||
Json::Value jvResult(Json::objectValue);
|
||||
|
||||
if (i < 0)
|
||||
// Regular RPC command
|
||||
jvResult["result"] = mRPCHandler.doCommand(
|
||||
jvRequest["command"].asString(),
|
||||
jvRequest.isMember("params")
|
||||
? jvRequest["params"]
|
||||
: jvRequest,
|
||||
mHandler->getPublic() ? RPCHandler::GUEST : RPCHandler::ADMIN);
|
||||
|
||||
// Currently we will simply unwrap errors returned by the RPC
|
||||
// API, in the future maybe we can make the responses
|
||||
// consistent.
|
||||
if (jvResult["result"].isObject() && jvResult["result"].isMember("error"))
|
||||
{
|
||||
jvResult["error"] = "unknownCommand"; // Unknown command.
|
||||
}
|
||||
else
|
||||
{
|
||||
(this->*(commandsA[i].dfpFunc))(jvResult, jvRequest);
|
||||
jvResult = jvResult["result"];
|
||||
jvResult["status"] = "error";
|
||||
jvResult["request"] = jvRequest;
|
||||
} else {
|
||||
jvResult["status"] = "success";
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("id"))
|
||||
@@ -79,237 +73,9 @@ Json::Value WSConnection::invokeCommand(Json::Value& jvRequest)
|
||||
jvResult["id"] = jvRequest["id"];
|
||||
}
|
||||
|
||||
if (jvResult.isMember("error"))
|
||||
{
|
||||
jvResult["result"] = "error";
|
||||
jvResult["request"] = jvRequest;
|
||||
}
|
||||
else
|
||||
{
|
||||
jvResult["result"] = "success";
|
||||
}
|
||||
|
||||
jvResult["type"] = "response";
|
||||
jvResult["type"] = "response";
|
||||
|
||||
return jvResult;
|
||||
}
|
||||
|
||||
boost::unordered_set<RippleAddress> WSConnection::parseAccountIds(const Json::Value& jvArray)
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaResult;
|
||||
|
||||
for (Json::Value::const_iterator it = jvArray.begin(); it != jvArray.end(); it++)
|
||||
{
|
||||
RippleAddress naString;
|
||||
|
||||
if (!(*it).isString() || !naString.setAccountID((*it).asString()))
|
||||
{
|
||||
usnaResult.clear();
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
(void) usnaResult.insert(naString);
|
||||
}
|
||||
}
|
||||
|
||||
return usnaResult;
|
||||
}
|
||||
|
||||
//
|
||||
// Commands
|
||||
//
|
||||
|
||||
/*
|
||||
server : Sends a message anytime the server status changes such as network connectivity.
|
||||
ledger : Sends a message at every ledger close.
|
||||
transactions : Sends a message for every transaction that makes it into a ledger.
|
||||
rt_transactions
|
||||
accounts
|
||||
rt_accounts
|
||||
*/
|
||||
void WSConnection::doSubscribe(Json::Value& jvResult, Json::Value& jvRequest)
|
||||
{
|
||||
if (jvRequest.isMember("streams"))
|
||||
{
|
||||
for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++)
|
||||
{
|
||||
if ((*it).isString())
|
||||
{
|
||||
std::string streamName=(*it).asString();
|
||||
|
||||
if(streamName=="server")
|
||||
{
|
||||
mNetwork.subServer(this, jvResult);
|
||||
}else if(streamName=="ledger")
|
||||
{
|
||||
mNetwork.subLedger(this, jvResult);
|
||||
}else if(streamName=="transactions")
|
||||
{
|
||||
mNetwork.subTransactions(this);
|
||||
}else if(streamName=="rt_transactions")
|
||||
{
|
||||
mNetwork.subRTTransactions(this);
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName);
|
||||
}
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = "malformedSteam";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("rt_accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["rt_accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
boost::mutex::scoped_lock sl(mLock);
|
||||
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mSubAccountInfo.insert(naAccountID);
|
||||
}
|
||||
|
||||
mNetwork.subAccount(this, usnaAccoundIds,true);
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
boost::mutex::scoped_lock sl(mLock);
|
||||
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mSubAccountInfo.insert(naAccountID);
|
||||
}
|
||||
|
||||
mNetwork.subAccount(this, usnaAccoundIds,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WSConnection::doUnsubscribe(Json::Value& jvResult, Json::Value& jvRequest)
|
||||
{
|
||||
if (jvRequest.isMember("streams"))
|
||||
{
|
||||
for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++)
|
||||
{
|
||||
if ((*it).isString() )
|
||||
{
|
||||
std::string streamName=(*it).asString();
|
||||
|
||||
if(streamName=="server")
|
||||
{
|
||||
mNetwork.unsubServer(this);
|
||||
}else if(streamName=="ledger")
|
||||
{
|
||||
mNetwork.unsubLedger(this);
|
||||
}else if(streamName=="transactions")
|
||||
{
|
||||
mNetwork.unsubTransactions(this);
|
||||
}else if(streamName=="rt_transactions")
|
||||
{
|
||||
mNetwork.unsubRTTransactions(this);
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName);
|
||||
}
|
||||
}else
|
||||
{
|
||||
jvResult["error"] = "malformedSteam";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("rt_accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["rt_accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
boost::mutex::scoped_lock sl(mLock);
|
||||
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mSubAccountInfo.insert(naAccountID);
|
||||
}
|
||||
|
||||
mNetwork.unsubAccount(this, usnaAccoundIds,true);
|
||||
}
|
||||
}
|
||||
|
||||
if (jvRequest.isMember("accounts"))
|
||||
{
|
||||
boost::unordered_set<RippleAddress> usnaAccoundIds = parseAccountIds(jvRequest["accounts"]);
|
||||
|
||||
if (usnaAccoundIds.empty())
|
||||
{
|
||||
jvResult["error"] = "malformedAccount";
|
||||
}else
|
||||
{
|
||||
boost::mutex::scoped_lock sl(mLock);
|
||||
|
||||
BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds)
|
||||
{
|
||||
mSubAccountInfo.insert(naAccountID);
|
||||
}
|
||||
|
||||
mNetwork.unsubAccount(this, usnaAccoundIds,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WSConnection::doRPC(Json::Value& jvResult, Json::Value& jvRequest)
|
||||
{
|
||||
if (jvRequest.isMember("rpc_command") )
|
||||
{
|
||||
jvResult = theApp->getRPCHandler().doCommand(
|
||||
jvRequest["rpc_command"].asString(),
|
||||
jvRequest.isMember("params")
|
||||
? jvRequest["params"]
|
||||
: jvRequest,
|
||||
mHandler->getPublic() ? RPCHandler::GUEST : RPCHandler::ADMIN);
|
||||
|
||||
jvResult["type"] = "response";
|
||||
}
|
||||
else
|
||||
{
|
||||
jvResult["error"] = "fieldNotCommand";
|
||||
}
|
||||
}
|
||||
|
||||
// XXX Currently requires secret. Allow signed transaction as an alternative.
|
||||
void WSConnection::doSubmit(Json::Value& jvResult, Json::Value& jvRequest)
|
||||
{
|
||||
if (!jvRequest.isMember("tx_json"))
|
||||
{
|
||||
jvResult["error"] = "fieldNotFoundTxJson";
|
||||
}else if (!jvRequest.isMember("secret"))
|
||||
{
|
||||
jvResult["error"] = "fieldNotFoundSecret";
|
||||
}else
|
||||
{
|
||||
jvResult=theApp->getRPCHandler().handleJSONSubmit(jvRequest);
|
||||
|
||||
// TODO: track the transaction mNetwork.subSubmit(this, jvResult["tx hash"] );
|
||||
}
|
||||
}
|
||||
|
||||
// vim:ts=4
|
||||
|
||||
@@ -21,10 +21,6 @@ public:
|
||||
protected:
|
||||
typedef void (WSConnection::*doFuncPtr)(Json::Value& jvResult, Json::Value &jvRequest);
|
||||
|
||||
boost::mutex mLock;
|
||||
boost::unordered_set<RippleAddress> mSubAccountInfo;
|
||||
boost::unordered_set<RippleAddress> mSubAccountTransaction;
|
||||
|
||||
WSServerHandler<websocketpp::WSDOOR_SERVER>* mHandler;
|
||||
connection_ptr mConnection;
|
||||
NetworkOPs& mNetwork;
|
||||
@@ -44,13 +40,6 @@ public:
|
||||
|
||||
// Utilities
|
||||
Json::Value invokeCommand(Json::Value& jvRequest);
|
||||
boost::unordered_set<RippleAddress> parseAccountIds(const Json::Value& jvArray);
|
||||
|
||||
// Commands
|
||||
void doSubmit(Json::Value& jvResult, Json::Value& jvRequest);
|
||||
void doRPC(Json::Value& jvResult, Json::Value& jvRequest);
|
||||
void doSubscribe(Json::Value& jvResult, Json::Value& jvRequest);
|
||||
void doUnsubscribe(Json::Value& jvResult, Json::Value& jvRequest);
|
||||
|
||||
};
|
||||
|
||||
|
||||
167
src/js/remote.js
167
src/js/remote.js
@@ -147,6 +147,21 @@ Request.prototype.ripple_state = function (account, issuer, currency) {
|
||||
return this;
|
||||
};
|
||||
|
||||
Request.prototype.accounts = function (accounts) {
|
||||
if ("object" !== typeof accounts) {
|
||||
accounts = [accounts];
|
||||
}
|
||||
|
||||
// Process accounts parameters
|
||||
var procAccounts = [];
|
||||
for (var i = 0, l = accounts.length; i < l; i++) {
|
||||
procAccounts.push(UInt160.json_rewrite(accounts[i]));
|
||||
}
|
||||
this.message.accounts = procAccounts;
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
//
|
||||
// Remote - access to a remote Ripple server via websocket.
|
||||
//
|
||||
@@ -434,13 +449,13 @@ Remote.prototype._connect_message = function (ws, json) {
|
||||
if (!request) {
|
||||
unexpected = true;
|
||||
}
|
||||
else if ('success' === message.result) {
|
||||
if (this.trace) console.log("message: %s", json);
|
||||
else if ('success' === message.status) {
|
||||
if (this.trace) console.log("remote: response: %s", json);
|
||||
|
||||
request.emit('success', message);
|
||||
request.emit('success', message.result);
|
||||
}
|
||||
else if (message.error) {
|
||||
if (this.trace) console.log("message: %s", json);
|
||||
if (this.trace) console.log("remote: error: %s", json);
|
||||
|
||||
request.emit('error', {
|
||||
'error' : 'remoteError',
|
||||
@@ -514,13 +529,33 @@ Remote.prototype.request = function (request) {
|
||||
}
|
||||
};
|
||||
|
||||
Remote.prototype.request_server_info = function () {
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'server_info';
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_ledger = function (params) {
|
||||
// XXX Does this require the server to be trusted?
|
||||
//assert(this.trusted);
|
||||
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'ledger';
|
||||
request.message.params = params;
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
// Only for unit testing.
|
||||
Remote.prototype.request_ledger_hash = function () {
|
||||
assert(this.trusted); // If not trusted, need to check proof.
|
||||
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.rpc_command = 'ledger_closed';
|
||||
request.message.command = 'ledger_closed';
|
||||
|
||||
return request;
|
||||
};
|
||||
@@ -530,7 +565,7 @@ Remote.prototype.request_ledger_hash = function () {
|
||||
Remote.prototype.request_ledger_current = function () {
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.rpc_command = 'ledger_current';
|
||||
request.message.command = 'ledger_current';
|
||||
|
||||
return request;
|
||||
};
|
||||
@@ -545,7 +580,7 @@ Remote.prototype.request_ledger_entry = function (type) {
|
||||
var self = this;
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.rpc_command = 'ledger_entry';
|
||||
request.message.command = 'ledger_entry';
|
||||
|
||||
if (type)
|
||||
this.type = type;
|
||||
@@ -598,10 +633,28 @@ Remote.prototype.request_ledger_entry = function (type) {
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_subscribe = function () {
|
||||
Remote.prototype.request_subscribe = function (streams) {
|
||||
var request = new Request(this, 'subscribe');
|
||||
|
||||
request.message.streams = [ 'ledger', 'server' ];
|
||||
if (streams) {
|
||||
if ("object" !== typeof streams) {
|
||||
streams = [streams];
|
||||
}
|
||||
request.message.streams = streams;
|
||||
}
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_unsubscribe = function (streams) {
|
||||
var request = new Request(this, 'unsubscribe');
|
||||
|
||||
if (streams) {
|
||||
if ("object" !== typeof streams) {
|
||||
streams = [streams];
|
||||
}
|
||||
request.message.streams = streams;
|
||||
}
|
||||
|
||||
return request;
|
||||
};
|
||||
@@ -611,18 +664,55 @@ Remote.prototype.request_transaction_entry = function (hash) {
|
||||
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.rpc_command = 'transaction_entry';
|
||||
request.message.command = 'transaction_entry';
|
||||
|
||||
return request
|
||||
.tx_hash(hash);
|
||||
};
|
||||
|
||||
Remote.prototype.request_ripple_lines_get = function (accountID) {
|
||||
// XXX Does this require the server to be trusted?
|
||||
//assert(this.trusted);
|
||||
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'ripple_lines_get';
|
||||
// XXX Convert API call to JSON
|
||||
request.message.params = [accountID];
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_wallet_accounts = function (key) {
|
||||
// XXX Does this require the server to be trusted?
|
||||
//assert(this.trusted);
|
||||
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'wallet_accounts';
|
||||
// XXX Convert API call to JSON
|
||||
request.message.params = [key];
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_account_tx = function (accountID, minLedger, maxLedger) {
|
||||
// XXX Does this require the server to be trusted?
|
||||
//assert(this.trusted);
|
||||
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'account_tx';
|
||||
// XXX Convert API call to JSON
|
||||
request.message.params = [accountID, minLedger, maxLedger];
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
// Submit a transaction.
|
||||
Remote.prototype.submit = function (transaction) {
|
||||
var self = this;
|
||||
|
||||
if (this.trace) console.log("remote: submit: %s", JSON.stringify(transaction.tx_json));
|
||||
|
||||
if (transaction.secret && !this.trusted)
|
||||
{
|
||||
transaction.emit('error', {
|
||||
@@ -663,7 +753,7 @@ Remote.prototype.submit = function (transaction) {
|
||||
else {
|
||||
var submit_request = new Request(this, 'rpc');
|
||||
|
||||
submit_request.message.rpc_command = 'submit_json';
|
||||
submit_request.message.command = 'submit_json';
|
||||
|
||||
submit_request.tx_json(transaction.tx_json);
|
||||
submit_request.secret(transaction.secret);
|
||||
@@ -690,7 +780,7 @@ Remote.prototype.submit = function (transaction) {
|
||||
Remote.prototype._server_subscribe = function () {
|
||||
var self = this;
|
||||
|
||||
this.request_subscribe()
|
||||
this.request_subscribe([ 'ledger', 'server' ])
|
||||
.on('success', function (message) {
|
||||
self.stand_alone = !!message.stand_alone;
|
||||
|
||||
@@ -720,7 +810,7 @@ Remote.prototype.ledger_accept = function () {
|
||||
{
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.rpc_command = 'ledger_accept';
|
||||
request.message.command = 'ledger_accept';
|
||||
|
||||
request
|
||||
.request();
|
||||
@@ -771,7 +861,7 @@ Remote.prototype.set_account_seq = function (account, seq) {
|
||||
var account = UInt160.json_rewrite(account);
|
||||
|
||||
if (!this.accounts[account]) this.accounts[account] = {};
|
||||
|
||||
|
||||
this.accounts[account].seq = seq;
|
||||
}
|
||||
|
||||
@@ -811,7 +901,7 @@ Remote.prototype.account_seq_cache = function (account, current) {
|
||||
account_info.caching_seq_request = request;
|
||||
}
|
||||
|
||||
return request
|
||||
return request;
|
||||
};
|
||||
|
||||
// Mark an account's root node as dirty.
|
||||
@@ -866,6 +956,49 @@ Remote.prototype.request_ripple_balance = function (account, issuer, currency, c
|
||||
});
|
||||
}
|
||||
|
||||
Remote.prototype.request_unl_list = function () {
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'unl_list';
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_unl_add = function (addr, note) {
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'unl_add';
|
||||
request.message.params = [addr, note];
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_unl_delete = function (publicKey) {
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'unl_delete';
|
||||
request.message.params = [publicKey];
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_peers = function () {
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'peers';
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.request_connect = function (ip, port) {
|
||||
var request = new Request(this, 'rpc');
|
||||
|
||||
request.message.command = 'connect';
|
||||
request.message.params = [ip, port];
|
||||
|
||||
return request;
|
||||
};
|
||||
|
||||
Remote.prototype.transaction = function () {
|
||||
return new Transaction(this);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user