diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 7234a0a640..c9c76beee7 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -774,14 +774,13 @@ SLE::pointer Ledger::getASNode(LedgerStateParms& parms, const uint256& nodeID, if ( (parms & lepCREATE) == 0 ) { parms = lepMISSING; -cLog(lsDEBUG) << "getASNode: MISSING"; + return SLE::pointer(); } parms = parms | lepCREATED | lepOKAY; SLE::pointer sle=boost::make_shared(let, nodeID); -cLog(lsDEBUG) << "getASNode: CREATED"; return sle; } @@ -790,14 +789,12 @@ cLog(lsDEBUG) << "getASNode: CREATED"; if (sle->getType() != let) { // maybe it's a currency or something -cLog(lsDEBUG) << "getASNode: WRONG TYPE"; parms = parms | lepWRONGTYPE; return SLE::pointer(); } parms = parms | lepOKAY; -cLog(lsDEBUG) << "getASNode: FOUND"; return sle; } diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index e706ab4b55..9ec450ddfc 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1307,8 +1307,24 @@ bool NetworkOPs::unsubLedger(InfoSub* ispListener) // <-- bool: true=added, false=already there bool NetworkOPs::subServer(InfoSub* ispListener, Json::Value& jvResult) { + uint256 uRandom; + jvResult["stand_alone"] = theConfig.RUN_STANDALONE; + switch (RAND_bytes(uRandom.begin(), uRandom.size())) + { + case 0: + case 1: + jvResult["random"] = uRandom.ToString(); + break; + + case -1: + default: + // XXX Should probably stop running. + cLog(lsFATAL) << "Internal error: unable to generate secure random."; + break; + } + return mSubServer.insert(ispListener).second; } diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 9d0728475f..3060d8e5e2 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -658,13 +658,13 @@ Json::Value RPCHandler::doAccountOffers(Json::Value jvRequest) // Result: // { -// random: +// random: // } Json::Value RPCHandler::doRandom(Json::Value jvRequest) { - uint160 uRandom; + uint256 uRandom; - switch (RAND_pseudo_bytes(uRandom.begin(), uRandom.size())) + switch (RAND_bytes(uRandom.begin(), uRandom.size())) { case 0: case 1: diff --git a/src/js/remote.js b/src/js/remote.js index 18d1b8fd61..f7e02742cd 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -841,6 +841,9 @@ Remote.prototype._server_subscribe = function () { .on('success', function (message) { self.stand_alone = !!message.stand_alone; + if (message.random) + self.emit('random', utils.hexToArray(message.random)); + if (message.ledger_hash && message.ledger_index) { self._ledger_time = message.ledger_time; self._ledger_hash = message.ledger_hash; diff --git a/src/js/utils.js b/src/js/utils.js index 0128711f2c..d337763a67 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -70,6 +70,10 @@ var stringToArray = function (s) { return a; }; +var hexToArray = function (h) { + return stringToArray(hexToString(h)); +} + var chunkString = function (str, n, leftAlign) { var ret = []; var i=0, len=str.length; @@ -96,6 +100,7 @@ var assert = function (assertion, msg) { exports.trace = trace; exports.arraySet = arraySet; exports.hexToString = hexToString; +exports.hexToArray = hexToArray; exports.stringToArray = stringToArray; exports.stringToHex = stringToHex; exports.chunkString = chunkString;