From 2522c4625f0508c3254385337f500ec3c9bd3539 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 20 Aug 2012 12:37:36 -0700 Subject: [PATCH] Fixes for paths. --- src/SerializedTypes.cpp | 37 +++++++++++++++++++++++++++++++------ src/SerializedTypes.h | 2 +- src/Transaction.cpp | 10 +++++----- src/Transaction.h | 4 ++-- 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/src/SerializedTypes.cpp b/src/SerializedTypes.cpp index 2a6b0f978e..16572e5d78 100644 --- a/src/SerializedTypes.cpp +++ b/src/SerializedTypes.cpp @@ -361,16 +361,41 @@ bool STPathSet::isEquivalent(const SerializedType& t) const return v && (value == v->value); } +int STPath::getSerializeSize() const +{ + int iBytes = 0; + + BOOST_FOREACH(const STPathElement& speElement, mPath) + { + int iType = speElement.getNodeType(); + + iBytes += 1; // mType + + if (iType & STPathElement::typeAccount) + iBytes += 160/8; + + if (iType & STPathElement::typeCurrency) + iBytes += 160/8; + + if (iType & STPathElement::typeIssuer) + iBytes += 160/8; + } + + iBytes += 1; // typeBoundary | typeEnd + + return iBytes; +} + int STPathSet::getLength() const { - // XXX This code is broken? - assert(false); - int ret = 0; + int iBytes = 0; - for (std::vector::const_iterator it = value.begin(), end = value.end(); it != end; ++it) - ret += it->getSerializeSize(); + BOOST_FOREACH(const STPath& spPath, value) + { + iBytes += spPath.getSerializeSize(); + } - return (ret != 0) ? ret : (ret + 1); + return iBytes ? iBytes : 1; } Json::Value STPath::getJson(int) const diff --git a/src/SerializedTypes.h b/src/SerializedTypes.h index a582f7fd0f..78fb9a5393 100644 --- a/src/SerializedTypes.h +++ b/src/SerializedTypes.h @@ -584,7 +584,7 @@ public: const STPathElement& getElemet(int offset) { return mPath[offset]; } void addElement(const STPathElement& e) { mPath.push_back(e); } void clear() { mPath.clear(); } - int getSerializeSize() const { return 1 + mPath.size() * 21; } + int getSerializeSize() const; // std::string getText() const; Json::Value getJson(int) const; diff --git a/src/Transaction.cpp b/src/Transaction.cpp index bf692f6cff..224c65d4d6 100644 --- a/src/Transaction.cpp +++ b/src/Transaction.cpp @@ -495,7 +495,7 @@ Transaction::pointer Transaction::setPayment( const NewcoinAddress& naDstAccountID, const STAmount& saAmount, const STAmount& saSendMax, - const STPathSet& spPaths) + const STPathSet& spsPaths) { mTransaction->setITFieldAccount(sfDestination, naDstAccountID); mTransaction->setITFieldAmount(sfAmount, saAmount); @@ -505,9 +505,9 @@ Transaction::pointer Transaction::setPayment( mTransaction->setITFieldAmount(sfSendMax, saSendMax); } - if (spPaths.getPathCount()) + if (spsPaths.getPathCount()) { - mTransaction->setITFieldPathSet(sfPaths, spPaths); + mTransaction->setITFieldPathSet(sfPaths, spsPaths); } sign(naPrivateKey); @@ -524,11 +524,11 @@ Transaction::pointer Transaction::sharedPayment( const NewcoinAddress& naDstAccountID, const STAmount& saAmount, const STAmount& saSendMax, - const STPathSet& saPaths) + const STPathSet& spsPaths) { pointer tResult = boost::make_shared(ttPAYMENT, naPublicKey, naSourceAccount, uSeq, saFee, uSourceTag); - return tResult->setPayment(naPrivateKey, naDstAccountID, saAmount, saSendMax, saPaths); + return tResult->setPayment(naPrivateKey, naDstAccountID, saAmount, saSendMax, spsPaths); } // diff --git a/src/Transaction.h b/src/Transaction.h index 15ae32dff5..7198ef04ea 100644 --- a/src/Transaction.h +++ b/src/Transaction.h @@ -116,7 +116,7 @@ private: const NewcoinAddress& naDstAccountID, const STAmount& saAmount, const STAmount& saSendMax, - const STPathSet& spPaths); + const STPathSet& spsPaths); Transaction::pointer setWalletAdd( const NewcoinAddress& naPrivateKey, @@ -231,7 +231,7 @@ public: const NewcoinAddress& naDstAccountID, const STAmount& saAmount, const STAmount& saSendMax, - const STPathSet& saPaths); + const STPathSet& spsPaths); // Place an offer. static Transaction::pointer sharedOfferCreate(