From d6b0dca1461714b1beeb762a8b88d174d55655b9 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 4 Dec 2012 19:27:44 -0800 Subject: [PATCH 1/4] JS: Fix offline reporting. --- src/js/remote.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/remote.js b/src/js/remote.js index 07d15b2c0..b03ec966c 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -359,6 +359,7 @@ Remote.prototype._connect_retry = function () { this.online_state = 'connecting'; this.retry = 0; + this._set_state('offline'); // Report newly offline. this._connect_start(); } else @@ -413,7 +414,7 @@ Remote.prototype._connect_start = function () { if (self.online_target) { self._set_state('online'); - // Note, we could get disconnected before tis go through. + // Note, we could get disconnected before this goes through. self._server_subscribe(); // Automatically subscribe. } else { From f44e58776f9b3d0bbe9f8f3e524f900a410f9937 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 4 Dec 2012 23:37:45 -0800 Subject: [PATCH 2/4] Add support for RPC random. --- src/cpp/ripple/CallRPC.cpp | 5 +++-- src/cpp/ripple/CallRPC.h | 3 ++- src/cpp/ripple/RPCHandler.cpp | 22 ++++++++++++++++++++-- src/cpp/ripple/RPCHandler.h | 14 +++++--------- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index b9b5cb529..e47ad21ba 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -394,6 +394,8 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) // - To modify the method, provide a new method in the request. { "accept_ledger", &RPCParser::parseAsIs, 0, 0 }, { "account_info", &RPCParser::parseAccountInfo, 1, 2 }, + { "account_lines", &RPCParser::parseAccountItems, 1, 2 }, + { "account_offers", &RPCParser::parseAccountItems, 1, 2 }, { "account_tx", &RPCParser::parseAccountTransactions, 2, 3 }, { "connect", &RPCParser::parseConnect, 1, 2 }, { "get_counts", &RPCParser::parseGetCounts, 0, 1 }, @@ -409,8 +411,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "owner_info", &RPCParser::parseOwnerInfo, 1, 2 }, { "peers", &RPCParser::parseAsIs, 0, 0 }, // { "profile", &RPCParser::parseProfile, 1, 9 }, - { "account_lines", &RPCParser::parseAccountItems, 1, 2 }, - { "account_offers", &RPCParser::parseAccountItems, 1, 2 }, + { "random", &RPCParser::parseAsIs, 0, 0 }, // { "ripple_path_find", &RPCParser::parseRipplePathFind, -1, -1 }, { "submit", &RPCParser::parseSubmit, 2, 2 }, { "server_info", &RPCParser::parseAsIs, 0, 0 }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 4654533bc..cd01faafc 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -12,6 +12,7 @@ protected: typedef Json::Value (RPCParser::*parseFuncPtr)(const Json::Value &jvParams); Json::Value parseAccountInfo(const Json::Value& jvParams); + Json::Value parseAccountItems(const Json::Value& jvParams); Json::Value parseAccountTransactions(const Json::Value& jvParams); Json::Value parseAsIs(const Json::Value& jvParams); Json::Value parseConnect(const Json::Value& jvParams); @@ -23,7 +24,7 @@ protected: Json::Value parseLedger(const Json::Value& jvParams); Json::Value parseLogin(const Json::Value& jvParams); Json::Value parseOwnerInfo(const Json::Value& jvParams); - Json::Value parseAccountItems(const Json::Value& jvParams); + Json::Value parseRandom(const Json::Value& jvParams); Json::Value parseSubmit(const Json::Value& jvParams); Json::Value parseTx(const Json::Value& jvParams); Json::Value parseTxHistory(const Json::Value& jvParams); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 59577ead6..980b78e98 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -689,6 +689,23 @@ Json::Value RPCHandler::doAccountOffers(Json::Value jvRequest) return jvResult; } +// Result: +// { +// random: +// } +Json::Value RPCHandler::doRandom(Json::Value jvRequest) +{ + uint160 uRandom; + + RAND_bytes(uRandom.begin(), uRandom.size()); + + Json::Value jvResult; + + jvResult["random"] = uRandom.ToString(); + + return jvResult; +} + // TODO: // - Add support for specifying non-endpoint issuer. // - Return fully expanded path with proof. @@ -2262,6 +2279,8 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) // Request-response methods { "accept_ledger", &RPCHandler::doAcceptLedger, true, false, optCurrent }, { "account_info", &RPCHandler::doAccountInfo, false, false, optCurrent }, + { "account_lines", &RPCHandler::doAccountLines, false, false, optCurrent }, + { "account_offers", &RPCHandler::doAccountOffers, false, false, optCurrent }, { "account_tx", &RPCHandler::doAccountTransactions, false, false, optNetwork }, { "connect", &RPCHandler::doConnect, true, false, optNone }, { "get_counts", &RPCHandler::doGetCounts, true, false, optNone }, @@ -2277,8 +2296,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "owner_info", &RPCHandler::doOwnerInfo, false, false, optCurrent }, { "peers", &RPCHandler::doPeers, true, false, optNone }, // { "profile", &RPCHandler::doProfile, false, false, optCurrent }, - { "account_lines", &RPCHandler::doAccountLines, false, false, optCurrent }, - { "account_offers", &RPCHandler::doAccountOffers, false, false, optCurrent }, + { "random", &RPCHandler::doRandom, false, false, optNone }, { "ripple_path_find", &RPCHandler::doRipplePathFind, false, false, optCurrent }, { "submit", &RPCHandler::doSubmit, false, false, optCurrent }, { "server_info", &RPCHandler::doServerInfo, true, false, optNone }, diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index 31b90e1f6..4f77f3599 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -38,6 +38,8 @@ class RPCHandler Json::Value doAcceptLedger(Json::Value jvRequest); Json::Value doAccountInfo(Json::Value params); + Json::Value doAccountLines(Json::Value params); + Json::Value doAccountOffers(Json::Value params); Json::Value doAccountTransactions(Json::Value params); Json::Value doConnect(Json::Value params); Json::Value doDataDelete(Json::Value params); @@ -45,27 +47,21 @@ class RPCHandler Json::Value doDataStore(Json::Value params); Json::Value doGetCounts(Json::Value params); Json::Value doLedger(Json::Value params); + Json::Value doLogLevel(Json::Value params); Json::Value doLogRotate(Json::Value params); Json::Value doNicknameInfo(Json::Value params); - Json::Value doOwnerInfo(Json::Value params); - - Json::Value doProfile(Json::Value params); Json::Value doPeers(Json::Value params); - - Json::Value doAccountLines(Json::Value params); - Json::Value doAccountOffers(Json::Value params); + Json::Value doProfile(Json::Value params); + Json::Value doRandom(Json::Value jvRequest); Json::Value doRipplePathFind(Json::Value jvRequest); Json::Value doServerInfo(Json::Value params); Json::Value doSessionClose(Json::Value params); Json::Value doSessionOpen(Json::Value params); - Json::Value doLogLevel(Json::Value params); Json::Value doStop(Json::Value params); Json::Value doSubmit(Json::Value params); Json::Value doTx(Json::Value params); Json::Value doTxHistory(Json::Value params); - - Json::Value doUnlAdd(Json::Value params); Json::Value doUnlDelete(Json::Value params); Json::Value doUnlFetch(Json::Value params); From be243d5d34e3580a8fa10c5d11a1088e5529fc0c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 4 Dec 2012 23:40:50 -0800 Subject: [PATCH 3/4] Cosmetic. --- src/cpp/ripple/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 34d262f4d..fa3606777 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -61,6 +61,7 @@ void printHelp(const po::options_description& desc) cerr << " password_fund []" << endl; cerr << " password_set []" << endl; cerr << " peers" << endl; + cerr << " random" << endl; cerr << " ripple ..." << endl; cerr << " ripple_line_set [] []" << endl; cerr << " send [] [] []" << endl; From 61596f0717f0835784432a14a385599096b9d290 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 4 Dec 2012 23:56:05 -0800 Subject: [PATCH 4/4] Improve RPC random. --- src/cpp/ripple/RPCErr.cpp | 1 + src/cpp/ripple/RPCErr.h | 1 + src/cpp/ripple/RPCHandler.cpp | 20 ++++++++++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index 9c4112db1..4e1eecc12 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -47,6 +47,7 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcNO_PATH, "noPath", "Unable to find a ripple path." }, { rpcNO_PERMISSION, "noPermission", "You don't have permission for this command." }, { rpcNOT_STANDALONE, "notStandAlone", "Operation valid in debug mode only." }, + { rpcNOT_SUPPORTED, "notSupported", "Operation not supported." }, { rpcPASSWD_CHANGED, "passwdChanged", "Wrong key, password changed." }, { rpcPAYS_ACT_MALFORMED, "paysActMalformed", "Pays account malformed." }, { rpcPAYS_AMT_MALFORMED, "paysAmtMalformed", "Pays amount malformed." }, diff --git a/src/cpp/ripple/RPCErr.h b/src/cpp/ripple/RPCErr.h index f2b73336e..d77cc2435 100644 --- a/src/cpp/ripple/RPCErr.h +++ b/src/cpp/ripple/RPCErr.h @@ -67,6 +67,7 @@ enum { rpcINTERNAL, // Generic internal error. rpcFAIL_GEN_DECRPYT, rpcNOT_IMPL, + rpcNOT_SUPPORTED, rpcNO_GEN_DECRPYT, }; diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 980b78e98..23579ea01 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -697,13 +697,25 @@ Json::Value RPCHandler::doRandom(Json::Value jvRequest) { uint160 uRandom; - RAND_bytes(uRandom.begin(), uRandom.size()); + switch (RAND_pseudo_bytes(uRandom.begin(), uRandom.size())) + { + case 0: + case 1: + { + Json::Value jvResult; - Json::Value jvResult; + jvResult["random"] = uRandom.ToString(); - jvResult["random"] = uRandom.ToString(); + return jvResult; + } + break; - return jvResult; + case -1: + return rpcError(rpcNOT_SUPPORTED); + + default: + return rpcError(rpcINTERNAL); + } } // TODO: