Merge branch 'master' of github.com:jedmccaleb/NewCoin

This commit is contained in:
JoelKatz
2012-11-13 15:31:19 -08:00
4 changed files with 65 additions and 62 deletions

View File

@@ -1165,11 +1165,10 @@ std::map<RippleAddress,bool> NetworkOPs::getAffectedAccounts(const SerializedTra
const STAccount* sa = dynamic_cast<const STAccount*>(&it);
if (sa)
{
bool found = false;
RippleAddress na = sa->getValueNCA();
accounts[na]=true;
}else
{
{
if( it.getFName() == sfLimitAmount )
{
const STAmount* amount = dynamic_cast<const STAmount*>(&it);

View File

@@ -1313,13 +1313,15 @@ Json::Value RPCHandler::doCommand(const std::string& command, Json::Value& param
cLog(lsTRACE) << "RPC:" << command;
cLog(lsTRACE) << "RPC params:" << params;
mRole = role;
static struct {
const char* pCommand;
doFuncPtr dfpFunc;
int iMinParams;
int iMaxParams;
bool mAdminRequired;
bool mEvented;
bool bAdminRequired;
bool bEvented;
unsigned int iOptions;
} commandsA[] = {
// Request-response methods
@@ -1336,6 +1338,7 @@ Json::Value RPCHandler::doCommand(const std::string& command, Json::Value& param
{ "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 },
{ "ledger_header", &RPCHandler::doLedgerHeader, -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 },
@@ -1381,11 +1384,11 @@ Json::Value RPCHandler::doCommand(const std::string& command, Json::Value& param
{
return rpcError(rpcUNKNOWN_COMMAND);
}
else if (commandsA[i].mAdminRequired && role != ADMIN)
else if (commandsA[i].bAdminRequired && mRole != ADMIN)
{
return rpcError(rpcNO_PERMISSION);
}
else if (commandsA[i].mEvented && mInfoSub == NULL)
else if (commandsA[i].bEvented && mInfoSub == NULL)
{
return rpcError(rpcNO_EVENTS);
}
@@ -1706,15 +1709,13 @@ Json::Value RPCHandler::doTransactionEntry(const Json::Value& jvRequest)
return jvResult;
}
Json::Value RPCHandler::doLedgerEntry(const Json::Value& jvRequest)
Json::Value RPCHandler::lookupLedger(const Json::Value& jvRequest, Ledger::pointer& lpLedger)
{
Json::Value jvResult;
uint256 uLedger = jvRequest.isMember("ledger_hash") ? uint256(jvRequest["ledger_hash"].asString()) : 0;
uint32 uLedgerIndex = jvRequest.isMember("ledger_index") && jvRequest["ledger_index"].isNumeric() ? jvRequest["ledger_index"].asUInt() : 0;
Ledger::pointer lpLedger;
if (!!uLedger)
{
// Ledger directly specified.
@@ -1757,6 +1758,17 @@ Json::Value RPCHandler::doLedgerEntry(const Json::Value& jvRequest)
jvResult["ledger_current_index"] = uLedgerIndex;
}
return jvResult;
}
Json::Value RPCHandler::doLedgerEntry(const Json::Value& jvRequest)
{
Ledger::pointer lpLedger;
Json::Value jvResult = lookupLedger(jvRequest, lpLedger);
if (!lpLedger)
return jvResult;
uint256 uNodeIndex;
bool bNodeBinary = false;
@@ -1952,6 +1964,25 @@ Json::Value RPCHandler::doLedgerEntry(const Json::Value& jvRequest)
return jvResult;
}
Json::Value RPCHandler::doLedgerHeader(const Json::Value& jvRequest)
{
Ledger::pointer lpLedger;
Json::Value jvResult = lookupLedger(jvRequest, lpLedger);
if (!lpLedger)
return jvResult;
Serializer s;
lpLedger->addRaw(s);
jvResult["ledger_data"] = strHex(s.peekData());
if (mRole == ADMIN)
lpLedger->addJson(jvResult, 0);
return jvRequest;
}
boost::unordered_set<RippleAddress> RPCHandler::parseAccountIds(const Json::Value& jvArray)
{

View File

@@ -8,6 +8,7 @@ class RPCHandler
{
NetworkOPs* mNetOps;
InfoSub* mInfoSub;
int mRole;
typedef Json::Value (RPCHandler::*doFuncPtr)(const Json::Value &params);
enum {
@@ -22,6 +23,8 @@ class RPCHandler
int getParamCount(const Json::Value& params);
bool extractString(std::string& param, const Json::Value& params, int index);
Json::Value lookupLedger(const Json::Value& jvRequest, Ledger::pointer& lpLedger);
Json::Value getMasterGenerator(const uint256& uLedger, const RippleAddress& naRegularSeed, RippleAddress& naMasterGenerator);
Json::Value authorize(const uint256& uLedger, const RippleAddress& naRegularSeed, const RippleAddress& naSrcAccountID,
RippleAddress& naAccountPublic, RippleAddress& naAccountPrivate,
@@ -86,6 +89,7 @@ class RPCHandler
Json::Value doLedgerClosed(const Json::Value& params);
Json::Value doLedgerCurrent(const Json::Value& params);
Json::Value doLedgerEntry(const Json::Value& params);
Json::Value doLedgerHeader(const Json::Value& params);
Json::Value doTransactionEntry(const Json::Value& params);
Json::Value doSubscribe(const Json::Value& params);

View File

@@ -530,21 +530,16 @@ Remote.prototype.request = function (request) {
};
Remote.prototype.request_server_info = function () {
var request = new Request(this, 'rpc');
request.message.command = 'server_info';
return request;
return new Request(this, 'server_info');
};
Remote.prototype.request_ledger = function (params) {
// XXX Does this require the server to be trusted?
//assert(this.trusted);
var request = new Request(this, 'rpc');
var request = new Request(this, 'ledger');
request.message.command = 'ledger';
request.message.params = params;
request.message.params = params;
return request;
};
@@ -553,21 +548,19 @@ Remote.prototype.request_ledger = function (params) {
Remote.prototype.request_ledger_hash = function () {
assert(this.trusted); // If not trusted, need to check proof.
var request = new Request(this, 'rpc');
request.message.command = 'ledger_closed';
return new Request(this, 'ledger_closed');
};
return request;
// .ledger()
// .ledger_index()
Remote.prototype.request_ledger_header = function () {
return new Request(this, 'ledger_header');
};
// Get the current proposed ledger entry. May be closed (and revised) at any time (even before returning).
// Only for unit testing.
Remote.prototype.request_ledger_current = function () {
var request = new Request(this, 'rpc');
request.message.command = 'ledger_current';
return request;
return new Request(this, 'ledger_current');
};
// --> type : the type of ledger entry.
@@ -578,9 +571,7 @@ Remote.prototype.request_ledger_entry = function (type) {
assert(this.trusted); // If not trusted, need to check proof, maybe talk packet protocol.
var self = this;
var request = new Request(this, 'rpc');
request.message.command = 'ledger_entry';
var request = new Request(this, 'ledger_entry');
if (type)
this.type = type;
@@ -662,11 +653,7 @@ Remote.prototype.request_unsubscribe = function (streams) {
Remote.prototype.request_transaction_entry = function (hash) {
assert(this.trusted); // If not trusted, need to check proof, maybe talk packet protocol.
var request = new Request(this, 'rpc');
request.message.command = 'transaction_entry';
return request
return (new Request(this, 'transaction_entry'))
.tx_hash(hash);
};
@@ -674,9 +661,8 @@ 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');
var request = new Request(this, 'ripple_lines_get');
request.message.command = 'ripple_lines_get';
// XXX Convert API call to JSON
request.message.params = [accountID];
@@ -687,9 +673,8 @@ 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');
var request = new Request(this, 'wallet_accounts');
request.message.command = 'wallet_accounts';
// XXX Convert API call to JSON
request.message.params = [key];
@@ -700,9 +685,8 @@ 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');
var request = new Request(this, 'account_tx');
request.message.command = 'account_tx';
// XXX Convert API call to JSON
request.message.params = [accountID, minLedger, maxLedger];
@@ -751,9 +735,7 @@ Remote.prototype.submit = function (transaction) {
.request();
}
else {
var submit_request = new Request(this, 'rpc');
submit_request.message.command = 'submit_json';
var submit_request = new Request(this, 'submit_json');
submit_request.tx_json(transaction.tx_json);
submit_request.secret(transaction.secret);
@@ -808,9 +790,7 @@ Remote.prototype._server_subscribe = function () {
Remote.prototype.ledger_accept = function () {
if (this.stand_alone || undefined === this.stand_alone)
{
var request = new Request(this, 'rpc');
request.message.command = 'ledger_accept';
var request = new Request(this, 'ledger_accept');
request
.request();
@@ -957,43 +937,32 @@ 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;
return new Request(this, 'unl_list');
};
Remote.prototype.request_unl_add = function (addr, note) {
var request = new Request(this, 'rpc');
var request = new Request(this, 'unl_add');
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');
var request = new Request(this, 'unl_delete');
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;
return new Request(this, 'peers');
};
Remote.prototype.request_connect = function (ip, port) {
var request = new Request(this, 'rpc');
var request = new Request(this, 'connect');
request.message.command = 'connect';
request.message.params = [ip, port];
return request;