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