diff --git a/ripple2010.vcxproj b/ripple2010.vcxproj index 085035df94..e785bc9c3c 100644 --- a/ripple2010.vcxproj +++ b/ripple2010.vcxproj @@ -39,6 +39,7 @@ true + rippled false @@ -293,6 +294,7 @@ + Designer diff --git a/ripple2010.vcxproj.filters b/ripple2010.vcxproj.filters index 6ad621db5f..bec881141d 100644 --- a/ripple2010.vcxproj.filters +++ b/ripple2010.vcxproj.filters @@ -357,6 +357,9 @@ Source Files + + Source Files + @@ -642,13 +645,15 @@ html - - + + + + diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 6dc7b87bb3..7114b68f8d 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -893,8 +893,15 @@ void LedgerEntrySet::ownerCountAdjust(const uint160& uOwnerID, int iAmount, SLE: const uint32 uOwnerCount = sleRoot->getFieldU32(sfOwnerCount); - if (iAmount + int(uOwnerCount) >= 0) + const uint32 uNew = iAmount + int(uOwnerCount) > 0 + ? uOwnerCount+iAmount + : 0; + + if (uOwnerCount != uNew) + { sleRoot->setFieldU32(sfOwnerCount, uOwnerCount+iAmount); + entryModify(sleRoot); + } } TER LedgerEntrySet::offerDelete(SLE::ref sleOffer, const uint256& uOfferIndex, const uint160& uOwnerID) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 3fe7a495d0..104f5952da 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1674,7 +1674,7 @@ bool NetworkOPs::subLedger(InfoSub::ref isrListener, Json::Value& jvResult) jvResult["reserve_inc"] = Json::UInt(lpClosed->getReserveInc()); if ((mMode == omFULL) || (mMode == omTRACKING)) - jvResult["valid_ledgers"] = theApp->getLedgerMaster().getCompleteLedgers(); + jvResult["validated_ledgers"] = theApp->getLedgerMaster().getCompleteLedgers(); boost::recursive_mutex::scoped_lock sl(mMonitorLock); return mSubLedger.insert(std::make_pair(isrListener->getSeq(), isrListener)).second; diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index ebf310da53..6b121d68e4 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1696,7 +1696,7 @@ Json::Value RPCHandler::doAccountTransactions(Json::Value jvRequest, int& cost) try { #endif - int vl = mNetOps->getValidatedSeq(); + unsigned int vl = mNetOps->getValidatedSeq(); ScopedUnlock su(theApp->getMasterLock()); Json::Value ret(Json::objectValue); @@ -2729,11 +2729,25 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest, int& cost) if(currencyIn.isNonZero()) STAmount::issuerFromString(issuerIn,(*it)["IssuerIn"].asString()); + bool bothSides=false; + if((*it).isMember("BothSides") && (*it)["BothSides"].asBool()) bothSides=true; + mNetOps->subBook(ispSub, currencyIn, currencyOut, issuerIn, issuerOut); + if(bothSides) mNetOps->subBook(ispSub, currencyOut, currencyIn, issuerOut, issuerIn); if((*it)["StateNow"].asBool()) { - //lpLedger = theApp->getLedgerMaster().getClosedLedger(); - //mNetOps->getBookPage(lpLedger, uTakerPaysCurrencyID, uTakerPaysIssuerID, uTakerGetsCurrencyID, uTakerGetsIssuerID, raTakerID.getAccountID(), false, iLimit, jvMarker, jvResult); + Ledger::pointer ledger= theApp->getLedgerMaster().getClosedLedger(); + RippleAddress raTakerID; + raTakerID.setAccountID(ACCOUNT_ONE); + const Json::Value jvMarker = Json::Value(Json::nullValue); + mNetOps->getBookPage(ledger, currencyOut, issuerOut, currencyIn, issuerIn, raTakerID.getAccountID(), false, 0, jvMarker, jvResult); + if(bothSides) + { + Json::Value tempJson(Json::objectValue); + if(jvResult.isMember("offers")) jvResult["bids"]=jvResult["offers"]; + mNetOps->getBookPage(ledger, currencyIn, issuerIn, currencyOut, issuerOut, raTakerID.getAccountID(), false, 0, jvMarker, tempJson); + if(tempJson.isMember("offers")) jvResult["asks"]=tempJson["offers"]; + } } } } diff --git a/src/js/sjcl b/src/js/sjcl index dbdef434e7..d04d0bdccd 160000 --- a/src/js/sjcl +++ b/src/js/sjcl @@ -1 +1 @@ -Subproject commit dbdef434e76c3f16835f3126a7ff1c717b1ce8af +Subproject commit d04d0bdccd986e434b98fe393e1e01286c10fc36