From fbd67bda89ab8966e94d5bbbbb00229f8aea0455 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 19 Aug 2012 18:54:26 -0700 Subject: [PATCH] Let issuer be defaulted for RPC ripple command. --- src/RPCServer.cpp | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 93d800c3f1..11545daf7e 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -1315,9 +1315,9 @@ Json::Value RPCServer::doPeers(const Json::Value& params) } // ripple -// [noredeem] [noissue] +// [] // XXX [noredeem] [noissue] // + -// full|partial +// full|partial [] // // path: // path + @@ -1331,6 +1331,7 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms) STAmount saSrcAmountMax; uint160 uSrcCurrencyID; NewcoinAddress naSrcAccountID; + NewcoinAddress naSrcIssuerID; bool bSrcRedeem = true; bool bSrcIssue = true; bool bPartial; @@ -1338,11 +1339,12 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms) NewcoinAddress naDstAccountID; STAmount saDstAmount; uint160 uDstCurrencyID; - NewcoinAddress naDstIssuerID; std::vector vpnPath; STPathSet spsPaths; + naSrcIssuerID.setAccountID(params[4u].asString()); // + if (!naSeed.setSeedGeneric(params[0u].asString())) // { return RPCError(rpcBAD_SEED); @@ -1351,13 +1353,18 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms) { return RPCError(rpcSRC_ACT_MALFORMED); } - // - else if (!saSrcAmountMax.setFullValue(params[2u].asString(), params[3u].asString(), params[4u].asString())) + // [] + else if (!saSrcAmountMax.setFullValue(params[2u].asString(), params[3u].asString(), params[naSrcIssuerID.isValid() ? 4u : 1u].asString())) { + // Log(lsINFO) << "naSrcIssuerID.isValid(): " << naSrcIssuerID.isValid(); + // Log(lsINFO) << "source_max: " << params[2u].asString(); + // Log(lsINFO) << "source_currency: " << params[3u].asString(); + // Log(lsINFO) << "source_issuer: " << params[naSrcIssuerID.isValid() ? 4u : 2u].asString(); + return RPCError(rpcSRC_AMT_MALFORMED); } - int iArg = 5; + int iArg = 4 + naSrcIssuerID.isValid(); if (params[iArg].asString() == "noredeem") // [noredeem] { @@ -1483,14 +1490,21 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms) { return RPCError(rpcDST_ACT_MALFORMED); } + + const unsigned int uDstIssuer = params.size() == iArg + 3 ? iArg+2 : iArg-1; + // - else if (params.size() != iArg + 3 || !saDstAmount.setFullValue(params[iArg].asString(), params[iArg+1].asString(), params[iArg+2].asString())) + if (params.size() != iArg + 2 && params.size() != iArg + 3) { - Log(lsINFO) << "params.size(): " << params.size(); - Log(lsINFO) << " iArg: " << iArg; - Log(lsINFO) << " Amount: " << params[iArg].asString(); - Log(lsINFO) << "Currency: " << params[iArg+1].asString(); - Log(lsINFO) << " Issuer: " << params[iArg+2].asString(); + // Log(lsINFO) << "params.size(): " << params.size(); + + return RPCError(rpcDST_AMT_MALFORMED); + } + else if (!saDstAmount.setFullValue(params[iArg].asString(), params[iArg+1].asString(), params[uDstIssuer].asString())) + { + // Log(lsINFO) << " Amount: " << params[iArg].asString(); + // Log(lsINFO) << "Currency: " << params[iArg+1].asString(); + // Log(lsINFO) << " Issuer: " << params[uDstIssuer].asString(); return RPCError(rpcDST_AMT_MALFORMED); } @@ -1515,6 +1529,8 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms) // YYY Limit paths length and count. if (!asDst) { + Log(lsINFO) << "naDstAccountID: " << naDstAccountID.humanAccountID(); + return RPCError(rpcDST_ACT_MISSING); } @@ -2526,7 +2542,7 @@ Json::Value RPCServer::doCommand(const std::string& command, Json::Value& params { "password_fund", &RPCServer::doPasswordFund, 2, 3, false, optCurrent }, { "password_set", &RPCServer::doPasswordSet, 2, 3, false, optNetwork }, { "peers", &RPCServer::doPeers, 0, 0, true }, - { "ripple", &RPCServer::doRipple, 10, -1, false, optCurrent|optClosed }, + { "ripple", &RPCServer::doRipple, 8, -1, false, optCurrent|optClosed }, { "ripple_lines_get", &RPCServer::doRippleLinesGet, 1, 2, false, optCurrent }, { "ripple_line_set", &RPCServer::doRippleLineSet, 4, 7, false, optCurrent }, { "send", &RPCServer::doSend, 3, 7, false, optCurrent },