From 61596f0717f0835784432a14a385599096b9d290 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 4 Dec 2012 23:56:05 -0800 Subject: [PATCH] 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: