This commit is contained in:
nbougalis
2020-12-05 06:17:37 +00:00
parent 27ba201b4c
commit ee2b4c457d
4211 changed files with 96026 additions and 94287 deletions

View File

@@ -422,8 +422,8 @@ $(function() {
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;}</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; </div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;<span class="comment">// Validate a ledger&#39;s close time and sequence number if we&#39;re considering</span></div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="comment">// jumping to that ledger. This helps defend agains some rare hostile or</span></div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="comment">// insane majority scenarios.</span></div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="comment">// jumping to that ledger. This helps defend against some rare hostile or</span></div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="comment">// diverged majority scenarios.</span></div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="classripple_1_1LedgerMaster.html#a45c5a3a1dea7c20d829dededf270ebc7"> 410</a></span>&#160;<a class="code" href="classripple_1_1LedgerMaster.html#a45c5a3a1dea7c20d829dededf270ebc7">LedgerMaster::canBeCurrent</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Ledger const&gt;</a> <span class="keyword">const</span>&amp; ledger)</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{</div>
@@ -975,9 +975,9 @@ $(function() {
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; {</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">if</span> ((seq != 0) &amp;&amp; (<a class="code" href="classripple_1_1LedgerMaster.html#af3eaa659ab184feed8b939836efeebcf">getValidLedgerIndex</a>() == 0))</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; {</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="comment">// Set peers sane early if we can</span></div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="comment">// Set peers converged early if we can</span></div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">if</span> (valCount &gt;= <a class="code" href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">app_</a>.<a class="code" href="classripple_1_1Application.html#ae209b3dfe3f3427b569c2414c9a79686">validators</a>().<a class="code" href="classripple_1_1ValidatorList.html#ad28f57783826e0b090713c89265c81e4">quorum</a>())</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">app_</a>.<a class="code" href="classripple_1_1Application.html#a0511c5e849c6735036d4667a72ff01ee">overlay</a>().<a class="code" href="classripple_1_1Overlay.html#a5399bc9c533ae4b6286d1ee4b4f14486">checkSanity</a>(seq);</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">app_</a>.<a class="code" href="classripple_1_1Application.html#a0511c5e849c6735036d4667a72ff01ee">overlay</a>().<a class="code" href="classripple_1_1Overlay.html#a81a1499888369dfb338d45af35f09068">checkTracking</a>(seq);</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; }</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; </div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="comment">// FIXME: We may not want to fetch a ledger with just one</span></div>
@@ -1083,9 +1083,9 @@ $(function() {
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> rippledCount = 0;</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; v : vals)</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; {</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">if</span> (v-&gt;isFieldPresent(<a class="code" href="namespaceripple.html#ae17bb88deaa0a03be218279436f8edac">sfServerVersion</a>))</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">if</span> (v-&gt;isFieldPresent(<a class="code" href="namespaceripple.html#ae225b78bf472a30fbf3be25a61e5e595">sfServerVersion</a>))</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; {</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keyword">auto</span> version = v-&gt;getFieldU64(<a class="code" href="namespaceripple.html#ae17bb88deaa0a03be218279436f8edac">sfServerVersion</a>);</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keyword">auto</span> version = v-&gt;getFieldU64(<a class="code" href="namespaceripple.html#ae225b78bf472a30fbf3be25a61e5e595">sfServerVersion</a>);</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; higherVersionCount +=</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <a class="code" href="namespaceripple_1_1BuildInfo.html#a5883781365410de620622c6a2b1b81d5">BuildInfo::isNewerVersion</a>(version) ? 1 : 0;</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; rippledCount +=</div>
@@ -1199,7 +1199,7 @@ $(function() {
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; v : validations)</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; {</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; valSeq&amp; vs = count[v-&gt;getLedgerHash()];</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; vs.mergeValidation(v-&gt;getFieldU32(<a class="code" href="namespaceripple.html#a1932b552a7e76eba44a31bdcdd4a5315">sfLedgerSequence</a>));</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; vs.mergeValidation(v-&gt;getFieldU32(<a class="code" href="namespaceripple.html#a4a189668d64758cfcac4022778e496f5">sfLedgerSequence</a>));</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; }</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; </div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> neededValidations = <a class="code" href="classripple_1_1LedgerMaster.html#a1dd0f5cbae7e22dcd6832624f0a16e79">getNeededValidations</a>();</div>
@@ -2036,169 +2036,186 @@ $(function() {
<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; }</div>
<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;}</div>
<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; </div>
<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l02037"></a><span class="lineno"><a class="line" href="classripple_1_1LedgerMaster.html#a3ad6b9137291f79a7bd50039c538289e"> 2037</a></span>&#160;<a class="code" href="classripple_1_1LedgerMaster.html#a3ad6b9137291f79a7bd50039c538289e">LedgerMaster::makeFetchPack</a>(</div>
<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/weak_ptr.html">std::weak_ptr&lt;Peer&gt;</a> <span class="keyword">const</span>&amp; wPeer,</div>
<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;protocol::TMGetObjectByHash&gt;</a> <span class="keyword">const</span>&amp; request,</div>
<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> haveLedgerHash,</div>
<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">UptimeClock::time_point</a> uptime)</div>
<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;{</div>
<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1UptimeClock.html#ae854244a4dcf8de363337e93d5a04444">UptimeClock::now</a>() &gt; uptime + 1s)</div>
<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; {</div>
<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;Fetch pack request got stale&quot;</span>;</div>
<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; }</div>
<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; </div>
<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">app_</a>.<a class="code" href="classripple_1_1Application.html#a426bdbb87f6dc2082cf6f418526901cb">getFeeTrack</a>().<a class="code" href="classripple_1_1LoadFeeTrack.html#a7654f33d98c38af33f47c6b0739eedec">isLoadedLocal</a>() || (<a class="code" href="classripple_1_1LedgerMaster.html#af6aa770a3d98a0a49d5091163fb675c9">getValidatedLedgerAge</a>() &gt; 40s))</div>
<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; {</div>
<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;Too busy to make fetch pack&quot;</span>;</div>
<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; }</div>
<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; </div>
<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; <span class="keyword">auto</span> peer = wPeer.<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/weak_ptr/lock.html">lock</a>();</div>
<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; </div>
<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; <span class="keywordflow">if</span> (!peer)</div>
<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; </div>
<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; <span class="keyword">auto</span> <a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a> = <a class="code" href="classripple_1_1LedgerMaster.html#a5f99fb5737062937149e4e33a95ffd06">getLedgerByHash</a>(haveLedgerHash);</div>
<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; </div>
<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>)</div>
<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; {</div>
<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>())</div>
<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack for ledger we don&#39;t have: &quot;</span></div>
<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; &lt;&lt; <a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>;</div>
<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#a412e34f8f551f06bdbc94d5c8ec4c147">Resource::feeRequestNoReply</a>);</div>
<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; }</div>
<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l02062"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac15ecd7d76b1ce1c5719a25a7bdeaef4"> 2062</a></span>&#160;<a class="code" href="namespaceripple.html#ac15ecd7d76b1ce1c5719a25a7bdeaef4">populateFetchPack</a>(</div>
<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; <a class="code" href="classripple_1_1SHAMap.html">SHAMap</a> <span class="keyword">const</span>&amp; want,</div>
<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; <a class="code" href="classripple_1_1SHAMap.html">SHAMap</a> <span class="keyword">const</span>* have,</div>
<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> cnt,</div>
<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; protocol::TMGetObjectByHash* into,</div>
<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> seq,</div>
<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; <span class="keywordtype">bool</span> withLeaves = <span class="keyword">true</span>)</div>
<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;{</div>
<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; assert(cnt != 0);</div>
<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; </div>
<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>-&gt;open())</div>
<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; {</div>
<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>())</div>
<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack from open ledger: &quot;</span> &lt;&lt; <a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>;</div>
<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#ae8affe62398aaca63fca0f78f22b8171">Resource::feeInvalidRequest</a>);</div>
<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; }</div>
<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s(1024);</div>
<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; </div>
<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; want.<a class="code" href="classripple_1_1SHAMap.html#a033dc682ae2682f64b8e8973ae7bdc2b">visitDifferences</a>(</div>
<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; have,</div>
<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; [&amp;s, withLeaves, &amp;cnt, into, seq](<a class="code" href="classripple_1_1SHAMapTreeNode.html">SHAMapTreeNode</a> <span class="keyword">const</span>&amp; n) -&gt; <span class="keywordtype">bool</span> {</div>
<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; <span class="keywordflow">if</span> (!withLeaves &amp;&amp; n.<a class="code" href="classripple_1_1SHAMapTreeNode.html#a3feaa925a9dc0e847049e6c4cfbb6875">isLeaf</a>())</div>
<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; </div>
<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>-&gt;info().seq &lt; <a class="code" href="classripple_1_1LedgerMaster.html#a48d645c212af114908fe168b140ff3cb">getEarliestFetch</a>())</div>
<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; {</div>
<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack that is too early&quot;</span>;</div>
<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#ae8affe62398aaca63fca0f78f22b8171">Resource::feeInvalidRequest</a>);</div>
<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; }</div>
<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; </div>
<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="keyword">auto</span> wantLedger = <a class="code" href="classripple_1_1LedgerMaster.html#a5f99fb5737062937149e4e33a95ffd06">getLedgerByHash</a>(<a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>-&gt;info().parentHash);</div>
<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; </div>
<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <span class="keywordflow">if</span> (!wantLedger)</div>
<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; {</div>
<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>())</div>
<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack for ledger whose predecessor we &quot;</span></div>
<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; &lt;&lt; <span class="stringliteral">&quot;don&#39;t have: &quot;</span> &lt;&lt; <a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>;</div>
<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#a412e34f8f551f06bdbc94d5c8ec4c147">Resource::feeRequestNoReply</a>);</div>
<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; }</div>
<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; </div>
<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <span class="keyword">auto</span> fpAppender = [](protocol::TMGetObjectByHash* reply,</div>
<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> ledgerSeq,</div>
<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp; hash,</div>
<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keyword">const</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">Blob</a>&amp; blob) {</div>
<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; protocol::TMIndexedObject&amp; newObj = *(reply-&gt;add_objects());</div>
<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; newObj.set_ledgerseq(ledgerSeq);</div>
<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; newObj.set_hash(hash.as_uint256().begin(), 256 / 8);</div>
<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; newObj.set_data(&amp;blob[0], blob.size());</div>
<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; };</div>
<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; s.<a class="code" href="classripple_1_1Serializer.html#a0b9f56cab2021e47d45e4cd287f4b425">erase</a>();</div>
<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; n.<a class="code" href="classripple_1_1SHAMapTreeNode.html#ae1888014b78e231a2ce381f8871fad61">serializeWithPrefix</a>(s);</div>
<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; </div>
<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; hash = n.<a class="code" href="classripple_1_1SHAMapTreeNode.html#a454e86c9ed693f8921d53a915d8b1415">getHash</a>().<a class="code" href="classripple_1_1SHAMapHash.html#a8f95b5bc14b7085d368f56aeaa17ef4f">as_uint256</a>();</div>
<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; </div>
<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; protocol::TMIndexedObject* obj = into-&gt;add_objects();</div>
<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; obj-&gt;set_ledgerseq(seq);</div>
<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; obj-&gt;set_hash(hash.data(), hash.size());</div>
<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; obj-&gt;set_data(s.<a class="code" href="classripple_1_1Serializer.html#ac7156012b6dd5a536cf030b48109894c">getDataPtr</a>(), s.<a class="code" href="classripple_1_1Serializer.html#aa5c7aa53db0c7c90c6a86dd5144e9255">getLength</a>());</div>
<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; </div>
<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <span class="keywordflow">return</span> --cnt != 0;</div>
<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; });</div>
<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;}</div>
<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; </div>
<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l02095"></a><span class="lineno"><a class="line" href="classripple_1_1LedgerMaster.html#a3ad6b9137291f79a7bd50039c538289e"> 2095</a></span>&#160;<a class="code" href="classripple_1_1LedgerMaster.html#a3ad6b9137291f79a7bd50039c538289e">LedgerMaster::makeFetchPack</a>(</div>
<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/weak_ptr.html">std::weak_ptr&lt;Peer&gt;</a> <span class="keyword">const</span>&amp; wPeer,</div>
<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;protocol::TMGetObjectByHash&gt;</a> <span class="keyword">const</span>&amp; request,</div>
<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> haveLedgerHash,</div>
<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">UptimeClock::time_point</a> uptime)</div>
<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;{</div>
<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1UptimeClock.html#ae854244a4dcf8de363337e93d5a04444">UptimeClock::now</a>() &gt; uptime + 1s)</div>
<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; {</div>
<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;Fetch pack request got stale&quot;</span>;</div>
<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; }</div>
<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; </div>
<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">app_</a>.<a class="code" href="classripple_1_1Application.html#a426bdbb87f6dc2082cf6f418526901cb">getFeeTrack</a>().<a class="code" href="classripple_1_1LoadFeeTrack.html#a7654f33d98c38af33f47c6b0739eedec">isLoadedLocal</a>() || (<a class="code" href="classripple_1_1LedgerMaster.html#af6aa770a3d98a0a49d5091163fb675c9">getValidatedLedgerAge</a>() &gt; 40s))</div>
<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; {</div>
<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; protocol::TMGetObjectByHash reply;</div>
<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; reply.set_query(<span class="keyword">false</span>);</div>
<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; </div>
<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; <span class="keywordflow">if</span> (request-&gt;has_seq())</div>
<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; reply.set_seq(request-&gt;seq());</div>
<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;Too busy to make fetch pack&quot;</span>;</div>
<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; }</div>
<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; </div>
<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; <span class="keyword">auto</span> peer = wPeer.<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/weak_ptr/lock.html">lock</a>();</div>
<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; </div>
<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; reply.set_ledgerhash(request-&gt;ledgerhash());</div>
<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; reply.set_type(protocol::TMGetObjectByHash::otFETCH_PACK);</div>
<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; <span class="keywordflow">if</span> (!peer)</div>
<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; </div>
<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; <span class="comment">// Building a fetch pack:</span></div>
<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; <span class="comment">// 1. Add the header for the requested ledger.</span></div>
<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; <span class="comment">// 2. Add the nodes for the AccountStateMap of that ledger.</span></div>
<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <span class="comment">// 3. If there are transactions, add the nodes for the</span></div>
<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <span class="comment">// transactions of the ledger.</span></div>
<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <span class="comment">// 4. If the FetchPack now contains greater than or equal to</span></div>
<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; <span class="comment">// 256 entries then stop.</span></div>
<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; <span class="comment">// 5. If not very much time has elapsed, then loop back and repeat</span></div>
<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; <span class="comment">// the same process adding the previous ledger to the FetchPack.</span></div>
<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; {</div>
<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> lSeq = wantLedger-&gt;info().seq;</div>
<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; </div>
<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; protocol::TMIndexedObject&amp; newObj = *reply.add_objects();</div>
<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; newObj.set_hash(wantLedger-&gt;info().hash.data(), 256 / 8);</div>
<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s(256);</div>
<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; s.<a class="code" href="classripple_1_1Serializer.html#a55ebab5e9bf8d8231da8f3c796150719">add32</a>(<a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">HashPrefix::ledgerMaster</a>);</div>
<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; <a class="code" href="namespaceripple.html#ad7942728afb82fa3846f81251de60e3e">addRaw</a>(wantLedger-&gt;info(), s);</div>
<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; newObj.set_data(s.<a class="code" href="classripple_1_1Serializer.html#ac7156012b6dd5a536cf030b48109894c">getDataPtr</a>(), s.<a class="code" href="classripple_1_1Serializer.html#aa5c7aa53db0c7c90c6a86dd5144e9255">getLength</a>());</div>
<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; newObj.set_ledgerseq(lSeq);</div>
<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; </div>
<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; wantLedger-&gt;stateMap().getFetchPack(</div>
<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; &amp;<a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>-&gt;stateMap(),</div>
<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; <span class="keyword">true</span>,</div>
<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; 16384,</div>
<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/bind.html">std::bind</a>(</div>
<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; fpAppender,</div>
<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; &amp;reply,</div>
<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; lSeq,</div>
<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; std::placeholders::_1,</div>
<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; std::placeholders::_2));</div>
<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; </div>
<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; <span class="keywordflow">if</span> (wantLedger-&gt;info().txHash.isNonZero())</div>
<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; wantLedger-&gt;txMap().getFetchPack(</div>
<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; <span class="keyword">nullptr</span>,</div>
<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; <span class="keyword">true</span>,</div>
<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; 512,</div>
<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/bind.html">std::bind</a>(</div>
<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; fpAppender,</div>
<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; &amp;reply,</div>
<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; lSeq,</div>
<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; std::placeholders::_1,</div>
<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; std::placeholders::_2));</div>
<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; </div>
<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; <span class="keywordflow">if</span> (reply.objects().size() &gt;= 512)</div>
<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; </div>
<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; <span class="comment">// move may save a ref/unref</span></div>
<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a> = std::move(wantLedger);</div>
<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; wantLedger = <a class="code" href="classripple_1_1LedgerMaster.html#a5f99fb5737062937149e4e33a95ffd06">getLedgerByHash</a>(<a class="code" href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">haveLedger</a>-&gt;info().parentHash);</div>
<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; } <span class="keywordflow">while</span> (wantLedger &amp;&amp; <a class="code" href="classripple_1_1UptimeClock.html#ae854244a4dcf8de363337e93d5a04444">UptimeClock::now</a>() &lt;= uptime + 1s);</div>
<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; </div>
<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>())</div>
<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Built fetch pack with &quot;</span> &lt;&lt; reply.objects().size() &lt;&lt; <span class="stringliteral">&quot; nodes&quot;</span>;</div>
<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; <span class="keyword">auto</span> msg = std::make_shared&lt;Message&gt;(reply, protocol::mtGET_OBJECTS);</div>
<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; peer-&gt;send(msg);</div>
<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; }</div>
<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp;)</div>
<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; {</div>
<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;Exception building fetch pach&quot;</span>;</div>
<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; }</div>
<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;}</div>
<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; </div>
<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;<a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div>
<div class="line"><a name="l02183"></a><span class="lineno"><a class="line" href="classripple_1_1LedgerMaster.html#aa14798637526012a9725f62488e86e58"> 2183</a></span>&#160;<a class="code" href="classripple_1_1LedgerMaster.html#aa14798637526012a9725f62488e86e58">LedgerMaster::getFetchPackCacheSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1LedgerMaster.html#a657cc607c2fbd75e529fba30b1fab3f5">fetch_packs_</a>.getCacheSize();</div>
<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;}</div>
<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; </div>
<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;<span class="comment">// Returns the minimum ledger sequence in SQL database, if any.</span></div>
<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;boost::optional&lt;LedgerIndex&gt;</div>
<div class="line"><a name="l02190"></a><span class="lineno"><a class="line" href="classripple_1_1LedgerMaster.html#a7129c7408cc225ac56bc105d30289da4"> 2190</a></span>&#160;<a class="code" href="classripple_1_1LedgerMaster.html#a7129c7408cc225ac56bc105d30289da4">LedgerMaster::minSqlSeq</a>()</div>
<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;{</div>
<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; boost::optional&lt;LedgerIndex&gt; seq;</div>
<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; <span class="keyword">auto</span> db = <a class="code" href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">app_</a>.<a class="code" href="classripple_1_1Application.html#ae8c3bf5a8d7de3a98166670fde4056f7">getLedgerDB</a>().<a class="code" href="classripple_1_1DatabaseCon.html#a16c6f729c6462f6200b724543f5c67bc">checkoutDb</a>();</div>
<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; *db &lt;&lt; <span class="stringliteral">&quot;SELECT MIN(LedgerSeq) FROM Ledgers&quot;</span>, soci::into(seq);</div>
<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; <span class="keywordflow">return</span> seq;</div>
<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;}</div>
<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; <span class="keyword">auto</span> have = <a class="code" href="classripple_1_1LedgerMaster.html#a5f99fb5737062937149e4e33a95ffd06">getLedgerByHash</a>(haveLedgerHash);</div>
<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; </div>
<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; <span class="keywordflow">if</span> (!have)</div>
<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; {</div>
<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>())</div>
<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack for ledger we don&#39;t have: &quot;</span> &lt;&lt; have;</div>
<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#a412e34f8f551f06bdbc94d5c8ec4c147">Resource::feeRequestNoReply</a>);</div>
<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; }</div>
<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; </div>
<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; <span class="keywordflow">if</span> (have-&gt;open())</div>
<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; {</div>
<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>())</div>
<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack from open ledger: &quot;</span> &lt;&lt; have;</div>
<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#ae8affe62398aaca63fca0f78f22b8171">Resource::feeInvalidRequest</a>);</div>
<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; }</div>
<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; </div>
<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; <span class="keywordflow">if</span> (have-&gt;info().seq &lt; <a class="code" href="classripple_1_1LedgerMaster.html#a48d645c212af114908fe168b140ff3cb">getEarliestFetch</a>())</div>
<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; {</div>
<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack that is too early&quot;</span>;</div>
<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#ae8affe62398aaca63fca0f78f22b8171">Resource::feeInvalidRequest</a>);</div>
<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; }</div>
<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; </div>
<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; <span class="keyword">auto</span> want = <a class="code" href="classripple_1_1LedgerMaster.html#a5f99fb5737062937149e4e33a95ffd06">getLedgerByHash</a>(have-&gt;info().parentHash);</div>
<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; </div>
<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; <span class="keywordflow">if</span> (!want)</div>
<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; {</div>
<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>())</div>
<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Peer requests fetch pack for ledger whose predecessor we &quot;</span></div>
<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; &lt;&lt; <span class="stringliteral">&quot;don&#39;t have: &quot;</span> &lt;&lt; have;</div>
<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; peer-&gt;charge(<a class="code" href="namespaceripple_1_1Resource.html#a412e34f8f551f06bdbc94d5c8ec4c147">Resource::feeRequestNoReply</a>);</div>
<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; }</div>
<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; </div>
<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; {</div>
<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> hdr(128);</div>
<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; </div>
<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; protocol::TMGetObjectByHash reply;</div>
<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; reply.set_query(<span class="keyword">false</span>);</div>
<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; </div>
<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; <span class="keywordflow">if</span> (request-&gt;has_seq())</div>
<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; reply.set_seq(request-&gt;seq());</div>
<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; </div>
<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; reply.set_ledgerhash(request-&gt;ledgerhash());</div>
<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; reply.set_type(protocol::TMGetObjectByHash::otFETCH_PACK);</div>
<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; </div>
<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; <span class="comment">// Building a fetch pack:</span></div>
<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; <span class="comment">// 1. Add the header for the requested ledger.</span></div>
<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; <span class="comment">// 2. Add the nodes for the AccountStateMap of that ledger.</span></div>
<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; <span class="comment">// 3. If there are transactions, add the nodes for the</span></div>
<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; <span class="comment">// transactions of the ledger.</span></div>
<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; <span class="comment">// 4. If the FetchPack now contains at least 512 entries then stop.</span></div>
<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; <span class="comment">// 5. If not very much time has elapsed, then loop back and repeat</span></div>
<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <span class="comment">// the same process adding the previous ledger to the FetchPack.</span></div>
<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; {</div>
<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> lSeq = want-&gt;info().seq;</div>
<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; </div>
<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160; {</div>
<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; <span class="comment">// Serialize the ledger header:</span></div>
<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; hdr.<a class="code" href="classripple_1_1Serializer.html#a0b9f56cab2021e47d45e4cd287f4b425">erase</a>();</div>
<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; </div>
<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; hdr.<a class="code" href="classripple_1_1Serializer.html#a55ebab5e9bf8d8231da8f3c796150719">add32</a>(<a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">HashPrefix::ledgerMaster</a>);</div>
<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; <a class="code" href="namespaceripple.html#ad7942728afb82fa3846f81251de60e3e">addRaw</a>(want-&gt;info(), hdr);</div>
<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; </div>
<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; <span class="comment">// Add the data</span></div>
<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; protocol::TMIndexedObject* obj = reply.add_objects();</div>
<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; obj-&gt;set_hash(</div>
<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; want-&gt;info().hash.data(), want-&gt;info().hash.size());</div>
<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; obj-&gt;set_data(hdr.<a class="code" href="classripple_1_1Serializer.html#ac7156012b6dd5a536cf030b48109894c">getDataPtr</a>(), hdr.<a class="code" href="classripple_1_1Serializer.html#aa5c7aa53db0c7c90c6a86dd5144e9255">getLength</a>());</div>
<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; obj-&gt;set_ledgerseq(lSeq);</div>
<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; }</div>
<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; </div>
<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; <a class="code" href="namespaceripple.html#ac15ecd7d76b1ce1c5719a25a7bdeaef4">populateFetchPack</a>(</div>
<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; want-&gt;stateMap(), &amp;have-&gt;stateMap(), 16384, &amp;reply, lSeq);</div>
<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; </div>
<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; <span class="comment">// We use nullptr here because transaction maps are per ledger</span></div>
<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; <span class="comment">// and so the requestor is unlikely to already have it.</span></div>
<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; <span class="keywordflow">if</span> (want-&gt;info().txHash.isNonZero())</div>
<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; <a class="code" href="namespaceripple.html#ac15ecd7d76b1ce1c5719a25a7bdeaef4">populateFetchPack</a>(want-&gt;txMap(), <span class="keyword">nullptr</span>, 512, &amp;reply, lSeq);</div>
<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; </div>
<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; <span class="keywordflow">if</span> (reply.objects().size() &gt;= 512)</div>
<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; </div>
<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; have = std::move(want);</div>
<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; want = <a class="code" href="classripple_1_1LedgerMaster.html#a5f99fb5737062937149e4e33a95ffd06">getLedgerByHash</a>(have-&gt;info().parentHash);</div>
<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; } <span class="keywordflow">while</span> (want &amp;&amp; <a class="code" href="classripple_1_1UptimeClock.html#ae854244a4dcf8de363337e93d5a04444">UptimeClock::now</a>() &lt;= uptime + 1s);</div>
<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; </div>
<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; <span class="keyword">auto</span> msg = std::make_shared&lt;Message&gt;(reply, protocol::mtGET_OBJECTS);</div>
<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; </div>
<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>())</div>
<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Built fetch pack with &quot;</span> &lt;&lt; reply.objects().size() &lt;&lt; <span class="stringliteral">&quot; nodes (&quot;</span></div>
<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; &lt;&lt; msg-&gt;getBufferSize() &lt;&lt; <span class="stringliteral">&quot; bytes)&quot;</span>;</div>
<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; </div>
<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160; peer-&gt;send(msg);</div>
<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; }</div>
<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp;)</div>
<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; {</div>
<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; JLOG(<a class="code" href="classripple_1_1LedgerMaster.html#a7621d03781287445cfabcb91046f141d">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;Exception building fetch pach&quot;</span>;</div>
<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; }</div>
<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;}</div>
<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; </div>
<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;<a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div>
<div class="line"><a name="l02225"></a><span class="lineno"><a class="line" href="classripple_1_1LedgerMaster.html#aa14798637526012a9725f62488e86e58"> 2225</a></span>&#160;<a class="code" href="classripple_1_1LedgerMaster.html#aa14798637526012a9725f62488e86e58">LedgerMaster::getFetchPackCacheSize</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1LedgerMaster.html#a657cc607c2fbd75e529fba30b1fab3f5">fetch_packs_</a>.getCacheSize();</div>
<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;}</div>
<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; </div>
<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;<span class="comment">// Returns the minimum ledger sequence in SQL database, if any.</span></div>
<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;boost::optional&lt;LedgerIndex&gt;</div>
<div class="line"><a name="l02232"></a><span class="lineno"><a class="line" href="classripple_1_1LedgerMaster.html#a7129c7408cc225ac56bc105d30289da4"> 2232</a></span>&#160;<a class="code" href="classripple_1_1LedgerMaster.html#a7129c7408cc225ac56bc105d30289da4">LedgerMaster::minSqlSeq</a>()</div>
<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;{</div>
<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; boost::optional&lt;LedgerIndex&gt; seq;</div>
<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160; <span class="keyword">auto</span> db = <a class="code" href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">app_</a>.<a class="code" href="classripple_1_1Application.html#ae8c3bf5a8d7de3a98166670fde4056f7">getLedgerDB</a>().<a class="code" href="classripple_1_1DatabaseCon.html#a16c6f729c6462f6200b724543f5c67bc">checkoutDb</a>();</div>
<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160; *db &lt;&lt; <span class="stringliteral">&quot;SELECT MIN(LedgerSeq) FROM Ledgers&quot;</span>, soci::into(seq);</div>
<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; <span class="keywordflow">return</span> seq;</div>
<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;}</div>
<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; </div>
<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassripple_1_1NetworkOPs_html_afdcc25285fc9cb83eab4ed36d95be527"><div class="ttname"><a href="classripple_1_1NetworkOPs.html#afdcc25285fc9cb83eab4ed36d95be527">ripple::NetworkOPs::pubLedger</a></div><div class="ttdeci">virtual void pubLedger(std::shared_ptr&lt; ReadView const &gt; const &amp;lpAccepted)=0</div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a3dfb8e2e3eecccdb5cf78ff21bca069c"><div class="ttname"><a href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">beast::Journal::fatal</a></div><div class="ttdeci">Stream fatal() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00339">Journal.h:339</a></div></div>
@@ -2208,6 +2225,7 @@ $(function() {
<div class="ttc" id="anamespaceripple_1_1Resource_html_ae8affe62398aaca63fca0f78f22b8171"><div class="ttname"><a href="namespaceripple_1_1Resource.html#ae8affe62398aaca63fca0f78f22b8171">ripple::Resource::feeInvalidRequest</a></div><div class="ttdeci">const Charge feeInvalidRequest</div><div class="ttdoc">Schedule of fees charged for imposing load on the server.</div></div>
<div class="ttc" id="aclassripple_1_1Application_html"><div class="ttname"><a href="classripple_1_1Application.html">ripple::Application</a></div><div class="ttdef"><b>Definition:</b> <a href="Application_8h_source.html#l00097">Application.h:97</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_ad839bc4815ef40e0f0a74143fb29771f"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#ad839bc4815ef40e0f0a74143fb29771f">ripple::LedgerMaster::mClosedLedger</a></div><div class="ttdeci">LedgerHolder mClosedLedger</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00339">LedgerMaster.h:339</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a033dc682ae2682f64b8e8973ae7bdc2b"><div class="ttname"><a href="classripple_1_1SHAMap.html#a033dc682ae2682f64b8e8973ae7bdc2b">ripple::SHAMap::visitDifferences</a></div><div class="ttdeci">void visitDifferences(SHAMap const *have, std::function&lt; bool(SHAMapTreeNode const &amp;)&gt;) const</div><div class="ttdoc">Visit every node in this SHAMap that is not present in the specified SHAMap.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00101">SHAMapSync.cpp:101</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_ac885cb8bec6f3b9b8bdd5f2a44d07fed"><div class="ttname"><a href="classripple_1_1Application.html#ac885cb8bec6f3b9b8bdd5f2a44d07fed">ripple::Application::getOrderBookDB</a></div><div class="ttdeci">virtual OrderBookDB &amp; getOrderBookDB()=0</div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_a3e8d7f8b5fa089a184dcc9b00b6e0da7a5d83de1c9f32e1adaf68625c99c29ac4"><div class="ttname"><a href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7a5d83de1c9f32e1adaf68625c99c29ac4">ripple::InboundLedger::Reason::HISTORY</a></div><div class="ttdeci">@ HISTORY</div></div>
<div class="ttc" id="anamespaceripple_html_ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c"><div class="ttname"><a href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ripple::HashPrefix::ledgerMaster</a></div><div class="ttdeci">@ ledgerMaster</div><div class="ttdoc">ledger master data for signing</div></div>
@@ -2220,25 +2238,27 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a657cc607c2fbd75e529fba30b1fab3f5"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a657cc607c2fbd75e529fba30b1fab3f5">ripple::LedgerMaster::fetch_packs_</a></div><div class="ttdeci">TaggedCache&lt; uint256, Blob &gt; fetch_packs_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00401">LedgerMaster.h:401</a></div></div>
<div class="ttc" id="aclassripple_1_1OpenLedger_html_abb724d61223be6a608b28947bd2e2236"><div class="ttname"><a href="classripple_1_1OpenLedger.html#abb724d61223be6a608b28947bd2e2236">ripple::OpenLedger::current</a></div><div class="ttdeci">std::shared_ptr&lt; OpenView const &gt; current() const</div><div class="ttdoc">Returns a view to the current open ledger.</div><div class="ttdef"><b>Definition:</b> <a href="OpenLedger_8cpp_source.html#l00050">OpenLedger.cpp:50</a></div></div>
<div class="ttc" id="aclassripple_1_1NodeStore_1_1Database_html"><div class="ttname"><a href="classripple_1_1NodeStore_1_1Database.html">ripple::NodeStore::Database</a></div><div class="ttdoc">Persistency layer for NodeObject.</div><div class="ttdef"><b>Definition:</b> <a href="Database_8h_source.html#l00053">Database.h:53</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a3ad6b9137291f79a7bd50039c538289e"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a3ad6b9137291f79a7bd50039c538289e">ripple::LedgerMaster::makeFetchPack</a></div><div class="ttdeci">void makeFetchPack(std::weak_ptr&lt; Peer &gt; const &amp;wPeer, std::shared_ptr&lt; protocol::TMGetObjectByHash &gt; const &amp;request, uint256 haveLedgerHash, UptimeClock::time_point uptime)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02037">LedgerMaster.cpp:2037</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a3ad6b9137291f79a7bd50039c538289e"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a3ad6b9137291f79a7bd50039c538289e">ripple::LedgerMaster::makeFetchPack</a></div><div class="ttdeci">void makeFetchPack(std::weak_ptr&lt; Peer &gt; const &amp;wPeer, std::shared_ptr&lt; protocol::TMGetObjectByHash &gt; const &amp;request, uint256 haveLedgerHash, UptimeClock::time_point uptime)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02095">LedgerMaster.cpp:2095</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a043c0ea4eb656f7838e145be8abefbc0"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a043c0ea4eb656f7838e145be8abefbc0">ripple::LedgerMaster::clearLedgerCachePrior</a></div><div class="ttdeci">void clearLedgerCachePrior(LedgerIndex seq)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01763">LedgerMaster.cpp:1763</a></div></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="ashared_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt; Collector &gt;</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a536e3bab957c1e220d1de0bf2885ffc3"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a536e3bab957c1e220d1de0bf2885ffc3">ripple::LedgerMaster::sweep</a></div><div class="ttdeci">void sweep()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01736">LedgerMaster.cpp:1736</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1b38e742ac7fe4c3a80a397e06b83dcb"><div class="ttname"><a href="namespaceripple.html#a1b38e742ac7fe4c3a80a397e06b83dcb">ripple::SizedItem</a></div><div class="ttdeci">SizedItem</div><div class="ttdef"><b>Definition:</b> <a href="Config_8h_source.html#l00048">Config.h:48</a></div></div>
<div class="ttc" id="aexception_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1base__uint_html_ad2bffc75e554b89befbb9388e07392c0"><div class="ttname"><a href="classripple_1_1base__uint.html#ad2bffc75e554b89befbb9388e07392c0">ripple::base_uint::isNonZero</a></div><div class="ttdeci">bool isNonZero() const</div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00480">base_uint.h:480</a></div></div>
<div class="ttc" id="aclassripple_1_1base__uint_html_ad2bffc75e554b89befbb9388e07392c0"><div class="ttname"><a href="classripple_1_1base__uint.html#ad2bffc75e554b89befbb9388e07392c0">ripple::base_uint::isNonZero</a></div><div class="ttdeci">bool isNonZero() const</div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00444">base_uint.h:444</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_abbe082bd27ca0f1d1365af2824e4f85b"><div class="ttname"><a href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">beast::Journal::trace</a></div><div class="ttdeci">Stream trace() const</div><div class="ttdoc">Severity stream access functions.</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00309">Journal.h:309</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a3e0f9a065a80c97aa923367f33eafd84"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a3e0f9a065a80c97aa923367f33eafd84">ripple::LedgerMaster::mBuildingLedgerSeq</a></div><div class="ttdeci">std::atomic&lt; LedgerIndex &gt; mBuildingLedgerSeq</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00388">LedgerMaster.h:388</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a262ba48a2919950db79ae9434018b450"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a262ba48a2919950db79ae9434018b450">ripple::LedgerMaster::app_</a></div><div class="ttdeci">Application &amp; app_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00333">LedgerMaster.h:333</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4a189668d64758cfcac4022778e496f5"><div class="ttname"><a href="namespaceripple.html#a4a189668d64758cfcac4022778e496f5">ripple::sfLedgerSequence</a></div><div class="ttdeci">const SF_UINT32 sfLedgerSequence</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a5e7ca06965f5ec58c002e3b3c3da0114"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a5e7ca06965f5ec58c002e3b3c3da0114">ripple::LedgerMaster::advanceThread</a></div><div class="ttdeci">void advanceThread()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01232">LedgerMaster.cpp:1232</a></div></div>
<div class="ttc" id="aclassripple_1_1NodeStore_1_1DatabaseShard_html_aa1a0278ace9b70c807f585c3eae6d787"><div class="ttname"><a href="classripple_1_1NodeStore_1_1DatabaseShard.html#aa1a0278ace9b70c807f585c3eae6d787">ripple::NodeStore::DatabaseShard::seqToShardIndex</a></div><div class="ttdeci">virtual std::uint32_t seqToShardIndex(std::uint32_t seq) const =0</div><div class="ttdoc">Calculates the shard index for a given ledger sequence.</div></div>
<div class="ttc" id="anamespaceripple_html_a19f506b57882e3396d15d7c43fa92d92"><div class="ttname"><a href="namespaceripple.html#a19f506b57882e3396d15d7c43fa92d92">ripple::apply</a></div><div class="ttdeci">std::pair&lt; TER, bool &gt; apply(Application &amp;app, OpenView &amp;view, STTx const &amp;tx, ApplyFlags flags, beast::Journal journal)</div><div class="ttdoc">Apply a transaction to an OpenView.</div><div class="ttdef"><b>Definition:</b> <a href="apply_8cpp_source.html#l00109">apply.cpp:109</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a7129c7408cc225ac56bc105d30289da4"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a7129c7408cc225ac56bc105d30289da4">ripple::LedgerMaster::minSqlSeq</a></div><div class="ttdeci">boost::optional&lt; LedgerIndex &gt; minSqlSeq()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02190">LedgerMaster.cpp:2190</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a7129c7408cc225ac56bc105d30289da4"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a7129c7408cc225ac56bc105d30289da4">ripple::LedgerMaster::minSqlSeq</a></div><div class="ttdeci">boost::optional&lt; LedgerIndex &gt; minSqlSeq()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02232">LedgerMaster.cpp:2232</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a2dc054158ffca412c8d193abc60f9a41"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a2dc054158ffca412c8d193abc60f9a41">ripple::LedgerMaster::mLedgerHistory</a></div><div class="ttdeci">LedgerHistory mLedgerHistory</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00359">LedgerMaster.h:359</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a1e0c3bff6e53baa326075a7be3d3a36f"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a1e0c3bff6e53baa326075a7be3d3a36f">ripple::LedgerMaster::getLedgerHashForHistory</a></div><div class="ttdeci">boost::optional&lt; LedgerHash &gt; getLedgerHashForHistory(LedgerIndex index, InboundLedger::Reason reason)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01253">LedgerMaster.cpp:1253</a></div></div>
<div class="ttc" id="atest_and_set_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/atomic/atomic_flag/test_and_set.html">std::atomic_flag::test_and_set</a></div><div class="ttdeci">T test_and_set(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a8c94e89bcab98155b9c58ef24e24f7c1"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a8c94e89bcab98155b9c58ef24e24f7c1">ripple::LedgerMaster::mHeldTransactions</a></div><div class="ttdeci">CanonicalTXSet mHeldTransactions</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00361">LedgerMaster.h:361</a></div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html_a0b9f56cab2021e47d45e4cd287f4b425"><div class="ttname"><a href="classripple_1_1Serializer.html#a0b9f56cab2021e47d45e4cd287f4b425">ripple::Serializer::erase</a></div><div class="ttdeci">void erase()</div><div class="ttdef"><b>Definition:</b> <a href="Serializer_8h_source.html#l00207">Serializer.h:207</a></div></div>
<div class="ttc" id="apair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair::second</a></div><div class="ttdeci">T second</div></div>
<div class="ttc" id="areserve_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">std::vector::reserve</a></div><div class="ttdeci">T reserve(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1CanonicalTXSet_html_a23640380a54fffe1cf3430bb76cdbbc1"><div class="ttname"><a href="classripple_1_1CanonicalTXSet.html#a23640380a54fffe1cf3430bb76cdbbc1">ripple::CanonicalTXSet::popAcctTransaction</a></div><div class="ttdeci">std::shared_ptr&lt; STTx const &gt; popAcctTransaction(std::shared_ptr&lt; STTx const &gt; const &amp;tx)</div><div class="ttdef"><b>Definition:</b> <a href="CanonicalTXSet_8cpp_source.html#l00062">CanonicalTXSet.cpp:62</a></div></div>
@@ -2258,7 +2278,8 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a9303df52367ab629b253a6512c74a1f1"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a9303df52367ab629b253a6512c74a1f1">ripple::LedgerMaster::getPublishedLedgerAge</a></div><div class="ttdeci">std::chrono::seconds getPublishedLedgerAge()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00249">LedgerMaster.cpp:249</a></div></div>
<div class="ttc" id="aback_inserter_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/back_inserter.html">std::back_inserter</a></div><div class="ttdeci">T back_inserter(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a284da756b31604386fdb976808fb89db"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a284da756b31604386fdb976808fb89db">ripple::LedgerMaster::upgradeWarningPrevTime_</a></div><div class="ttdeci">TimeKeeper::time_point upgradeWarningPrevTime_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00410">LedgerMaster.h:410</a></div></div>
<div class="ttc" id="aclassripple_1_1ValidatorList_html_af37bfdb23c49649cfa40a40ac5d182fd"><div class="ttname"><a href="classripple_1_1ValidatorList.html#af37bfdb23c49649cfa40a40ac5d182fd">ripple::ValidatorList::getQuorumKeys</a></div><div class="ttdeci">QuorumKeys getQuorumKeys() const</div><div class="ttdoc">Get the quorum and all of the trusted keys.</div><div class="ttdef"><b>Definition:</b> <a href="ValidatorList_8h_source.html#l00506">ValidatorList.h:506</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapTreeNode_html_ae1888014b78e231a2ce381f8871fad61"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html#ae1888014b78e231a2ce381f8871fad61">ripple::SHAMapTreeNode::serializeWithPrefix</a></div><div class="ttdeci">virtual void serializeWithPrefix(Serializer &amp;) const =0</div><div class="ttdoc">Serialize the node in a format appropriate for hashing.</div></div>
<div class="ttc" id="aclassripple_1_1ValidatorList_html_af37bfdb23c49649cfa40a40ac5d182fd"><div class="ttname"><a href="classripple_1_1ValidatorList.html#af37bfdb23c49649cfa40a40ac5d182fd">ripple::ValidatorList::getQuorumKeys</a></div><div class="ttdeci">QuorumKeys getQuorumKeys() const</div><div class="ttdoc">Get the quorum and all of the trusted keys.</div><div class="ttdef"><b>Definition:</b> <a href="ValidatorList_8h_source.html#l00507">ValidatorList.h:507</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a0841fd5ecc4dc815a9a1e6b6bd65210a"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a0841fd5ecc4dc815a9a1e6b6bd65210a">ripple::LedgerMaster::releaseReplay</a></div><div class="ttdeci">std::unique_ptr&lt; LedgerReplay &gt; releaseReplay()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01775">LedgerMaster.cpp:1775</a></div></div>
<div class="ttc" id="aduration_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::minutes</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad2487abbcc1a5d6064b72144b461df6e"><div class="ttname"><a href="namespaceripple.html#ad2487abbcc1a5d6064b72144b461df6e">ripple::ApplyFlags</a></div><div class="ttdeci">ApplyFlags</div><div class="ttdef"><b>Definition:</b> <a href="ApplyView_8h_source.html#l00030">ApplyView.h:30</a></div></div>
@@ -2300,7 +2321,6 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a877e0fe2e956eccfe910101bf4143950"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a877e0fe2e956eccfe910101bf4143950">ripple::LedgerMaster::setFullLedger</a></div><div class="ttdeci">void setFullLedger(std::shared_ptr&lt; Ledger const &gt; const &amp;ledger, bool isSynchronous, bool isCurrent)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00864">LedgerMaster.cpp:864</a></div></div>
<div class="ttc" id="asort_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/sort.html">std::sort</a></div><div class="ttdeci">T sort(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a840d6984324db3445af458b9be123b6d"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a840d6984324db3445af458b9be123b6d">ripple::LedgerMaster::tune</a></div><div class="ttdeci">void tune(int size, std::chrono::seconds age)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01730">LedgerMaster.cpp:1730</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapHash_html"><div class="ttname"><a href="classripple_1_1SHAMapHash.html">ripple::SHAMapHash</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00043">SHAMapTreeNode.h:43</a></div></div>
<div class="ttc" id="aalgorithm_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a7c963aa5c47180b24897ff6b5622e5bc"><div class="ttname"><a href="classripple_1_1Application.html#a7c963aa5c47180b24897ff6b5622e5bc">ripple::Application::getOPs</a></div><div class="ttdeci">virtual NetworkOPs &amp; getOPs()=0</div></div>
<div class="ttc" id="anamespaceripple_html_ae0f54f8ce649d639bf3e2b295347e17aa121ce8d90467efba069f070ad4810add"><div class="ttname"><a href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aa121ce8d90467efba069f070ad4810add">ripple::jtLEDGER_DATA</a></div><div class="ttdeci">@ jtLEDGER_DATA</div><div class="ttdef"><b>Definition:</b> <a href="Job_8h_source.html#l00047">Job.h:47</a></div></div>
@@ -2314,7 +2334,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_affe5ded195b29cdc83334b862e806b8c"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#affe5ded195b29cdc83334b862e806b8c">ripple::LedgerMaster::ledger_fetch_size_</a></div><div class="ttdeci">const std::uint32_t ledger_fetch_size_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00399">LedgerMaster.h:399</a></div></div>
<div class="ttc" id="aclassripple_1_1Job_html_a0a3d9c407f87d7254c767ff87845cc85"><div class="ttname"><a href="classripple_1_1Job.html#a0a3d9c407f87d7254c767ff87845cc85">ripple::Job::getCancelCallback</a></div><div class="ttdeci">CancelCallback getCancelCallback() const</div><div class="ttdef"><b>Definition:</b> <a href="Job_8cpp_source.html#l00058">Job.cpp:58</a></div></div>
<div class="ttc" id="anamespaceripple_1_1BuildInfo_html_a78c52e19009a32c3d05a43c59f864bd3"><div class="ttname"><a href="namespaceripple_1_1BuildInfo.html#a78c52e19009a32c3d05a43c59f864bd3">ripple::BuildInfo::isRippledVersion</a></div><div class="ttdeci">bool isRippledVersion(std::uint64_t version)</div><div class="ttdoc">Check if the encoded software version is a rippled software version.</div><div class="ttdef"><b>Definition:</b> <a href="BuildInfo_8cpp_source.html#l00158">BuildInfo.cpp:158</a></div></div>
<div class="ttc" id="anamespaceripple_html_add9d90d52d685ee9e6baaf986b71081b"><div class="ttname"><a href="namespaceripple.html#add9d90d52d685ee9e6baaf986b71081b">ripple::getHashByIndex</a></div><div class="ttdeci">uint256 getHashByIndex(std::uint32_t ledgerIndex, Application &amp;app)</div><div class="ttdef"><b>Definition:</b> <a href="Ledger_8cpp_source.html#l01258">Ledger.cpp:1258</a></div></div>
<div class="ttc" id="anamespaceripple_html_add9d90d52d685ee9e6baaf986b71081b"><div class="ttname"><a href="namespaceripple.html#add9d90d52d685ee9e6baaf986b71081b">ripple::getHashByIndex</a></div><div class="ttdeci">uint256 getHashByIndex(std::uint32_t ledgerIndex, Application &amp;app)</div><div class="ttdef"><b>Definition:</b> <a href="Ledger_8cpp_source.html#l01260">Ledger.cpp:1260</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapMissingNode_html"><div class="ttname"><a href="classripple_1_1SHAMapMissingNode.html">ripple::SHAMapMissingNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapMissingNode_8h_source.html#l00055">SHAMapMissingNode.h:55</a></div></div>
<div class="ttc" id="aclassripple_1_1JobQueue_html_ab9dfcd27fee120a72875872a68f12ffb"><div class="ttname"><a href="classripple_1_1JobQueue.html#ab9dfcd27fee120a72875872a68f12ffb">ripple::JobQueue::getJobCount</a></div><div class="ttdeci">int getJobCount(JobType t) const</div><div class="ttdoc">Jobs waiting at this priority.</div><div class="ttdef"><b>Definition:</b> <a href="JobQueue_8cpp_source.html#l00121">JobQueue.cpp:121</a></div></div>
<div class="ttc" id="apush_back_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">std::vector::push_back</a></div><div class="ttdeci">T push_back(T... args)</div></div>
@@ -2332,6 +2352,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a871c2f482c5d16d602a21f6ab9d85b48"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a871c2f482c5d16d602a21f6ab9d85b48">ripple::LedgerMaster::mFillInProgress</a></div><div class="ttdeci">int mFillInProgress</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00376">LedgerMaster.h:376</a></div></div>
<div class="ttc" id="aclassripple_1_1NetworkOPs_html_ad501185ed756e643261f7079e5ea2eb8"><div class="ttname"><a href="classripple_1_1NetworkOPs.html#ad501185ed756e643261f7079e5ea2eb8">ripple::NetworkOPs::isNeedNetworkLedger</a></div><div class="ttdeci">virtual bool isNeedNetworkLedger()=0</div></div>
<div class="ttc" id="aclassripple_1_1LedgerHistory_html_a1148d79bd25d415e793e4d11f79836bf"><div class="ttname"><a href="classripple_1_1LedgerHistory.html#a1148d79bd25d415e793e4d11f79836bf">ripple::LedgerHistory::insert</a></div><div class="ttdeci">bool insert(std::shared_ptr&lt; Ledger const &gt; ledger, bool validated)</div><div class="ttdoc">Track a ledger.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerHistory_8cpp_source.html#l00062">LedgerHistory.cpp:62</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae225b78bf472a30fbf3be25a61e5e595"><div class="ttname"><a href="namespaceripple.html#ae225b78bf472a30fbf3be25a61e5e595">ripple::sfServerVersion</a></div><div class="ttdeci">const SF_UINT64 sfServerVersion</div></div>
<div class="ttc" id="aclassripple_1_1DatabaseCon_html_a16c6f729c6462f6200b724543f5c67bc"><div class="ttname"><a href="classripple_1_1DatabaseCon.html#a16c6f729c6462f6200b724543f5c67bc">ripple::DatabaseCon::checkoutDb</a></div><div class="ttdeci">LockedSociSession checkoutDb()</div><div class="ttdef"><b>Definition:</b> <a href="DatabaseCon_8h_source.html#l00176">DatabaseCon.h:176</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a1edf9bf61737f405b93980dbe1fee4d3"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a1edf9bf61737f405b93980dbe1fee4d3">ripple::LedgerMaster::replayData</a></div><div class="ttdeci">std::unique_ptr&lt; LedgerReplay &gt; replayData</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00364">LedgerMaster.h:364</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aaa32ab558f1d6f813a5bb8ed2e4829a1"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aaa32ab558f1d6f813a5bb8ed2e4829a1">ripple::LedgerMaster::gotFetchPack</a></div><div class="ttdeci">void gotFetchPack(bool progress, std::uint32_t seq)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02025">LedgerMaster.cpp:2025</a></div></div>
@@ -2356,19 +2377,21 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_a38d1749cd010f88da471b4183b2dfe52"><div class="ttname"><a href="namespaceripple.html#a38d1749cd010f88da471b4183b2dfe52">ripple::isCurrent</a></div><div class="ttdeci">bool isCurrent(ValidationParms const &amp;p, NetClock::time_point now, NetClock::time_point signTime, NetClock::time_point seenTime)</div><div class="ttdoc">Whether a validation is still current.</div><div class="ttdef"><b>Definition:</b> <a href="Validations_8h_source.html#l00145">Validations.h:145</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1954e780758fdb8b0c25bab4c90a4614"><div class="ttname"><a href="namespaceripple.html#a1954e780758fdb8b0c25bab4c90a4614">ripple::prevMissing</a></div><div class="ttdeci">boost::optional&lt; T &gt; prevMissing(RangeSet&lt; T &gt; const &amp;rs, T t, T minVal=0)</div><div class="ttdoc">Find the largest value not in the set that is less than a given value.</div><div class="ttdef"><b>Definition:</b> <a href="RangeSet_8h_source.html#l00184">RangeSet.h:184</a></div></div>
<div class="ttc" id="aunique_lock_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html"><div class="ttname"><a href="classripple_1_1SHAMap.html">ripple::SHAMap</a></div><div class="ttdoc">A SHAMap is both a radix tree with a fan-out of 16 and a Merkle tree.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00095">SHAMap.h:95</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac15ecd7d76b1ce1c5719a25a7bdeaef4"><div class="ttname"><a href="namespaceripple.html#ac15ecd7d76b1ce1c5719a25a7bdeaef4">ripple::populateFetchPack</a></div><div class="ttdeci">static void populateFetchPack(SHAMap const &amp;want, SHAMap const *have, std::uint32_t cnt, protocol::TMGetObjectByHash *into, std::uint32_t seq, bool withLeaves=true)</div><div class="ttdoc">Populate a fetch pack with data from the map the recipient wants.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02062">LedgerMaster.cpp:2062</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a45c5a3a1dea7c20d829dededf270ebc7"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a45c5a3a1dea7c20d829dededf270ebc7">ripple::LedgerMaster::canBeCurrent</a></div><div class="ttdeci">bool canBeCurrent(std::shared_ptr&lt; Ledger const &gt; const &amp;ledger)</div><div class="ttdoc">Check the sequence number and parent close time of a ledger against our clock and last validated ledg...</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00410">LedgerMaster.cpp:410</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a9865710c130bf4427842a544b2b7f077"><div class="ttname"><a href="classripple_1_1Application.html#a9865710c130bf4427842a544b2b7f077">ripple::Application::getTxQ</a></div><div class="ttdeci">virtual TxQ &amp; getTxQ()=0</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapTreeNode_html"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html">ripple::SHAMapTreeNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00133">SHAMapTreeNode.h:133</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a860be08979e27d8c6f37f722f996ba6c"><div class="ttname"><a href="classripple_1_1Application.html#a860be08979e27d8c6f37f722f996ba6c">ripple::Application::getJobQueue</a></div><div class="ttdeci">virtual JobQueue &amp; getJobQueue()=0</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a009526a350a90e20d382513f27304a98"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a009526a350a90e20d382513f27304a98">ripple::LedgerMaster::haveLedger</a></div><div class="ttdeci">bool haveLedger(std::uint32_t seq)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00568">LedgerMaster.cpp:568</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a3c115f792213224d9db65f6d8a5cce42"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a3c115f792213224d9db65f6d8a5cce42">ripple::LedgerMaster::getValidatedLedger</a></div><div class="ttdeci">std::shared_ptr&lt; Ledger const &gt; getValidatedLedger()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00094">LedgerMaster.h:94</a></div></div>
<div class="ttc" id="anamespaceripple_html_a80033fe071280d537dbd79e19ba5b628"><div class="ttname"><a href="namespaceripple.html#a80033fe071280d537dbd79e19ba5b628">ripple::calculatePercent</a></div><div class="ttdeci">constexpr std::size_t calculatePercent(std::size_t count, std::size_t total)</div><div class="ttdoc">Calculate one number divided by another number in percentage.</div><div class="ttdef"><b>Definition:</b> <a href="MathUtilities_8h_source.html#l00044">MathUtilities.h:44</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_1_1Stream_html"><div class="ttname"><a href="classbeast_1_1Journal_1_1Stream.html">beast::Journal::Stream</a></div><div class="ttdoc">Provide a light-weight way to check active() before string formatting.</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00194">Journal.h:194</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1932b552a7e76eba44a31bdcdd4a5315"><div class="ttname"><a href="namespaceripple.html#a1932b552a7e76eba44a31bdcdd4a5315">ripple::sfLedgerSequence</a></div><div class="ttdeci">const SF_U32 sfLedgerSequence(access, STI_UINT32, 6, &quot;LedgerSequence&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="SField_8h_source.html#l00358">SField.h:358</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a49b0713e65bb8e2c51b76fbf16252afe"><div class="ttname"><a href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">beast::Journal::error</a></div><div class="ttdeci">Stream error() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00333">Journal.h:333</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a87d6bd59020d94110027dcab3d9e3357"><div class="ttname"><a href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">beast::Journal::info</a></div><div class="ttdeci">Stream info() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00321">Journal.h:321</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_ae23afecc4263507c2f581b68183300cd"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#ae23afecc4263507c2f581b68183300cd">ripple::LedgerMaster::isCompatible</a></div><div class="ttdeci">bool isCompatible(ReadView const &amp;, beast::Journal::Stream, char const *reason)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00218">LedgerMaster.cpp:218</a></div></div>
<div class="ttc" id="atime_point_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/time_point.html">std::chrono::time_point</a></div></div>
<div class="ttc" id="aclassripple_1_1Overlay_html_a5399bc9c533ae4b6286d1ee4b4f14486"><div class="ttname"><a href="classripple_1_1Overlay.html#a5399bc9c533ae4b6286d1ee4b4f14486">ripple::Overlay::checkSanity</a></div><div class="ttdeci">virtual void checkSanity(std::uint32_t index)=0</div><div class="ttdoc">Calls the checkSanity function on each peer.</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapTreeNode_html_a3feaa925a9dc0e847049e6c4cfbb6875"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html#a3feaa925a9dc0e847049e6c4cfbb6875">ripple::SHAMapTreeNode::isLeaf</a></div><div class="ttdeci">virtual bool isLeaf() const =0</div><div class="ttdoc">Determines if this is a leaf node.</div></div>
<div class="ttc" id="aclassripple_1_1OrderBookDB_html_aed86977ef6ecea12e5f9f339f4a38f58"><div class="ttname"><a href="classripple_1_1OrderBookDB.html#aed86977ef6ecea12e5f9f339f4a38f58">ripple::OrderBookDB::setup</a></div><div class="ttdeci">void setup(std::shared_ptr&lt; ReadView const &gt; const &amp;ledger)</div><div class="ttdef"><b>Definition:</b> <a href="OrderBookDB_8cpp_source.html#l00046">OrderBookDB.cpp:46</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerHistory_html_ae20522c290ede961bc6f313452c0cd2a"><div class="ttname"><a href="classripple_1_1LedgerHistory.html#ae20522c290ede961bc6f313452c0cd2a">ripple::LedgerHistory::validatedLedger</a></div><div class="ttdeci">void validatedLedger(std::shared_ptr&lt; Ledger const &gt; const &amp;, boost::optional&lt; uint256 &gt; const &amp;consensusHash)</div><div class="ttdoc">Report that we have validated a particular ledger.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerHistory_8cpp_source.html#l00472">LedgerHistory.cpp:472</a></div></div>
<div class="ttc" id="acopy_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/copy.html">std::copy</a></div><div class="ttdeci">T copy(T... args)</div></div>
@@ -2413,9 +2436,10 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a0e047789491cdccacec02b560671f3f9"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a0e047789491cdccacec02b560671f3f9">ripple::LedgerMaster::NO_VALIDATED_LEDGER_AGE</a></div><div class="ttdeci">static constexpr std::chrono::seconds NO_VALIDATED_LEDGER_AGE</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00058">LedgerMaster.h:58</a></div></div>
<div class="ttc" id="aweak_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/weak_ptr.html">std::weak_ptr&lt; Peer &gt;</a></div></div>
<div class="ttc" id="amin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a></div><div class="ttdeci">T min(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapTreeNode_html_a454e86c9ed693f8921d53a915d8b1415"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html#a454e86c9ed693f8921d53a915d8b1415">ripple::SHAMapTreeNode::getHash</a></div><div class="ttdeci">SHAMapHash const &amp; getHash() const</div><div class="ttdoc">Return the hash of this node.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00223">SHAMapTreeNode.h:223</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a9b1527e3a4668c09badb19a3db02e132"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a9b1527e3a4668c09badb19a3db02e132">ripple::LedgerMaster::max_ledger_difference_</a></div><div class="ttdeci">const LedgerIndex max_ledger_difference_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00407">LedgerMaster.h:407</a></div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html"><div class="ttname"><a href="classripple_1_1Serializer.html">ripple::Serializer</a></div><div class="ttdef"><b>Definition:</b> <a href="Serializer_8h_source.html#l00039">Serializer.h:39</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aa14798637526012a9725f62488e86e58"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aa14798637526012a9725f62488e86e58">ripple::LedgerMaster::getFetchPackCacheSize</a></div><div class="ttdeci">std::size_t getFetchPackCacheSize() const</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02183">LedgerMaster.cpp:2183</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aa14798637526012a9725f62488e86e58"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aa14798637526012a9725f62488e86e58">ripple::LedgerMaster::getFetchPackCacheSize</a></div><div class="ttdeci">std::size_t getFetchPackCacheSize() const</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l02225">LedgerMaster.cpp:2225</a></div></div>
<div class="ttc" id="anamespaceripple_1_1BuildInfo_html_a5883781365410de620622c6a2b1b81d5"><div class="ttname"><a href="namespaceripple_1_1BuildInfo.html#a5883781365410de620622c6a2b1b81d5">ripple::BuildInfo::isNewerVersion</a></div><div class="ttdeci">bool isNewerVersion(std::uint64_t version)</div><div class="ttdoc">Check if the version is newer than the local node's rippled software version.</div><div class="ttdef"><b>Definition:</b> <a href="BuildInfo_8cpp_source.html#l00165">BuildInfo.cpp:165</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a85ba69d69b04e9a808a496aeb52268cb"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a85ba69d69b04e9a808a496aeb52268cb">ripple::LedgerMaster::doLedgerCleaner</a></div><div class="ttdeci">void doLedgerCleaner(Json::Value const &amp;parameters)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01717">LedgerMaster.cpp:1717</a></div></div>
<div class="ttc" id="anamespaceripple_html_a43e44648f3d01b0d857edbdd5589514c"><div class="ttname"><a href="namespaceripple.html#a43e44648f3d01b0d857edbdd5589514c">ripple::hashOfSeq</a></div><div class="ttdeci">boost::optional&lt; uint256 &gt; hashOfSeq(ReadView const &amp;ledger, LedgerIndex seq, beast::Journal journal)</div><div class="ttdoc">Return the hash of a ledger by sequence.</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00573">View.cpp:573</a></div></div>
@@ -2425,7 +2449,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a6e3051e07124af0b14db207901a1a30f"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a6e3051e07124af0b14db207901a1a30f">ripple::LedgerMaster::mAdvanceWork</a></div><div class="ttdeci">bool mAdvanceWork</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00375">LedgerMaster.h:375</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html"><div class="ttname"><a href="classripple_1_1ReadView.html">ripple::ReadView</a></div><div class="ttdoc">A view into a ledger.</div><div class="ttdef"><b>Definition:</b> <a href="ReadView_8h_source.html#l00192">ReadView.h:192</a></div></div>
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition:</b> <a href="RCLCensorshipDetector_8h_source.html#l00029">RCLCensorshipDetector.h:29</a></div></div>
<div class="ttc" id="aclassripple_1_1Config_html_ad053293ba571075ebfa6f086ed70fdc5"><div class="ttname"><a href="classripple_1_1Config.html#ad053293ba571075ebfa6f086ed70fdc5">ripple::Config::features</a></div><div class="ttdeci">std::unordered_set&lt; uint256, beast::uhash&lt;&gt; &gt; features</div><div class="ttdef"><b>Definition:</b> <a href="Config_8h_source.html#l00197">Config.h:197</a></div></div>
<div class="ttc" id="aclassripple_1_1Config_html_ad053293ba571075ebfa6f086ed70fdc5"><div class="ttname"><a href="classripple_1_1Config.html#ad053293ba571075ebfa6f086ed70fdc5">ripple::Config::features</a></div><div class="ttdeci">std::unordered_set&lt; uint256, beast::uhash&lt;&gt; &gt; features</div><div class="ttdef"><b>Definition:</b> <a href="Config_8h_source.html#l00204">Config.h:204</a></div></div>
<div class="ttc" id="aclassripple_1_1NodeStore_1_1Database_html_aad7aa12d0cc01006120761d23312d428"><div class="ttname"><a href="classripple_1_1NodeStore_1_1Database.html#aad7aa12d0cc01006120761d23312d428">ripple::NodeStore::Database::storeLedger</a></div><div class="ttdeci">virtual bool storeLedger(std::shared_ptr&lt; Ledger const &gt; const &amp;srcLedger)=0</div><div class="ttdoc">Store a ledger from a different database.</div></div>
<div class="ttc" id="anamespaceripple_html_a4ca2a1ecf43818f8100acc21f512b13a"><div class="ttname"><a href="namespaceripple.html#a4ca2a1ecf43818f8100acc21f512b13a">ripple::shouldAcquire</a></div><div class="ttdeci">static bool shouldAcquire(std::uint32_t const currentLedger, std::uint32_t const ledgerHistory, boost::optional&lt; LedgerIndex &gt; const minimumOnline, std::uint32_t const candidateLedger, beast::Journal j)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00152">LedgerMaster.cpp:152</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_ac73ffc4052b4a03b24f192154268ed40"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#ac73ffc4052b4a03b24f192154268ed40">ripple::LedgerMaster::mPubLedgerClose</a></div><div class="ttdeci">std::atomic&lt; std::uint32_t &gt; mPubLedgerClose</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00384">LedgerMaster.h:384</a></div></div>
@@ -2445,7 +2469,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aff01e5be205edd638601cc993bd4d140"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aff01e5be205edd638601cc993bd4d140">ripple::LedgerMaster::getCloseTimeBySeq</a></div><div class="ttdeci">boost::optional&lt; NetClock::time_point &gt; getCloseTimeBySeq(LedgerIndex ledgerIndex)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01563">LedgerMaster.cpp:1563</a></div></div>
<div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace.</div></div>
<div class="ttc" id="anamespaceripple_html_aefd2f77338ce3c9a2fffc4f0b289b483"><div class="ttname"><a href="namespaceripple.html#aefd2f77338ce3c9a2fffc4f0b289b483">ripple::LogicError</a></div><div class="ttdeci">void LogicError(std::string const &amp;how) noexcept</div><div class="ttdoc">Called when faulty logic causes a broken invariant.</div><div class="ttdef"><b>Definition:</b> <a href="contract_8cpp_source.html#l00048">contract.cpp:48</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae3f5bc352766a1a8dbf5270eb7dbc2e7"><div class="ttname"><a href="namespaceripple.html#ae3f5bc352766a1a8dbf5270eb7dbc2e7">ripple::sha512Half</a></div><div class="ttdeci">sha512_half_hasher::result_type sha512Half(Args const &amp;... args)</div><div class="ttdoc">Returns the SHA512-Half of a series of objects.</div><div class="ttdef"><b>Definition:</b> <a href="digest_8h_source.html#l00227">digest.h:227</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae3f5bc352766a1a8dbf5270eb7dbc2e7"><div class="ttname"><a href="namespaceripple.html#ae3f5bc352766a1a8dbf5270eb7dbc2e7">ripple::sha512Half</a></div><div class="ttdeci">sha512_half_hasher::result_type sha512Half(Args const &amp;... args)</div><div class="ttdoc">Returns the SHA512-Half of a series of objects.</div><div class="ttdef"><b>Definition:</b> <a href="digest_8h_source.html#l00216">digest.h:216</a></div></div>
<div class="ttc" id="acassert_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/cassert.html">cassert</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad336c5d65049a78d9b4768fc6432e5c6"><div class="ttname"><a href="namespaceripple.html#ad336c5d65049a78d9b4768fc6432e5c6">ripple::MAX_LEDGER_AGE_ACQUIRE</a></div><div class="ttdeci">static constexpr std::chrono::minutes MAX_LEDGER_AGE_ACQUIRE</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00144">LedgerMaster.cpp:144</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a9fdca40ce43865b5ee842395cdf0b7b0"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a9fdca40ce43865b5ee842395cdf0b7b0">ripple::LedgerMaster::mValidLedgerSeq</a></div><div class="ttdeci">std::atomic&lt; LedgerIndex &gt; mValidLedgerSeq</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00387">LedgerMaster.h:387</a></div></div>
@@ -2458,16 +2482,18 @@ $(function() {
<div class="ttc" id="aempty_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/empty.html">std::vector::empty</a></div><div class="ttdeci">T empty(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1Rules_html"><div class="ttname"><a href="classripple_1_1Rules.html">ripple::Rules</a></div><div class="ttdoc">Rules controlling protocol behavior.</div><div class="ttdef"><b>Definition:</b> <a href="ReadView_8h_source.html#l00131">ReadView.h:131</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerHistory_html_a9d3e04a8d477455a9da28022915bad81"><div class="ttname"><a href="classripple_1_1LedgerHistory.html#a9d3e04a8d477455a9da28022915bad81">ripple::LedgerHistory::clearLedgerCachePrior</a></div><div class="ttdeci">void clearLedgerCachePrior(LedgerIndex seq)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerHistory_8cpp_source.html#l00534">LedgerHistory.cpp:534</a></div></div>
<div class="ttc" id="aclassripple_1_1Overlay_html_a81a1499888369dfb338d45af35f09068"><div class="ttname"><a href="classripple_1_1Overlay.html#a81a1499888369dfb338d45af35f09068">ripple::Overlay::checkTracking</a></div><div class="ttdeci">virtual void checkTracking(std::uint32_t index)=0</div><div class="ttdoc">Calls the checkTracking function on each peer.</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a37b15652f758d0ff633fc4f4384000e7"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a37b15652f758d0ff633fc4f4384000e7">ripple::LedgerMaster::mShardLedger</a></div><div class="ttdeci">std::shared_ptr&lt; Ledger const &gt; mShardLedger</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00354">LedgerMaster.h:354</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a556228cb60bcf405c225d3f64b7b01ae"><div class="ttname"><a href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">beast::Journal::debug</a></div><div class="ttdeci">Stream debug() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00315">Journal.h:315</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a6d84a7bc393900b8d1d12008dcfce9b4"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a6d84a7bc393900b8d1d12008dcfce9b4">ripple::LedgerMaster::updatePaths</a></div><div class="ttdeci">void updatePaths(Job &amp;job)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01395">LedgerMaster.cpp:1395</a></div></div>
<div class="ttc" id="asize_t_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div></div>
<div class="ttc" id="anamespaceripple_html_a991ad04127005bca99824203dfe2e783"><div class="ttname"><a href="namespaceripple.html#a991ad04127005bca99824203dfe2e783">ripple::getHashesByIndex</a></div><div class="ttdeci">bool getHashesByIndex(std::uint32_t ledgerIndex, uint256 &amp;ledgerHash, uint256 &amp;parentHash, Application &amp;app)</div><div class="ttdef"><b>Definition:</b> <a href="Ledger_8cpp_source.html#l01287">Ledger.cpp:1287</a></div></div>
<div class="ttc" id="anamespaceripple_html_a991ad04127005bca99824203dfe2e783"><div class="ttname"><a href="namespaceripple.html#a991ad04127005bca99824203dfe2e783">ripple::getHashesByIndex</a></div><div class="ttdeci">bool getHashesByIndex(std::uint32_t ledgerIndex, uint256 &amp;ledgerHash, uint256 &amp;parentHash, Application &amp;app)</div><div class="ttdef"><b>Definition:</b> <a href="Ledger_8cpp_source.html#l01289">Ledger.cpp:1289</a></div></div>
<div class="ttc" id="amake_pair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a></div><div class="ttdeci">T make_pair(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html_a55ebab5e9bf8d8231da8f3c796150719"><div class="ttname"><a href="classripple_1_1Serializer.html#a55ebab5e9bf8d8231da8f3c796150719">ripple::Serializer::add32</a></div><div class="ttdeci">int add32(std::uint32_t i)</div><div class="ttdef"><b>Definition:</b> <a href="Serializer_8cpp_source.html#l00038">Serializer.cpp:38</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_adbb16e4fb8acf01bd535684e45d20051"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#adbb16e4fb8acf01bd535684e45d20051">ripple::LedgerMaster::storeLedger</a></div><div class="ttdeci">bool storeLedger(std::shared_ptr&lt; Ledger const &gt; ledger)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00510">LedgerMaster.cpp:510</a></div></div>
<div class="ttc" id="aend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/end.html">std::vector::end</a></div><div class="ttdeci">T end(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_a3e8d7f8b5fa089a184dcc9b00b6e0da7"><div class="ttname"><a href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7">ripple::InboundLedger::Reason</a></div><div class="ttdeci">Reason</div><div class="ttdef"><b>Definition:</b> <a href="InboundLedger_8h_source.html#l00051">InboundLedger.h:51</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_a3e8d7f8b5fa089a184dcc9b00b6e0da7"><div class="ttname"><a href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7">ripple::InboundLedger::Reason</a></div><div class="ttdeci">Reason</div><div class="ttdef"><b>Definition:</b> <a href="InboundLedger_8h_source.html#l00045">InboundLedger.h:45</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapHash_html_a8f95b5bc14b7085d368f56aeaa17ef4f"><div class="ttname"><a href="classripple_1_1SHAMapHash.html#a8f95b5bc14b7085d368f56aeaa17ef4f">ripple::SHAMapHash::as_uint256</a></div><div class="ttdeci">uint256 const &amp; as_uint256() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00058">SHAMapTreeNode.h:58</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a6f1008fae10cc18f12aaee19091d9980"><div class="ttname"><a href="classripple_1_1Application.html#a6f1008fae10cc18f12aaee19091d9980">ripple::Application::getSHAMapStore</a></div><div class="ttdeci">virtual SHAMapStore &amp; getSHAMapStore()=0</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a2204e39a00d7a57401d99b520c2721fd"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a2204e39a00d7a57401d99b520c2721fd">ripple::LedgerMaster::setLedgerRangePresent</a></div><div class="ttdeci">void setLedgerRangePresent(std::uint32_t minV, std::uint32_t maxV)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01723">LedgerMaster.cpp:1723</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae0f54f8ce649d639bf3e2b295347e17aac6876ad6800d8cd0a4c9a306baf35204"><div class="ttname"><a href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aac6876ad6800d8cd0a4c9a306baf35204">ripple::jtADVANCE</a></div><div class="ttdeci">@ jtADVANCE</div><div class="ttdef"><b>Definition:</b> <a href="Job_8h_source.html#l00053">Job.h:53</a></div></div>
@@ -2482,7 +2508,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LoadFeeTrack_html_a7323c2513443e8ea3a82489ba229c65c"><div class="ttname"><a href="classripple_1_1LoadFeeTrack.html#a7323c2513443e8ea3a82489ba229c65c">ripple::LoadFeeTrack::setRemoteFee</a></div><div class="ttdeci">void setRemoteFee(std::uint32_t f)</div><div class="ttdef"><b>Definition:</b> <a href="LoadFeeTrack_8h_source.html#l00059">LoadFeeTrack.h:59</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a4f59228c74d5491f68333ef250431cdb"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a4f59228c74d5491f68333ef250431cdb">ripple::LedgerMaster::getHashBySeq</a></div><div class="ttdeci">uint256 getHashBySeq(std::uint32_t index)</div><div class="ttdoc">Get a ledger's hash by sequence number using the cache.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01593">LedgerMaster.cpp:1593</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_ac93d1652035e6600635bdf6cba0d510a"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#ac93d1652035e6600635bdf6cba0d510a">ripple::LedgerMaster::findNewLedgersToPublish</a></div><div class="ttdeci">std::vector&lt; std::shared_ptr&lt; Ledger const &gt; &gt; findNewLedgersToPublish(std::unique_lock&lt; std::recursive_mutex &gt; &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01276">LedgerMaster.cpp:1276</a></div></div>
<div class="ttc" id="anamespaceripple_html_afd9c0655540fb85bcc173ec81c7c7290"><div class="ttname"><a href="namespaceripple.html#afd9c0655540fb85bcc173ec81c7c7290">ripple::pendSaveValidated</a></div><div class="ttdeci">bool pendSaveValidated(Application &amp;app, std::shared_ptr&lt; Ledger const &gt; const &amp;ledger, bool isSynchronous, bool isCurrent)</div><div class="ttdoc">Save, or arrange to save, a fully-validated ledger Returns false on error.</div><div class="ttdef"><b>Definition:</b> <a href="Ledger_8cpp_source.html#l01059">Ledger.cpp:1059</a></div></div>
<div class="ttc" id="anamespaceripple_html_afd9c0655540fb85bcc173ec81c7c7290"><div class="ttname"><a href="namespaceripple.html#afd9c0655540fb85bcc173ec81c7c7290">ripple::pendSaveValidated</a></div><div class="ttdeci">bool pendSaveValidated(Application &amp;app, std::shared_ptr&lt; Ledger const &gt; const &amp;ledger, bool isSynchronous, bool isCurrent)</div><div class="ttdoc">Save, or arrange to save, a fully-validated ledger Returns false on error.</div><div class="ttdef"><b>Definition:</b> <a href="Ledger_8cpp_source.html#l01061">Ledger.cpp:1061</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a6e70b1320b512bce863a8672be1e3b7d"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a6e70b1320b512bce863a8672be1e3b7d">ripple::LedgerMaster::isCaughtUp</a></div><div class="ttdeci">bool isCaughtUp(std::string &amp;reason)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00287">LedgerMaster.cpp:287</a></div></div>
<div class="ttc" id="aunique_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aae6f0eb246e1a10b8c025b116e6993f0"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aae6f0eb246e1a10b8c025b116e6993f0">ripple::LedgerMaster::mPathFindThread</a></div><div class="ttdeci">int mPathFindThread</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00378">LedgerMaster.h:378</a></div></div>
@@ -2503,9 +2529,8 @@ $(function() {
<div class="ttc" id="awhat_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/error/exception/what.html">std::runtime_error::what</a></div><div class="ttdeci">T what(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a414aa94e494bb1e86e6f17ee84b204f6"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a414aa94e494bb1e86e6f17ee84b204f6">ripple::LedgerMaster::getCacheHitRate</a></div><div class="ttdeci">float getCacheHitRate()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l01743">LedgerMaster.cpp:1743</a></div></div>
<div class="ttc" id="aclassripple_1_1CanonicalTXSet_html_af36fed1e1de928391be3cd7c29f94b52"><div class="ttname"><a href="classripple_1_1CanonicalTXSet.html#af36fed1e1de928391be3cd7c29f94b52">ripple::CanonicalTXSet::reset</a></div><div class="ttdeci">void reset(LedgerHash const &amp;salt)</div><div class="ttdef"><b>Definition:</b> <a href="CanonicalTXSet_8h_source.html#l00129">CanonicalTXSet.h:129</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae17bb88deaa0a03be218279436f8edac"><div class="ttname"><a href="namespaceripple.html#ae17bb88deaa0a03be218279436f8edac">ripple::sfServerVersion</a></div><div class="ttdeci">const SF_U64 sfServerVersion(access, STI_UINT64, 11, &quot;ServerVersion&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="SField_8h_source.html#l00407">SField.h:407</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad56325b81b4bf2441bcb0791c243565d"><div class="ttname"><a href="namespaceripple.html#ad56325b81b4bf2441bcb0791c243565d">ripple::MAX_WRITE_LOAD_ACQUIRE</a></div><div class="ttdeci">static constexpr int MAX_WRITE_LOAD_ACQUIRE</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8cpp_source.html#l00147">LedgerMaster.cpp:147</a></div></div>
<div class="ttc" id="aclassripple_1_1ValidatorList_html_ad28f57783826e0b090713c89265c81e4"><div class="ttname"><a href="classripple_1_1ValidatorList.html#ad28f57783826e0b090713c89265c81e4">ripple::ValidatorList::quorum</a></div><div class="ttdeci">std::size_t quorum() const</div><div class="ttdoc">Get quorum value for current trusted key set.</div><div class="ttdef"><b>Definition:</b> <a href="ValidatorList_8h_source.html#l00342">ValidatorList.h:342</a></div></div>
<div class="ttc" id="aclassripple_1_1ValidatorList_html_ad28f57783826e0b090713c89265c81e4"><div class="ttname"><a href="classripple_1_1ValidatorList.html#ad28f57783826e0b090713c89265c81e4">ripple::ValidatorList::quorum</a></div><div class="ttdeci">std::size_t quorum() const</div><div class="ttdoc">Get quorum value for current trusted key set.</div><div class="ttdef"><b>Definition:</b> <a href="ValidatorList_8h_source.html#l00343">ValidatorList.h:343</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html"><div class="ttname"><a href="classJson_1_1Value.html">Json::Value</a></div><div class="ttdoc">Represents a JSON value.</div><div class="ttdef"><b>Definition:</b> <a href="json__value_8h_source.html#l00145">json_value.h:145</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_ac57d9b2dd4e172f0934c7a1e34485842"><div class="ttname"><a href="classripple_1_1Application.html#ac57d9b2dd4e172f0934c7a1e34485842">ripple::Application::getMaxDisallowedLedger</a></div><div class="ttdeci">virtual LedgerIndex getMaxDisallowedLedger()=0</div><div class="ttdoc">Ensure that a newly-started validator does not sign proposals older than the last ledger it persisted...</div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a498847d43f1042eabbc26ce3e37c38c4"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a498847d43f1042eabbc26ce3e37c38c4">ripple::LedgerMaster::m_mutex</a></div><div class="ttdeci">std::recursive_mutex m_mutex</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00336">LedgerMaster.h:336</a></div></div>