This commit is contained in:
bthomee
2025-10-31 09:13:27 -07:00
parent 1f22595f62
commit f10222882f
15 changed files with 1364 additions and 1328 deletions

View File

@@ -1393,421 +1393,430 @@ $(document).ready(function() { init_codefold(0); });
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> {</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> <span class="keyword">auto</span>&amp; txn = tx-&gt;<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr/get.html">get</a>();</div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> <a class="code hl_class" href="classripple_1_1SerialIter.html">SerialIter</a> sit(<a class="code hl_function" href="namespaceripple.html#a93f2333b362ee67694b78f55eadf7805">makeSlice</a>(txn.rawtransaction()));</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a95481d20b4e474ddd175e13038323689">relay</a> = !<a class="code hl_function" href="namespaceripple.html#a2e1e308b7a19c6ae68201ce583ced433">isPseudoTx</a>(<a class="code hl_class" href="classripple_1_1STTx.html">STTx</a>{sit});</div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> }</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> </div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">Overlay::PeerSequence</a> peers = {};</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> total = 0;</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> disabled = 0;</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> enabledInSkip = 0;</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> </div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1OverlayImpl.html#a95481d20b4e474ddd175e13038323689">relay</a>)</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> {</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a83ff989bc69d931321cc8efaecbb1c0c">TX_REDUCE_RELAY_ENABLE</a>)</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> </div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> peers = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a2eb13be3a38a8711d749372f968dac22">getActivePeers</a>(toSkip, total, disabled, enabledInSkip);</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> JLOG(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#af9f9ddea045cd3ef7b27d700f9962dd0">journal_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> &lt;&lt; <span class="stringliteral">&quot;not relaying tx, total peers &quot;</span> &lt;&lt; peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p : peers)</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> p-&gt;addTxQueue(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/hash.html">hash</a>);</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> }</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> </div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <span class="keyword">auto</span>&amp; txn = tx-&gt;get();</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> <span class="keyword">auto</span> <span class="keyword">const</span> sm = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared&lt;Message&gt;</a>(txn, protocol::mtTRANSACTION);</div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> peers = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a2eb13be3a38a8711d749372f968dac22">getActivePeers</a>(toSkip, total, disabled, enabledInSkip);</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> <span class="keyword">auto</span> <span class="keyword">const</span> minRelay = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a571b13011e10271dd2c5c010106389d8">TX_REDUCE_RELAY_MIN_PEERS</a> + disabled;</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> </div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a83ff989bc69d931321cc8efaecbb1c0c">TX_REDUCE_RELAY_ENABLE</a> || total &lt;= minRelay)</div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> {</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p : peers)</div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> p-&gt;send(sm);</div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a83ff989bc69d931321cc8efaecbb1c0c">TX_REDUCE_RELAY_ENABLE</a> ||</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a9433d2b86e6e37bfcec0066ba608d354">TX_REDUCE_RELAY_METRICS</a>)</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a6fcecedab437fc1bf8ab7e7bbf87f866">txMetrics_</a>.<a class="code hl_function" href="structripple_1_1metrics_1_1TxMetrics.html#adfcd86c34470bc336f8623e1d1130e74">addMetrics</a>(total, toSkip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/size.html">size</a>(), 0);</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> }</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> </div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> <span class="comment">// We have more peers than the minimum (disabled + minimum enabled),</span></div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> <span class="comment">// relay to all disabled and some randomly selected enabled that</span></div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> <span class="comment">// do not have the transaction.</span></div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> <span class="keyword">auto</span> <span class="keyword">const</span> enabledTarget = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a571b13011e10271dd2c5c010106389d8">TX_REDUCE_RELAY_MIN_PEERS</a> +</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> (total - minRelay) * <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#aa03bee9cf3f844d3539a85fbc2a9184a">TX_RELAY_PERCENTAGE</a> / 100;</div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> </div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a6fcecedab437fc1bf8ab7e7bbf87f866">txMetrics_</a>.<a class="code hl_function" href="structripple_1_1metrics_1_1TxMetrics.html#adfcd86c34470bc336f8623e1d1130e74">addMetrics</a>(enabledTarget, toSkip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/size.html">size</a>(), disabled);</div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> </div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> <span class="keywordflow">if</span> (enabledTarget &gt; enabledInSkip)</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/random_shuffle.html">std::shuffle</a>(peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/begin.html">begin</a>(), peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/end.html">end</a>(), <a class="code hl_function" href="namespaceripple.html#afe66a903fefc1f0613602efe9e2283de">default_prng</a>());</div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> </div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> JLOG(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#af9f9ddea045cd3ef7b27d700f9962dd0">journal_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;relaying tx, total peers &quot;</span> &lt;&lt; peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>()</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> &lt;&lt; <span class="stringliteral">&quot; selected &quot;</span> &lt;&lt; enabledTarget &lt;&lt; <span class="stringliteral">&quot; skip &quot;</span></div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> &lt;&lt; toSkip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/size.html">size</a>() &lt;&lt; <span class="stringliteral">&quot; disabled &quot;</span> &lt;&lt; disabled;</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> {</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a95481d20b4e474ddd175e13038323689">relay</a> = !<a class="code hl_function" href="namespaceripple.html#a2e1e308b7a19c6ae68201ce583ced433">isPseudoTx</a>(<a class="code hl_class" href="classripple_1_1STTx.html">STTx</a>{sit});</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> }</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp;)</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> {</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> <span class="comment">// Could not construct STTx, not relaying</span></div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> JLOG(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#af9f9ddea045cd3ef7b27d700f9962dd0">journal_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Could not construct STTx: &quot;</span> &lt;&lt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/hash.html">hash</a>;</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> }</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> }</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> </div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">Overlay::PeerSequence</a> peers = {};</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> total = 0;</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> disabled = 0;</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> enabledInSkip = 0;</div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> </div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1OverlayImpl.html#a95481d20b4e474ddd175e13038323689">relay</a>)</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> {</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a83ff989bc69d931321cc8efaecbb1c0c">TX_REDUCE_RELAY_ENABLE</a>)</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> </div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> peers = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a2eb13be3a38a8711d749372f968dac22">getActivePeers</a>(toSkip, total, disabled, enabledInSkip);</div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> JLOG(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#af9f9ddea045cd3ef7b27d700f9962dd0">journal_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> &lt;&lt; <span class="stringliteral">&quot;not relaying tx, total peers &quot;</span> &lt;&lt; peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p : peers)</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> p-&gt;addTxQueue(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/hash.html">hash</a>);</div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> }</div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> </div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> <span class="keyword">auto</span>&amp; txn = tx-&gt;get();</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> <span class="keyword">auto</span> <span class="keyword">const</span> sm = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared&lt;Message&gt;</a>(txn, protocol::mtTRANSACTION);</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> peers = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a2eb13be3a38a8711d749372f968dac22">getActivePeers</a>(toSkip, total, disabled, enabledInSkip);</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <span class="keyword">auto</span> <span class="keyword">const</span> minRelay = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a571b13011e10271dd2c5c010106389d8">TX_REDUCE_RELAY_MIN_PEERS</a> + disabled;</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> </div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a83ff989bc69d931321cc8efaecbb1c0c">TX_REDUCE_RELAY_ENABLE</a> || total &lt;= minRelay)</div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> {</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p : peers)</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> p-&gt;send(sm);</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a83ff989bc69d931321cc8efaecbb1c0c">TX_REDUCE_RELAY_ENABLE</a> ||</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a9433d2b86e6e37bfcec0066ba608d354">TX_REDUCE_RELAY_METRICS</a>)</div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a6fcecedab437fc1bf8ab7e7bbf87f866">txMetrics_</a>.<a class="code hl_function" href="structripple_1_1metrics_1_1TxMetrics.html#adfcd86c34470bc336f8623e1d1130e74">addMetrics</a>(total, toSkip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/size.html">size</a>(), 0);</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> }</div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> </div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> <span class="comment">// We have more peers than the minimum (disabled + minimum enabled),</span></div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> <span class="comment">// relay to all disabled and some randomly selected enabled that</span></div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> <span class="comment">// do not have the transaction.</span></div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> <span class="keyword">auto</span> <span class="keyword">const</span> enabledTarget = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a571b13011e10271dd2c5c010106389d8">TX_REDUCE_RELAY_MIN_PEERS</a> +</div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> (total - minRelay) * <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">app_</a>.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#aa03bee9cf3f844d3539a85fbc2a9184a">TX_RELAY_PERCENTAGE</a> / 100;</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> </div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <span class="comment">// count skipped peers with the enabled feature towards the quota</span></div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> enabledAndRelayed = enabledInSkip;</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p : peers)</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> {</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> <span class="comment">// always relay to a peer with the disabled feature</span></div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordflow">if</span> (!p-&gt;txReduceRelayEnabled())</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> {</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> p-&gt;send(sm);</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> }</div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (enabledAndRelayed &lt; enabledTarget)</div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> {</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> enabledAndRelayed++;</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> p-&gt;send(sm);</div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> }</div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a6fcecedab437fc1bf8ab7e7bbf87f866">txMetrics_</a>.<a class="code hl_function" href="structripple_1_1metrics_1_1TxMetrics.html#adfcd86c34470bc336f8623e1d1130e74">addMetrics</a>(enabledTarget, toSkip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/size.html">size</a>(), disabled);</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> </div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">if</span> (enabledTarget &gt; enabledInSkip)</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/random_shuffle.html">std::shuffle</a>(peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/begin.html">begin</a>(), peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/end.html">end</a>(), <a class="code hl_function" href="namespaceripple.html#afe66a903fefc1f0613602efe9e2283de">default_prng</a>());</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> </div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> JLOG(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#af9f9ddea045cd3ef7b27d700f9962dd0">journal_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;relaying tx, total peers &quot;</span> &lt;&lt; peers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>()</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> &lt;&lt; <span class="stringliteral">&quot; selected &quot;</span> &lt;&lt; enabledTarget &lt;&lt; <span class="stringliteral">&quot; skip &quot;</span></div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> &lt;&lt; toSkip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/size.html">size</a>() &lt;&lt; <span class="stringliteral">&quot; disabled &quot;</span> &lt;&lt; disabled;</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> </div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">// count skipped peers with the enabled feature towards the quota</span></div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> enabledAndRelayed = enabledInSkip;</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p : peers)</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> {</div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> <span class="comment">// always relay to a peer with the disabled feature</span></div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> <span class="keywordflow">if</span> (!p-&gt;txReduceRelayEnabled())</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> {</div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> p-&gt;addTxQueue(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/hash.html">hash</a>);</div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> p-&gt;send(sm);</div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> }</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> }</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span>}</div>
</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> </div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span><span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> </div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01306" data-start="{" data-end="}">
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#ad3726924d0019413711a2b6876bf788f"> 1306</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a8314d9411ae5be655929354317b4693b">OverlayImpl::remove</a>(<a class="code hl_class" href="classripple_1_1OverlayImpl_1_1Child.html">Child</a>&amp; child)</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span>{</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a7df56f21d09513351c98a973f4022836">mutex_</a>);</div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>.erase(&amp;child);</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>.empty())</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a1da818e5fc573a9dafecaa0dfb2a648a">cond_</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/thread/condition_variable_any/notify_all.html">notify_all</a>();</div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span>}</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (enabledAndRelayed &lt; enabledTarget)</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> {</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> enabledAndRelayed++;</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> p-&gt;send(sm);</div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> }</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> {</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> p-&gt;addTxQueue(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/hash.html">hash</a>);</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> }</div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> }</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span>}</div>
</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> </div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span><span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> </div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01315" data-start="{" data-end="}">
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a3c3a10e068fa7d1d99050e37e550481b"> 1315</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a3c3a10e068fa7d1d99050e37e550481b">OverlayImpl::stopChildren</a>()</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#ad3726924d0019413711a2b6876bf788f"> 1315</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a8314d9411ae5be655929354317b4693b">OverlayImpl::remove</a>(<a class="code hl_class" href="classripple_1_1OverlayImpl_1_1Child.html">Child</a>&amp; child)</div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span>{</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> <span class="comment">// Calling list_[].second-&gt;stop() may cause list_ to be modified</span></div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> <span class="comment">// (OverlayImpl::remove() may be called on this same thread). So</span></div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> <span class="comment">// iterating directly over list_ to call child-&gt;stop() could lead to</span></div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> <span class="comment">// undefined behavior.</span></div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> <span class="comment">//</span></div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> <span class="comment">// Therefore we copy all of the weak/shared ptrs out of list_ before we</span></div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="comment">// start calling stop() on them. That guarantees OverlayImpl::remove()</span></div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">// won&#39;t be called until vector&lt;&gt; children leaves scope.</span></div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::shared_ptr&lt;Child&gt;</a>&gt; children;</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> {</div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a7df56f21d09513351c98a973f4022836">mutex_</a>);</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a00ee91c4b61c0f04dcf1476ce55bc215">work_</a>)</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a00ee91c4b61c0f04dcf1476ce55bc215">work_</a> = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> </div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> children.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>.size());</div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; element : <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>)</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> {</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> children.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">emplace_back</a>(element.second.lock());</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> }</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> } <span class="comment">// lock released</span></div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> </div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; child : children)</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> {</div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> <span class="keywordflow">if</span> (child != <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> child-&gt;stop();</div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> }</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span>}</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a7df56f21d09513351c98a973f4022836">mutex_</a>);</div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>.erase(&amp;child);</div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>.empty())</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a1da818e5fc573a9dafecaa0dfb2a648a">cond_</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/thread/condition_variable_any/notify_all.html">notify_all</a>();</div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span>}</div>
</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> </div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01347" data-start="{" data-end="}">
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#ac9dcdbe7f5e3cdb19fa1c7d71538556b"> 1347</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac9dcdbe7f5e3cdb19fa1c7d71538556b">OverlayImpl::autoConnect</a>()</div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span>{</div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> <span class="keyword">auto</span> <span class="keyword">const</span> result = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#ac68cea45e3ecdc66943099632d2c8621">m_peerFinder</a>-&gt;autoconnect();</div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> addr : result)</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac74b1afabc6ab8f758a2566d51c51e36">connect</a>(addr);</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span>}</div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> </div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01324" data-start="{" data-end="}">
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a3c3a10e068fa7d1d99050e37e550481b"> 1324</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a3c3a10e068fa7d1d99050e37e550481b">OverlayImpl::stopChildren</a>()</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span>{</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> <span class="comment">// Calling list_[].second-&gt;stop() may cause list_ to be modified</span></div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> <span class="comment">// (OverlayImpl::remove() may be called on this same thread). So</span></div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> <span class="comment">// iterating directly over list_ to call child-&gt;stop() could lead to</span></div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">// undefined behavior.</span></div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> <span class="comment">//</span></div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> <span class="comment">// Therefore we copy all of the weak/shared ptrs out of list_ before we</span></div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> <span class="comment">// start calling stop() on them. That guarantees OverlayImpl::remove()</span></div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> <span class="comment">// won&#39;t be called until vector&lt;&gt; children leaves scope.</span></div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::shared_ptr&lt;Child&gt;</a>&gt; children;</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> {</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a7df56f21d09513351c98a973f4022836">mutex_</a>);</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a00ee91c4b61c0f04dcf1476ce55bc215">work_</a>)</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a00ee91c4b61c0f04dcf1476ce55bc215">work_</a> = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> </div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> children.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>.size());</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; element : <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">list_</a>)</div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> {</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> children.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">emplace_back</a>(element.second.lock());</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> }</div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> } <span class="comment">// lock released</span></div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> </div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; child : children)</div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> {</div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <span class="keywordflow">if</span> (child != <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> child-&gt;stop();</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> }</div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span>}</div>
</div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> </div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01355" data-start="{" data-end="}">
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a80a5c09b232c3fc6d872f53206c34ed1"> 1355</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a80a5c09b232c3fc6d872f53206c34ed1">OverlayImpl::sendEndpoints</a>()</div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span>{</div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> <span class="keyword">auto</span> <span class="keyword">const</span> result = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#ac68cea45e3ecdc66943099632d2c8621">m_peerFinder</a>-&gt;buildEndpointsForPeers();</div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; e : result)</div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> {</div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;PeerImp&gt;</a> peer;</div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> {</div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a7df56f21d09513351c98a973f4022836">mutex_</a>);</div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> <span class="keyword">auto</span> <span class="keyword">const</span> iter = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a31b9fcb4a7968e9836b3723763527f25">m_peers</a>.find(e.first);</div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordflow">if</span> (iter != <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a31b9fcb4a7968e9836b3723763527f25">m_peers</a>.end())</div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> peer = iter-&gt;second.lock();</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> }</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> <span class="keywordflow">if</span> (peer)</div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> peer-&gt;sendEndpoints(e.second.begin(), e.second.end());</div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> }</div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span>}</div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> </div>
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01356" data-start="{" data-end="}">
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#ac9dcdbe7f5e3cdb19fa1c7d71538556b"> 1356</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac9dcdbe7f5e3cdb19fa1c7d71538556b">OverlayImpl::autoConnect</a>()</div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span>{</div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> <span class="keyword">auto</span> <span class="keyword">const</span> result = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#ac68cea45e3ecdc66943099632d2c8621">m_peerFinder</a>-&gt;autoconnect();</div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> addr : result)</div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac74b1afabc6ab8f758a2566d51c51e36">connect</a>(addr);</div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span>}</div>
</div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> </div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01373" data-start="{" data-end="}">
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a8bbec612a0dcbaad4916115b95d3b237"> 1373</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a8bbec612a0dcbaad4916115b95d3b237">OverlayImpl::sendTxQueue</a>()</div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span>{</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#aa19d6ef2edeaea889ff6199f82747bcc">for_each</a>([](<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p) {</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> <span class="keywordflow">if</span> (p-&gt;txReduceRelayEnabled())</div>
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span> p-&gt;sendTxQueue();</div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> });</div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> </div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01364" data-start="{" data-end="}">
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a80a5c09b232c3fc6d872f53206c34ed1"> 1364</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a80a5c09b232c3fc6d872f53206c34ed1">OverlayImpl::sendEndpoints</a>()</div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span>{</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> <span class="keyword">auto</span> <span class="keyword">const</span> result = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#ac68cea45e3ecdc66943099632d2c8621">m_peerFinder</a>-&gt;buildEndpointsForPeers();</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; e : result)</div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> {</div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;PeerImp&gt;</a> peer;</div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> {</div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> lock(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a7df56f21d09513351c98a973f4022836">mutex_</a>);</div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> <span class="keyword">auto</span> <span class="keyword">const</span> iter = <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a31b9fcb4a7968e9836b3723763527f25">m_peers</a>.find(e.first);</div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> <span class="keywordflow">if</span> (iter != <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a31b9fcb4a7968e9836b3723763527f25">m_peers</a>.end())</div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> peer = iter-&gt;second.lock();</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> }</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> <span class="keywordflow">if</span> (peer)</div>
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span> peer-&gt;sendEndpoints(e.second.begin(), e.second.end());</div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> }</div>
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span>}</div>
</div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> </div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Message&gt;</a></div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01382" data-start="{" data-end="}">
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"><a class="line" href="namespaceripple.html#a7962f193209fd4b998404850694d8514"> 1382</a></span><a class="code hl_function" href="namespaceripple.html#a7962f193209fd4b998404850694d8514">makeSquelchMessage</a>(</div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespaceripple.html#af5659b42b02bf5cb8c8dfdbf8d496c74">squelch</a>,</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">uint32_t</a> squelchDuration)</div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span>{</div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> protocol::TMSquelch m;</div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> m.set_squelch(<a class="code hl_function" href="namespaceripple.html#af5659b42b02bf5cb8c8dfdbf8d496c74">squelch</a>);</div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> m.set_validatorpubkey(validator.data(), validator.size());</div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#af5659b42b02bf5cb8c8dfdbf8d496c74">squelch</a>)</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> m.set_squelchduration(squelchDuration);</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared&lt;Message&gt;</a>(m, protocol::mtSQUELCH);</div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span>}</div>
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a8bbec612a0dcbaad4916115b95d3b237"> 1382</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a8bbec612a0dcbaad4916115b95d3b237">OverlayImpl::sendTxQueue</a>()</div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span>{</div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#aa19d6ef2edeaea889ff6199f82747bcc">for_each</a>([](<span class="keyword">auto</span> <span class="keyword">const</span>&amp; p) {</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> <span class="keywordflow">if</span> (p-&gt;txReduceRelayEnabled())</div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> p-&gt;sendTxQueue();</div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> });</div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span>}</div>
</div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> </div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01396" data-start="{" data-end="}">
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a9bffa5dc79c7be0b7c4c75cce173ad2a"> 1396</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a9bffa5dc79c7be0b7c4c75cce173ad2a">OverlayImpl::unsquelch</a>(<a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span><span class="keyword"></span>{</div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> peer = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a534b616d5493147c3eb197af4f3f7cf1">findPeerByShortID</a>(<span class="keywordtype">id</span>); peer)</div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> {</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> <span class="comment">// optimize - multiple message with different</span></div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <span class="comment">// validator might be sent to the same peer</span></div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> peer-&gt;send(<a class="code hl_function" href="namespaceripple.html#a7962f193209fd4b998404850694d8514">makeSquelchMessage</a>(validator, <span class="keyword">false</span>, 0));</div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> }</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span>}</div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> </div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Message&gt;</a></div>
<div class="foldopen" id="foldopen01391" data-start="{" data-end="}">
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"><a class="line" href="namespaceripple.html#a7962f193209fd4b998404850694d8514"> 1391</a></span><a class="code hl_function" href="namespaceripple.html#a7962f193209fd4b998404850694d8514">makeSquelchMessage</a>(</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespaceripple.html#af5659b42b02bf5cb8c8dfdbf8d496c74">squelch</a>,</div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">uint32_t</a> squelchDuration)</div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span>{</div>
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> protocol::TMSquelch m;</div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> m.set_squelch(<a class="code hl_function" href="namespaceripple.html#af5659b42b02bf5cb8c8dfdbf8d496c74">squelch</a>);</div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> m.set_validatorpubkey(validator.data(), validator.size());</div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#af5659b42b02bf5cb8c8dfdbf8d496c74">squelch</a>)</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> m.set_squelchduration(squelchDuration);</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared&lt;Message&gt;</a>(m, protocol::mtSQUELCH);</div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span>}</div>
</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> </div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01407" data-start="{" data-end="}">
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a4af02b1675b8d13ceb9ea72d031906f6"> 1407</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a4af02b1675b8d13ceb9ea72d031906f6">OverlayImpl::squelch</a>(</div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> <span class="keywordtype">id</span>,</div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">uint32_t</a> squelchDuration)<span class="keyword"> const</span></div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span><span class="keyword"></span>{</div>
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> peer = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a534b616d5493147c3eb197af4f3f7cf1">findPeerByShortID</a>(<span class="keywordtype">id</span>); peer)</div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> {</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> peer-&gt;send(<a class="code hl_function" href="namespaceripple.html#a7962f193209fd4b998404850694d8514">makeSquelchMessage</a>(validator, <span class="keyword">true</span>, squelchDuration));</div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> }</div>
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span>}</div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> </div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01405" data-start="{" data-end="}">
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a9bffa5dc79c7be0b7c4c75cce173ad2a"> 1405</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a9bffa5dc79c7be0b7c4c75cce173ad2a">OverlayImpl::unsquelch</a>(<a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span><span class="keyword"></span>{</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> peer = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a534b616d5493147c3eb197af4f3f7cf1">findPeerByShortID</a>(<span class="keywordtype">id</span>); peer)</div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> {</div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> <span class="comment">// optimize - multiple message with different</span></div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> <span class="comment">// validator might be sent to the same peer</span></div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> peer-&gt;send(<a class="code hl_function" href="namespaceripple.html#a7962f193209fd4b998404850694d8514">makeSquelchMessage</a>(validator, <span class="keyword">false</span>, 0));</div>
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> }</div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span>}</div>
</div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> </div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01419" data-start="{" data-end="}">
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5"> 1419</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">OverlayImpl::updateSlotAndSquelch</a>(</div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; key,</div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">std::set&lt;Peer::id_t&gt;</a>&amp;&amp; peers,</div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> protocol::MessageType type)</div>
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span>{</div>
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.baseSquelchReady())</div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> </div>
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>.running_in_this_thread())</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <span class="keywordflow">return</span> post(</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>,</div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <span class="comment">// Must capture copies of reference parameters (i.e. key, validator)</span></div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> [<span class="keyword">this</span>,</div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> key = key,</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> validator = validator,</div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> peers = std::move(peers),</div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> type]() <span class="keyword">mutable</span> {</div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">updateSlotAndSquelch</a>(key, validator, std::move(peers), type);</div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> });</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> </div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keywordtype">id</span> : peers)</div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.updateSlotAndSquelch(key, validator, <span class="keywordtype">id</span>, type, [&amp;]() {</div>
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac2075504b47e3bae8cfc41850fe8ce9a">reportInboundTraffic</a>(<a class="code hl_enumvalue" href="classripple_1_1TrafficCount.html#adbaee77c7a063c9aac783e54594aeda7a3d8952692d4bd64cfa191583257cf404">TrafficCount::squelch_ignored</a>, 0);</div>
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> });</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span>}</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> </div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01416" data-start="{" data-end="}">
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a4af02b1675b8d13ceb9ea72d031906f6"> 1416</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a4af02b1675b8d13ceb9ea72d031906f6">OverlayImpl::squelch</a>(</div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> <span class="keywordtype">id</span>,</div>
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">uint32_t</a> squelchDuration)<span class="keyword"> const</span></div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span><span class="keyword"></span>{</div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> peer = <a class="code hl_function" href="classripple_1_1OverlayImpl.html#a534b616d5493147c3eb197af4f3f7cf1">findPeerByShortID</a>(<span class="keywordtype">id</span>); peer)</div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> {</div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> peer-&gt;send(<a class="code hl_function" href="namespaceripple.html#a7962f193209fd4b998404850694d8514">makeSquelchMessage</a>(validator, <span class="keyword">true</span>, squelchDuration));</div>
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> }</div>
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span>}</div>
</div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> </div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01447" data-start="{" data-end="}">
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#ae8ae1a439f05f146899a17597f06b7a9"> 1447</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">OverlayImpl::updateSlotAndSquelch</a>(</div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; key,</div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> peer,</div>
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> protocol::MessageType type)</div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span>{</div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.baseSquelchReady())</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span> </div>
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>.running_in_this_thread())</div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> <span class="keywordflow">return</span> post(</div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>,</div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span> <span class="comment">// Must capture copies of reference parameters (i.e. key, validator)</span></div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> [<span class="keyword">this</span>, key = key, validator = validator, peer, type]() {</div>
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">updateSlotAndSquelch</a>(key, validator, peer, type);</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span> });</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span> </div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.updateSlotAndSquelch(key, validator, peer, type, [&amp;]() {</div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac2075504b47e3bae8cfc41850fe8ce9a">reportInboundTraffic</a>(<a class="code hl_enumvalue" href="classripple_1_1TrafficCount.html#adbaee77c7a063c9aac783e54594aeda7a3d8952692d4bd64cfa191583257cf404">TrafficCount::squelch_ignored</a>, 0);</div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> });</div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span>}</div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> </div>
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01428" data-start="{" data-end="}">
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5"> 1428</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">OverlayImpl::updateSlotAndSquelch</a>(</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; key,</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">std::set&lt;Peer::id_t&gt;</a>&amp;&amp; peers,</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> protocol::MessageType type)</div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span>{</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.baseSquelchReady())</div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> </div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>.running_in_this_thread())</div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> <span class="keywordflow">return</span> post(</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>,</div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> <span class="comment">// Must capture copies of reference parameters (i.e. key, validator)</span></div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> [<span class="keyword">this</span>,</div>
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> key = key,</div>
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> validator = validator,</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> peers = std::move(peers),</div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> type]() <span class="keyword">mutable</span> {</div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">updateSlotAndSquelch</a>(key, validator, std::move(peers), type);</div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> });</div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> </div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keywordtype">id</span> : peers)</div>
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.updateSlotAndSquelch(key, validator, <span class="keywordtype">id</span>, type, [&amp;]() {</div>
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac2075504b47e3bae8cfc41850fe8ce9a">reportInboundTraffic</a>(<a class="code hl_enumvalue" href="classripple_1_1TrafficCount.html#adbaee77c7a063c9aac783e54594aeda7a3d8952692d4bd64cfa191583257cf404">TrafficCount::squelch_ignored</a>, 0);</div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> });</div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span>}</div>
</div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> </div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01470" data-start="{" data-end="}">
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9"> 1470</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9">OverlayImpl::deletePeer</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> <span class="keywordtype">id</span>)</div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span>{</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>.running_in_this_thread())</div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> <span class="keywordflow">return</span> post(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>, <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/functional/bind.html">std::bind</a>(&amp;<a class="code hl_function" href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9">OverlayImpl::deletePeer</a>, <span class="keyword">this</span>, <span class="keywordtype">id</span>));</div>
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> </div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.deletePeer(<span class="keywordtype">id</span>, <span class="keyword">true</span>);</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> </div>
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01456" data-start="{" data-end="}">
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#ae8ae1a439f05f146899a17597f06b7a9"> 1456</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">OverlayImpl::updateSlotAndSquelch</a>(</div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; key,</div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; validator,</div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> peer,</div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> protocol::MessageType type)</div>
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span>{</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.baseSquelchReady())</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span> </div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>.running_in_this_thread())</div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> <span class="keywordflow">return</span> post(</div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>,</div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> <span class="comment">// Must capture copies of reference parameters (i.e. key, validator)</span></div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span> [<span class="keyword">this</span>, key = key, validator = validator, peer, type]() {</div>
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">updateSlotAndSquelch</a>(key, validator, peer, type);</div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> });</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> </div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.updateSlotAndSquelch(key, validator, peer, type, [&amp;]() {</div>
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> <a class="code hl_function" href="classripple_1_1OverlayImpl.html#ac2075504b47e3bae8cfc41850fe8ce9a">reportInboundTraffic</a>(<a class="code hl_enumvalue" href="classripple_1_1TrafficCount.html#adbaee77c7a063c9aac783e54594aeda7a3d8952692d4bd64cfa191583257cf404">TrafficCount::squelch_ignored</a>, 0);</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> });</div>
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span>}</div>
</div>
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> </div>
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01479" data-start="{" data-end="}">
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06"> 1479</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06">OverlayImpl::deleteIdlePeers</a>()</div>
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9"> 1479</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9">OverlayImpl::deletePeer</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">Peer::id_t</a> <span class="keywordtype">id</span>)</div>
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span>{</div>
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>.running_in_this_thread())</div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> <span class="keywordflow">return</span> post(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>, <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/functional/bind.html">std::bind</a>(&amp;<a class="code hl_function" href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06">OverlayImpl::deleteIdlePeers</a>, <span class="keyword">this</span>));</div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> <span class="keywordflow">return</span> post(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>, <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/functional/bind.html">std::bind</a>(&amp;<a class="code hl_function" href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9">OverlayImpl::deletePeer</a>, <span class="keyword">this</span>, <span class="keywordtype">id</span>));</div>
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span> </div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.deleteIdlePeers();</div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.deletePeer(<span class="keywordtype">id</span>, <span class="keyword">true</span>);</div>
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span>}</div>
</div>
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span> </div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span><span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> </div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span><a class="code hl_struct" href="structripple_1_1Overlay_1_1Setup.html">Overlay::Setup</a></div>
<div class="foldopen" id="foldopen01490" data-start="{" data-end="}">
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"><a class="line" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1"> 1490</a></span><a class="code hl_function" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">setup_Overlay</a>(<a class="code hl_class" href="classripple_1_1BasicConfig.html">BasicConfig</a> <span class="keyword">const</span>&amp; config)</div>
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span>{</div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> <a class="code hl_struct" href="structripple_1_1Overlay_1_1Setup.html">Overlay::Setup</a> setup;</div>
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> </div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span> {</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; section = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;overlay&quot;</span>);</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a577378193620d0cbea0287dc0c091517">context</a> = <a class="code hl_function" href="namespaceripple.html#a75121fd263018f521eb29d1b5a07eb69">make_SSLContext</a>(<span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01488" data-start="{" data-end="}">
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"><a class="line" href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06"> 1488</a></span><a class="code hl_function" href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06">OverlayImpl::deleteIdlePeers</a>()</div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span>{</div>
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>.running_in_this_thread())</div>
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span> <span class="keywordflow">return</span> post(<a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">strand_</a>, <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/functional/bind.html">std::bind</a>(&amp;<a class="code hl_function" href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06">OverlayImpl::deleteIdlePeers</a>, <span class="keyword">this</span>));</div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> </div>
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> <a class="code hl_variable" href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">slots_</a>.deleteIdlePeers();</div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span>}</div>
</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> </div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span><span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span> </div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">set</a>(setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a80250951d1e867a2cdc1cb3f4ed6d8a1">ipLimit</a>, <span class="stringliteral">&quot;ip_limit&quot;</span>, section);</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> <span class="keywordflow">if</span> (setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a80250951d1e867a2cdc1cb3f4ed6d8a1">ipLimit</a> &lt; 0)</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> Throw&lt;std::runtime_error&gt;(<span class="stringliteral">&quot;Configured IP limit is invalid&quot;</span>);</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> </div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> ip;</div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">set</a>(ip, <span class="stringliteral">&quot;public_ip&quot;</span>, section);</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> <span class="keywordflow">if</span> (!ip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/empty.html">empty</a>())</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> {</div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> boost::system::error_code ec;</div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a1daa5adbe86c923b144b75f536d64d2c">public_ip</a> = boost::asio::ip::make_address(ip, ec);</div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> <span class="keywordflow">if</span> (ec || <a class="code hl_function" href="namespacebeast_1_1IP.html#add9a8c02dc97dce0e0676c662b697f45">beast::IP::is_private</a>(setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a1daa5adbe86c923b144b75f536d64d2c">public_ip</a>))</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> Throw&lt;std::runtime_error&gt;(<span class="stringliteral">&quot;Configured public IP is invalid&quot;</span>);</div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> }</div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> }</div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> </div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> {</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; section = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;crawl&quot;</span>);</div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; values = section.<a class="code hl_function" href="classripple_1_1Section.html#ab5174adf8d37057817e90eb7adeaf7c3">values</a>();</div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> </div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> <span class="keywordflow">if</span> (values.size() &gt; 1)</div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> {</div>
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> Throw&lt;std::runtime_error&gt;(</div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span> <span class="stringliteral">&quot;Configured [crawl] section is invalid, too many values&quot;</span>);</div>
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> }</div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> </div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> <span class="keywordtype">bool</span> crawlEnabled = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> </div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> <span class="comment">// Only allow &quot;0|1&quot; as a value</span></div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> <span class="keywordflow">if</span> (values.size() == 1)</div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span><a class="code hl_struct" href="structripple_1_1Overlay_1_1Setup.html">Overlay::Setup</a></div>
<div class="foldopen" id="foldopen01499" data-start="{" data-end="}">
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"><a class="line" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1"> 1499</a></span><a class="code hl_function" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">setup_Overlay</a>(<a class="code hl_class" href="classripple_1_1BasicConfig.html">BasicConfig</a> <span class="keyword">const</span>&amp; config)</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span>{</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> <a class="code hl_struct" href="structripple_1_1Overlay_1_1Setup.html">Overlay::Setup</a> setup;</div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> </div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> {</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; section = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;overlay&quot;</span>);</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a577378193620d0cbea0287dc0c091517">context</a> = <a class="code hl_function" href="namespaceripple.html#a75121fd263018f521eb29d1b5a07eb69">make_SSLContext</a>(<span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> </div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">set</a>(setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a80250951d1e867a2cdc1cb3f4ed6d8a1">ipLimit</a>, <span class="stringliteral">&quot;ip_limit&quot;</span>, section);</div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> <span class="keywordflow">if</span> (setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a80250951d1e867a2cdc1cb3f4ed6d8a1">ipLimit</a> &lt; 0)</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> Throw&lt;std::runtime_error&gt;(<span class="stringliteral">&quot;Configured IP limit is invalid&quot;</span>);</div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> </div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> ip;</div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">set</a>(ip, <span class="stringliteral">&quot;public_ip&quot;</span>, section);</div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> <span class="keywordflow">if</span> (!ip.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/empty.html">empty</a>())</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> {</div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> boost::system::error_code ec;</div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a1daa5adbe86c923b144b75f536d64d2c">public_ip</a> = boost::asio::ip::make_address(ip, ec);</div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> <span class="keywordflow">if</span> (ec || <a class="code hl_function" href="namespacebeast_1_1IP.html#add9a8c02dc97dce0e0676c662b697f45">beast::IP::is_private</a>(setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a1daa5adbe86c923b144b75f536d64d2c">public_ip</a>))</div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> Throw&lt;std::runtime_error&gt;(<span class="stringliteral">&quot;Configured public IP is invalid&quot;</span>);</div>
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> }</div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span> }</div>
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> </div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> {</div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; section = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;crawl&quot;</span>);</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; values = section.<a class="code hl_function" href="classripple_1_1Section.html#ab5174adf8d37057817e90eb7adeaf7c3">values</a>();</div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> </div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> <span class="keywordflow">if</span> (values.size() &gt; 1)</div>
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span> {</div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> {</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> crawlEnabled = boost::lexical_cast&lt;bool&gt;(values.front());</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> }</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> <span class="keywordflow">catch</span> (boost::bad_lexical_cast <span class="keyword">const</span>&amp;)</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> {</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> Throw&lt;std::runtime_error&gt;(</div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> <span class="stringliteral">&quot;Configured [crawl] section has invalid value: &quot;</span> +</div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> values.front());</div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> }</div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> }</div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> </div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> <span class="keywordflow">if</span> (crawlEnabled)</div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> {</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;overlay&quot;</span>, <span class="keyword">true</span>))</div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> {</div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa1271a017d6478a90750e5b2141279eac">CrawlOptions::Overlay</a>;</div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> }</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;server&quot;</span>, <span class="keyword">true</span>))</div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> {</div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa423358ab70da686bed8972314f8abc68">CrawlOptions::ServerInfo</a>;</div>
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span> }</div>
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;counts&quot;</span>, <span class="keyword">false</span>))</div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> {</div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa002498907e85bf42f9c5eeb3ce3d60f0">CrawlOptions::ServerCounts</a>;</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> }</div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;unl&quot;</span>, <span class="keyword">true</span>))</div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> {</div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa9fc0f14569b810a6755d2fce24026a09">CrawlOptions::Unl</a>;</div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> }</div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> }</div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> }</div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span> {</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; section = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;vl&quot;</span>);</div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span> </div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">set</a>(setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a0970167cd828eb7788090da18a4ea858">vlEnabled</a>, <span class="stringliteral">&quot;enabled&quot;</span>, section);</div>
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span> }</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> </div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span> {</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span> <span class="keyword">auto</span> <span class="keywordtype">id</span> = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#ae2c21d011e6424d4917db175ef9df301">legacy</a>(<span class="stringliteral">&quot;network_id&quot;</span>);</div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> </div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> <span class="keywordflow">if</span> (!<span class="keywordtype">id</span>.empty())</div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span> {</div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">&quot;main&quot;</span>)</div>
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"> 1573</span> <span class="keywordtype">id</span> = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> Throw&lt;std::runtime_error&gt;(</div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> <span class="stringliteral">&quot;Configured [crawl] section is invalid, too many values&quot;</span>);</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> }</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> </div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> <span class="keywordtype">bool</span> crawlEnabled = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> </div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> <span class="comment">// Only allow &quot;0|1&quot; as a value</span></div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> <span class="keywordflow">if</span> (values.size() == 1)</div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> {</div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> {</div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> crawlEnabled = boost::lexical_cast&lt;bool&gt;(values.front());</div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> }</div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> <span class="keywordflow">catch</span> (boost::bad_lexical_cast <span class="keyword">const</span>&amp;)</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> {</div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> Throw&lt;std::runtime_error&gt;(</div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> <span class="stringliteral">&quot;Configured [crawl] section has invalid value: &quot;</span> +</div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> values.front());</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> }</div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> }</div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> </div>
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span> <span class="keywordflow">if</span> (crawlEnabled)</div>
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> {</div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;overlay&quot;</span>, <span class="keyword">true</span>))</div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> {</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa1271a017d6478a90750e5b2141279eac">CrawlOptions::Overlay</a>;</div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> }</div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;server&quot;</span>, <span class="keyword">true</span>))</div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> {</div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa423358ab70da686bed8972314f8abc68">CrawlOptions::ServerInfo</a>;</div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> }</div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;counts&quot;</span>, <span class="keyword">false</span>))</div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span> {</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa002498907e85bf42f9c5eeb3ce3d60f0">CrawlOptions::ServerCounts</a>;</div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span> }</div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> <span class="keywordflow">if</span> (get&lt;bool&gt;(section, <span class="stringliteral">&quot;unl&quot;</span>, <span class="keyword">true</span>))</div>
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span> {</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a3607428158b0c6dfdf6a5984b6842167">crawlOptions</a> |= <a class="code hl_enumvalue" href="namespaceripple_1_1CrawlOptions.html#a88da1dd344ca0dc87a10a49f34fa38daa9fc0f14569b810a6755d2fce24026a09">CrawlOptions::Unl</a>;</div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> }</div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span> }</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span> }</div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> {</div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; section = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;vl&quot;</span>);</div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span> </div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">set</a>(setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#a0970167cd828eb7788090da18a4ea858">vlEnabled</a>, <span class="stringliteral">&quot;enabled&quot;</span>, section);</div>
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"> 1573</span> }</div>
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span> </div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">&quot;testnet&quot;</span>)</div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> <span class="keywordtype">id</span> = <span class="stringliteral">&quot;1&quot;</span>;</div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> </div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">&quot;devnet&quot;</span>)</div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> <span class="keywordtype">id</span> = <span class="stringliteral">&quot;2&quot;</span>;</div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> </div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#ac68b28ee8460342bd7943ff04fb360d5">networkID</a> = beast::lexicalCastThrow&lt;std::uint32_t&gt;(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> }</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> }</div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> <span class="keywordflow">catch</span> (...)</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> {</div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> Throw&lt;std::runtime_error&gt;(</div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> <span class="stringliteral">&quot;Configured [network_id] section is invalid: must be a number &quot;</span></div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> <span class="stringliteral">&quot;or one of the strings &#39;main&#39;, &#39;testnet&#39; or &#39;devnet&#39;.&quot;</span>);</div>
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> }</div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> </div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> <span class="keywordflow">return</span> setup;</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span>}</div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> {</div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> <span class="keyword">auto</span> <span class="keywordtype">id</span> = config.<a class="code hl_function" href="classripple_1_1BasicConfig.html#ae2c21d011e6424d4917db175ef9df301">legacy</a>(<span class="stringliteral">&quot;network_id&quot;</span>);</div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> </div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> <span class="keywordflow">if</span> (!<span class="keywordtype">id</span>.empty())</div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> {</div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">&quot;main&quot;</span>)</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> <span class="keywordtype">id</span> = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> </div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">&quot;testnet&quot;</span>)</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> <span class="keywordtype">id</span> = <span class="stringliteral">&quot;1&quot;</span>;</div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> </div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">&quot;devnet&quot;</span>)</div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> <span class="keywordtype">id</span> = <span class="stringliteral">&quot;2&quot;</span>;</div>
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> </div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> setup.<a class="code hl_variable" href="structripple_1_1Overlay_1_1Setup.html#ac68b28ee8460342bd7943ff04fb360d5">networkID</a> = beast::lexicalCastThrow&lt;std::uint32_t&gt;(<span class="keywordtype">id</span>);</div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> }</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> }</div>
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span> <span class="keywordflow">catch</span> (...)</div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> {</div>
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span> Throw&lt;std::runtime_error&gt;(</div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span> <span class="stringliteral">&quot;Configured [network_id] section is invalid: must be a number &quot;</span></div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> <span class="stringliteral">&quot;or one of the strings &#39;main&#39;, &#39;testnet&#39; or &#39;devnet&#39;.&quot;</span>);</div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> }</div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span> </div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span> <span class="keywordflow">return</span> setup;</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span>}</div>
</div>
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span> </div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr&lt;Overlay&gt;</a></div>
<div class="foldopen" id="foldopen01595" data-start="{" data-end="}">
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"><a class="line" href="namespaceripple.html#acdd9d0afaa4d6eee0c0f243f15c6298f"> 1595</a></span><a class="code hl_function" href="namespaceripple.html#acdd9d0afaa4d6eee0c0f243f15c6298f">make_Overlay</a>(</div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span> <a class="code hl_class" href="classripple_1_1Application.html">Application</a>&amp; app,</div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> <a class="code hl_struct" href="structripple_1_1Overlay_1_1Setup.html">Overlay::Setup</a> <span class="keyword">const</span>&amp; setup,</div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> <a class="code hl_class" href="classripple_1_1ServerHandler.html">ServerHandler</a>&amp; serverHandler,</div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span> <a class="code hl_class" href="classripple_1_1Resource_1_1Manager.html">Resource::Manager</a>&amp; resourceManager,</div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span> <a class="code hl_class" href="classripple_1_1Resolver.html">Resolver</a>&amp; resolver,</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span> boost::asio::io_context&amp; io_context,</div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span> <a class="code hl_class" href="classripple_1_1BasicConfig.html">BasicConfig</a> <span class="keyword">const</span>&amp; config,</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">beast::insight::Collector::ptr</a> <span class="keyword">const</span>&amp; collector)</div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span>{</div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_unique&lt;OverlayImpl&gt;</a>(</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span> app,</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span> setup,</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> serverHandler,</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> resourceManager,</div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span> resolver,</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> io_context,</div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span> config,</div>
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span> collector);</div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span>}</div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span> </div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr&lt;Overlay&gt;</a></div>
<div class="foldopen" id="foldopen01604" data-start="{" data-end="}">
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"><a class="line" href="namespaceripple.html#acdd9d0afaa4d6eee0c0f243f15c6298f"> 1604</a></span><a class="code hl_function" href="namespaceripple.html#acdd9d0afaa4d6eee0c0f243f15c6298f">make_Overlay</a>(</div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> <a class="code hl_class" href="classripple_1_1Application.html">Application</a>&amp; app,</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span> <a class="code hl_struct" href="structripple_1_1Overlay_1_1Setup.html">Overlay::Setup</a> <span class="keyword">const</span>&amp; setup,</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span> <a class="code hl_class" href="classripple_1_1ServerHandler.html">ServerHandler</a>&amp; serverHandler,</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> <a class="code hl_class" href="classripple_1_1Resource_1_1Manager.html">Resource::Manager</a>&amp; resourceManager,</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> <a class="code hl_class" href="classripple_1_1Resolver.html">Resolver</a>&amp; resolver,</div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span> boost::asio::io_context&amp; io_context,</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> <a class="code hl_class" href="classripple_1_1BasicConfig.html">BasicConfig</a> <span class="keyword">const</span>&amp; config,</div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">beast::insight::Collector::ptr</a> <span class="keyword">const</span>&amp; collector)</div>
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span>{</div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_unique&lt;OverlayImpl&gt;</a>(</div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> app,</div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span> setup,</div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span> serverHandler,</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span> resourceManager,</div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span> resolver,</div>
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span> io_context,</div>
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"> 1621</span> config,</div>
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span> collector);</div>
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span>}</div>
</div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> </div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span>} <span class="comment">// namespace ripple</span></div>
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span> </div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span>} <span class="comment">// namespace ripple</span></div>
<div class="ttc" id="abasic_ostringstream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</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>
<div class="ttc" id="abasic_string_view_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string_view.html">std::string_view</a></div></div>
@@ -1877,7 +1886,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a1857a64f0516de9ed62deea84574ced5"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a1857a64f0516de9ed62deea84574ced5">ripple::OverlayImpl::is_upgrade</a></div><div class="ttdeci">static bool is_upgrade(boost::beast::http::header&lt; true, Fields &gt; const &amp;req)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00323">OverlayImpl.h:323</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a1da818e5fc573a9dafecaa0dfb2a648a"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a1da818e5fc573a9dafecaa0dfb2a648a">ripple::OverlayImpl::cond_</a></div><div class="ttdeci">std::condition_variable_any cond_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00110">OverlayImpl.h:110</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a20efec9ce4b1701e4a988430465cbe24"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a20efec9ce4b1701e4a988430465cbe24">ripple::OverlayImpl::onWrite</a></div><div class="ttdeci">void onWrite(beast::PropertyStream::Map &amp;stream) override</div><div class="ttdoc">Subclass override.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00585">OverlayImpl.cpp:585</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a21ecf8c5c7a9b2f9dba05b1a07b89f06"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06">ripple::OverlayImpl::deleteIdlePeers</a></div><div class="ttdeci">void deleteIdlePeers()</div><div class="ttdoc">Check if peers stopped relaying messages and if slots stopped receiving messages from the validator.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01479">OverlayImpl.cpp:1479</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a21ecf8c5c7a9b2f9dba05b1a07b89f06"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a21ecf8c5c7a9b2f9dba05b1a07b89f06">ripple::OverlayImpl::deleteIdlePeers</a></div><div class="ttdeci">void deleteIdlePeers()</div><div class="ttdoc">Check if peers stopped relaying messages and if slots stopped receiving messages from the validator.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01488">OverlayImpl.cpp:1488</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a222db6945256c0eebf01c39c572f655c"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a222db6945256c0eebf01c39c572f655c">ripple::OverlayImpl::m_resolver</a></div><div class="ttdeci">Resolver &amp; m_resolver</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00121">OverlayImpl.h:121</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a27a8da8d13b1bc7ded86ccead573eafd"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a27a8da8d13b1bc7ded86ccead573eafd">ripple::OverlayImpl::activate</a></div><div class="ttdeci">void activate(std::shared_ptr&lt; PeerImp &gt; const &amp;peer)</div><div class="ttdoc">Called when a peer has connected successfully This is called after the peer handshake has been comple...</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00607">OverlayImpl.cpp:607</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a2eb13be3a38a8711d749372f968dac22"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a2eb13be3a38a8711d749372f968dac22">ripple::OverlayImpl::getActivePeers</a></div><div class="ttdeci">PeerSequence getActivePeers() const override</div><div class="ttdoc">Returns a sequence representing the current list of peers.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01055">OverlayImpl.cpp:1055</a></div></div>
@@ -1886,14 +1895,14 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a340bd55af73ab8800735f6c3ac538817"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a340bd55af73ab8800735f6c3ac538817">ripple::OverlayImpl::add_active</a></div><div class="ttdeci">void add_active(std::shared_ptr&lt; PeerImp &gt; const &amp;peer)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00437">OverlayImpl.cpp:437</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a35852ee0ce8279aef2a36773dd861223"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a35852ee0ce8279aef2a36773dd861223">ripple::OverlayImpl::findPeerByPublicKey</a></div><div class="ttdeci">std::shared_ptr&lt; Peer &gt; findPeerByPublicKey(PublicKey const &amp;pubKey) override</div><div class="ttdoc">Returns the peer with the matching public key, or null.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01122">OverlayImpl.cpp:1122</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a3a0bf589a6364fd1bcd500d661daba6a"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a3a0bf589a6364fd1bcd500d661daba6a">ripple::OverlayImpl::m_resourceManager</a></div><div class="ttdeci">Resource::Manager &amp; m_resourceManager</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00116">OverlayImpl.h:116</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a3c3a10e068fa7d1d99050e37e550481b"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a3c3a10e068fa7d1d99050e37e550481b">ripple::OverlayImpl::stopChildren</a></div><div class="ttdeci">void stopChildren()</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01315">OverlayImpl.cpp:1315</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a3c3a10e068fa7d1d99050e37e550481b"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a3c3a10e068fa7d1d99050e37e550481b">ripple::OverlayImpl::stopChildren</a></div><div class="ttdeci">void stopChildren()</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01324">OverlayImpl.cpp:1324</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a4690e3dc0ec8663844df7c17936c238f"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a4690e3dc0ec8663844df7c17936c238f">ripple::OverlayImpl::manifestMessage_</a></div><div class="ttdeci">std::shared_ptr&lt; Message &gt; manifestMessage_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00134">OverlayImpl.h:134</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a4888f79cc6166a92dd3061621fb5d3ef"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a4888f79cc6166a92dd3061621fb5d3ef">ripple::OverlayImpl::manifestListSeq_</a></div><div class="ttdeci">std::optional&lt; std::uint32_t &gt; manifestListSeq_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00136">OverlayImpl.h:136</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a4a3360b843f3b488afc05cbd164606fd"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a4a3360b843f3b488afc05cbd164606fd">ripple::OverlayImpl::m_traffic</a></div><div class="ttdeci">TrafficCount m_traffic</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00118">OverlayImpl.h:118</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a4af02b1675b8d13ceb9ea72d031906f6"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a4af02b1675b8d13ceb9ea72d031906f6">ripple::OverlayImpl::squelch</a></div><div class="ttdeci">void squelch(PublicKey const &amp;validator, Peer::id_t const id, std::uint32_t squelchDuration) const override</div><div class="ttdoc">Squelch handler.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01407">OverlayImpl.cpp:1407</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a4af02b1675b8d13ceb9ea72d031906f6"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a4af02b1675b8d13ceb9ea72d031906f6">ripple::OverlayImpl::squelch</a></div><div class="ttdeci">void squelch(PublicKey const &amp;validator, Peer::id_t const id, std::uint32_t squelchDuration) const override</div><div class="ttdoc">Squelch handler.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01416">OverlayImpl.cpp:1416</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a4bef375aa1fa1abd230bee5634a1285d"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a4bef375aa1fa1abd230bee5634a1285d">ripple::OverlayImpl::makeErrorResponse</a></div><div class="ttdeci">std::shared_ptr&lt; Writer &gt; makeErrorResponse(std::shared_ptr&lt; PeerFinder::Slot &gt; const &amp;slot, http_request_type const &amp;request, address_type remote_address, std::string msg)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00378">OverlayImpl.cpp:378</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a502be733e9eb03226ef53a062312833c"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a502be733e9eb03226ef53a062312833c">ripple::OverlayImpl::slots_</a></div><div class="ttdeci">reduce_relay::Slots&lt; UptimeClock &gt; slots_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00128">OverlayImpl.h:128</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a522fb9ffec5625df2a15f19b2e629ba9"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9">ripple::OverlayImpl::deletePeer</a></div><div class="ttdeci">void deletePeer(Peer::id_t id)</div><div class="ttdoc">Called when the peer is deleted.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01470">OverlayImpl.cpp:1470</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a522fb9ffec5625df2a15f19b2e629ba9"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a522fb9ffec5625df2a15f19b2e629ba9">ripple::OverlayImpl::deletePeer</a></div><div class="ttdeci">void deletePeer(Peer::id_t id)</div><div class="ttdoc">Called when the peer is deleted.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01479">OverlayImpl.cpp:1479</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a534b616d5493147c3eb197af4f3f7cf1"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a534b616d5493147c3eb197af4f3f7cf1">ripple::OverlayImpl::findPeerByShortID</a></div><div class="ttdeci">std::shared_ptr&lt; Peer &gt; findPeerByShortID(Peer::id_t const &amp;id) const override</div><div class="ttdoc">Returns the peer with the matching short id, or null.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01110">OverlayImpl.cpp:1110</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a5c19b6bda81946939dd085c87a0d8d4b"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a5c19b6bda81946939dd085c87a0d8d4b">ripple::OverlayImpl::next_id_</a></div><div class="ttdeci">std::atomic&lt; Peer::id_t &gt; next_id_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00122">OverlayImpl.h:122</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a687e7562a21884a6c0e98b1449ce0391"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a687e7562a21884a6c0e98b1449ce0391">ripple::OverlayImpl::app_</a></div><div class="ttdeci">Application &amp; app_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00103">OverlayImpl.h:103</a></div></div>
@@ -1905,16 +1914,16 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a744cd710ad06c438b6af9313bbeb3e67"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a744cd710ad06c438b6af9313bbeb3e67">ripple::OverlayImpl::manifestLock_</a></div><div class="ttdeci">std::mutex manifestLock_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00138">OverlayImpl.h:138</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a766f78a5f139b74f35d84dcc3d5ceb42"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a766f78a5f139b74f35d84dcc3d5ceb42">ripple::OverlayImpl::processRequest</a></div><div class="ttdeci">bool processRequest(http_request_type const &amp;req, Handoff &amp;handoff)</div><div class="ttdoc">Handles non-peer protocol requests.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01047">OverlayImpl.cpp:1047</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a7df56f21d09513351c98a973f4022836"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a7df56f21d09513351c98a973f4022836">ripple::OverlayImpl::mutex_</a></div><div class="ttdeci">std::recursive_mutex mutex_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00109">OverlayImpl.h:109</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a80a5c09b232c3fc6d872f53206c34ed1"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a80a5c09b232c3fc6d872f53206c34ed1">ripple::OverlayImpl::sendEndpoints</a></div><div class="ttdeci">void sendEndpoints()</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01355">OverlayImpl.cpp:1355</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a80a5c09b232c3fc6d872f53206c34ed1"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a80a5c09b232c3fc6d872f53206c34ed1">ripple::OverlayImpl::sendEndpoints</a></div><div class="ttdeci">void sendEndpoints()</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01364">OverlayImpl.cpp:1364</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a8314d9411ae5be655929354317b4693b"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a8314d9411ae5be655929354317b4693b">ripple::OverlayImpl::remove</a></div><div class="ttdeci">void remove(std::shared_ptr&lt; PeerFinder::Slot &gt; const &amp;slot)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00474">OverlayImpl.cpp:474</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a888034ddee3c571ada36fe175953425b"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a888034ddee3c571ada36fe175953425b">ripple::OverlayImpl::OverlayImpl</a></div><div class="ttdeci">OverlayImpl(Application &amp;app, Setup const &amp;setup, ServerHandler &amp;serverHandler, Resource::Manager &amp;resourceManager, Resolver &amp;resolver, boost::asio::io_context &amp;io_context, BasicConfig const &amp;config, beast::insight::Collector::ptr const &amp;collector)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00121">OverlayImpl.cpp:121</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a8bbec612a0dcbaad4916115b95d3b237"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a8bbec612a0dcbaad4916115b95d3b237">ripple::OverlayImpl::sendTxQueue</a></div><div class="ttdeci">void sendTxQueue()</div><div class="ttdoc">Send once a second transactions' hashes aggregated by peers.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01373">OverlayImpl.cpp:1373</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a8bbec612a0dcbaad4916115b95d3b237"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a8bbec612a0dcbaad4916115b95d3b237">ripple::OverlayImpl::sendTxQueue</a></div><div class="ttdeci">void sendTxQueue()</div><div class="ttdoc">Send once a second transactions' hashes aggregated by peers.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01382">OverlayImpl.cpp:1382</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a8e09355c28f5d8cb0d477453b74f23e9"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a8e09355c28f5d8cb0d477453b74f23e9">ripple::OverlayImpl::reportOutboundTraffic</a></div><div class="ttdeci">void reportOutboundTraffic(TrafficCount::category cat, int bytes)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00701">OverlayImpl.cpp:701</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a903c90bba5298fb5f9908cca6459ab04"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a903c90bba5298fb5f9908cca6459ab04">ripple::OverlayImpl::timer_count_</a></div><div class="ttdeci">int timer_count_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00123">OverlayImpl.h:123</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a95481d20b4e474ddd175e13038323689"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a95481d20b4e474ddd175e13038323689">ripple::OverlayImpl::relay</a></div><div class="ttdeci">std::set&lt; Peer::id_t &gt; relay(protocol::TMProposeSet &amp;m, uint256 const &amp;uid, PublicKey const &amp;validator) override</div><div class="ttdoc">Relay a proposal.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01146">OverlayImpl.cpp:1146</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a98a077168a135ac114235f3e055fd5b3"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a98a077168a135ac114235f3e055fd5b3">ripple::OverlayImpl::size</a></div><div class="ttdeci">std::size_t size() const override</div><div class="ttdoc">The number of active peers on the network Active peers are only those peers that have completed the h...</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00710">OverlayImpl.cpp:710</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a991d6c6966099b83b4f6c9e8c87e51f6"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a991d6c6966099b83b4f6c9e8c87e51f6">ripple::OverlayImpl::strand_</a></div><div class="ttdeci">boost::asio::strand&lt; boost::asio::io_context::executor_type &gt; strand_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00108">OverlayImpl.h:108</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a9bffa5dc79c7be0b7c4c75cce173ad2a"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a9bffa5dc79c7be0b7c4c75cce173ad2a">ripple::OverlayImpl::unsquelch</a></div><div class="ttdeci">void unsquelch(PublicKey const &amp;validator, Peer::id_t id) const override</div><div class="ttdoc">Unsquelch handler.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01396">OverlayImpl.cpp:1396</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a9bffa5dc79c7be0b7c4c75cce173ad2a"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a9bffa5dc79c7be0b7c4c75cce173ad2a">ripple::OverlayImpl::unsquelch</a></div><div class="ttdeci">void unsquelch(PublicKey const &amp;validator, Peer::id_t id) const override</div><div class="ttdoc">Unsquelch handler.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01405">OverlayImpl.cpp:1405</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_a9f6861b0fb2805bb479f316f1d0d2bc2"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#a9f6861b0fb2805bb479f316f1d0d2bc2">ripple::OverlayImpl::makeRedirectResponse</a></div><div class="ttdeci">std::shared_ptr&lt; Writer &gt; makeRedirectResponse(std::shared_ptr&lt; PeerFinder::Slot &gt; const &amp;slot, http_request_type const &amp;request, address_type remote_address)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00351">OverlayImpl.cpp:351</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_aa19d6ef2edeaea889ff6199f82747bcc"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#aa19d6ef2edeaea889ff6199f82747bcc">ripple::OverlayImpl::for_each</a></div><div class="ttdeci">void for_each(UnaryFunc &amp;&amp;f) const</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00281">OverlayImpl.h:281</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_aaa55667827e740d1a2fbcd7c5c9fb8b3"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#aaa55667827e740d1a2fbcd7c5c9fb8b3">ripple::OverlayImpl::getOverlayInfo</a></div><div class="ttdeci">Json::Value getOverlayInfo()</div><div class="ttdoc">Returns information about peers on the overlay network.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00723">OverlayImpl.cpp:723</a></div></div>
@@ -1927,7 +1936,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ac74b1afabc6ab8f758a2566d51c51e36"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ac74b1afabc6ab8f758a2566d51c51e36">ripple::OverlayImpl::connect</a></div><div class="ttdeci">void connect(beast::IP::Endpoint const &amp;remote_endpoint) override</div><div class="ttdoc">Establish a peer connection to the specified endpoint.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00398">OverlayImpl.cpp:398</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ac7a4d439587511364b72808ed8eb486e"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ac7a4d439587511364b72808ed8eb486e">ripple::OverlayImpl::onHandoff</a></div><div class="ttdeci">Handoff onHandoff(std::unique_ptr&lt; stream_type &gt; &amp;&amp;bundle, http_request_type &amp;&amp;request, endpoint_type remote_endpoint) override</div><div class="ttdoc">Conditionally accept an incoming HTTP request.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00165">OverlayImpl.cpp:165</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ac8045b4d61dfca7e767a5502ff06f117"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ac8045b4d61dfca7e767a5502ff06f117">ripple::OverlayImpl::setup</a></div><div class="ttdeci">Setup const &amp; setup() const</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00176">OverlayImpl.h:176</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ac9dcdbe7f5e3cdb19fa1c7d71538556b"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ac9dcdbe7f5e3cdb19fa1c7d71538556b">ripple::OverlayImpl::autoConnect</a></div><div class="ttdeci">void autoConnect()</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01347">OverlayImpl.cpp:1347</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ac9dcdbe7f5e3cdb19fa1c7d71538556b"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ac9dcdbe7f5e3cdb19fa1c7d71538556b">ripple::OverlayImpl::autoConnect</a></div><div class="ttdeci">void autoConnect()</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01356">OverlayImpl.cpp:1356</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ad2689e6d8875de5f567cb32efc1a3150"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ad2689e6d8875de5f567cb32efc1a3150">ripple::OverlayImpl::getManifestsMessage</a></div><div class="ttdeci">std::shared_ptr&lt; Message &gt; getManifestsMessage()</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01191">OverlayImpl.cpp:1191</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ad535835fd328f766a6c2eaaa5927a6df"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ad535835fd328f766a6c2eaaa5927a6df">ripple::OverlayImpl::m_stats</a></div><div class="ttdeci">Stats m_stats</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00606">OverlayImpl.h:606</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ad71423fe133aa9534b31d3f86cce0221"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ad71423fe133aa9534b31d3f86cce0221">ripple::OverlayImpl::ids_</a></div><div class="ttdeci">hash_map&lt; Peer::id_t, std::weak_ptr&lt; PeerImp &gt; &gt; ids_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00120">OverlayImpl.h:120</a></div></div>
@@ -1939,7 +1948,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_ae78144c911ad978a0bea72b85f4c48b1"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#ae78144c911ad978a0bea72b85f4c48b1">ripple::OverlayImpl::processCrawl</a></div><div class="ttdeci">bool processCrawl(http_request_type const &amp;req, Handoff &amp;handoff)</div><div class="ttdoc">Handles crawl requests.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00844">OverlayImpl.cpp:844</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_aea84682825b5a501b694feef477a350c"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#aea84682825b5a501b694feef477a350c">ripple::OverlayImpl::setup_</a></div><div class="ttdeci">Setup setup_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00113">OverlayImpl.h:113</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_af5781ac0e4a3d7fb69b7089578bc5830"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#af5781ac0e4a3d7fb69b7089578bc5830">ripple::OverlayImpl::limit</a></div><div class="ttdeci">int limit() override</div><div class="ttdoc">Returns the maximum number of peers we are configured to allow.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l00717">OverlayImpl.cpp:717</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_af5ad0dea6d1dae3a7e27aa6a26f128b5"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">ripple::OverlayImpl::updateSlotAndSquelch</a></div><div class="ttdeci">void updateSlotAndSquelch(uint256 const &amp;key, PublicKey const &amp;validator, std::set&lt; Peer::id_t &gt; &amp;&amp;peers, protocol::MessageType type)</div><div class="ttdoc">Updates message count for validator/peer.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01419">OverlayImpl.cpp:1419</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_af5ad0dea6d1dae3a7e27aa6a26f128b5"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#af5ad0dea6d1dae3a7e27aa6a26f128b5">ripple::OverlayImpl::updateSlotAndSquelch</a></div><div class="ttdeci">void updateSlotAndSquelch(uint256 const &amp;key, PublicKey const &amp;validator, std::set&lt; Peer::id_t &gt; &amp;&amp;peers, protocol::MessageType type)</div><div class="ttdoc">Updates message count for validator/peer.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01428">OverlayImpl.cpp:1428</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_af9f9ddea045cd3ef7b27d700f9962dd0"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#af9f9ddea045cd3ef7b27d700f9962dd0">ripple::OverlayImpl::journal_</a></div><div class="ttdeci">beast::Journal const journal_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00114">OverlayImpl.h:114</a></div></div>
<div class="ttc" id="aclassripple_1_1OverlayImpl_html_afb6dd748e4986d93f5229b030a54641e"><div class="ttname"><a href="classripple_1_1OverlayImpl.html#afb6dd748e4986d93f5229b030a54641e">ripple::OverlayImpl::list_</a></div><div class="ttdeci">boost::container::flat_map&lt; Child *, std::weak_ptr&lt; Child &gt; &gt; list_</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8h_source.html#l00112">OverlayImpl.h:112</a></div></div>
<div class="ttc" id="aclassripple_1_1Overlay_html"><div class="ttname"><a href="classripple_1_1Overlay.html">ripple::Overlay</a></div><div class="ttdoc">Manages the set of connected peers.</div><div class="ttdef"><b>Definition</b> <a href="Overlay_8h_source.html#l00048">Overlay.h:49</a></div></div>
@@ -2003,7 +2012,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="anamespaceripple_html_a53f80df10254751781250aa20704e98f"><div class="ttname"><a href="namespaceripple.html#a53f80df10254751781250aa20704e98f">ripple::set</a></div><div class="ttdeci">bool set(T &amp;target, std::string const &amp;name, Section const &amp;section)</div><div class="ttdoc">Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...</div><div class="ttdef"><b>Definition</b> <a href="BasicConfig_8h_source.html#l00315">BasicConfig.h:315</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7241d07322a0d8fa2e2effedd739a90f"><div class="ttname"><a href="namespaceripple.html#a7241d07322a0d8fa2e2effedd739a90f">ripple::makeSharedValue</a></div><div class="ttdeci">std::optional&lt; uint256 &gt; makeSharedValue(stream_type &amp;ssl, beast::Journal journal)</div><div class="ttdoc">Computes a shared value based on the SSL connection state.</div><div class="ttdef"><b>Definition</b> <a href="Handshake_8cpp_source.html#l00146">Handshake.cpp:146</a></div></div>
<div class="ttc" id="anamespaceripple_html_a75121fd263018f521eb29d1b5a07eb69"><div class="ttname"><a href="namespaceripple.html#a75121fd263018f521eb29d1b5a07eb69">ripple::make_SSLContext</a></div><div class="ttdeci">std::shared_ptr&lt; boost::asio::ssl::context &gt; make_SSLContext(std::string const &amp;cipherList)</div><div class="ttdoc">Create a self-signed SSL context that allows anonymous Diffie Hellman.</div><div class="ttdef"><b>Definition</b> <a href="make__SSLContext_8cpp_source.html#l00385">make_SSLContext.cpp:385</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7962f193209fd4b998404850694d8514"><div class="ttname"><a href="namespaceripple.html#a7962f193209fd4b998404850694d8514">ripple::makeSquelchMessage</a></div><div class="ttdeci">std::shared_ptr&lt; Message &gt; makeSquelchMessage(PublicKey const &amp;validator, bool squelch, uint32_t squelchDuration)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01382">OverlayImpl.cpp:1382</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7962f193209fd4b998404850694d8514"><div class="ttname"><a href="namespaceripple.html#a7962f193209fd4b998404850694d8514">ripple::makeSquelchMessage</a></div><div class="ttdeci">std::shared_ptr&lt; Message &gt; makeSquelchMessage(PublicKey const &amp;validator, bool squelch, uint32_t squelchDuration)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01391">OverlayImpl.cpp:1391</a></div></div>
<div class="ttc" id="anamespaceripple_html_a86e358ce3f06ff049af13c2342791cf8"><div class="ttname"><a href="namespaceripple.html#a86e358ce3f06ff049af13c2342791cf8">ripple::strHex</a></div><div class="ttdeci">std::string strHex(FwdIt begin, FwdIt end)</div><div class="ttdef"><b>Definition</b> <a href="strHex_8h_source.html#l00030">strHex.h:30</a></div></div>
<div class="ttc" id="anamespaceripple_html_a8a16d6f665a032453ec4cbfca01929b6a3e4d891a5df3d6d0d7dd9432a1bc6470"><div class="ttname"><a href="namespaceripple.html#a8a16d6f665a032453ec4cbfca01929b6a3e4d891a5df3d6d0d7dd9432a1bc6470">ripple::ManifestDisposition::accepted</a></div><div class="ttdeci">@ accepted</div><div class="ttdoc">Manifest is valid.</div></div>
<div class="ttc" id="anamespaceripple_html_a93f2333b362ee67694b78f55eadf7805"><div class="ttname"><a href="namespaceripple.html#a93f2333b362ee67694b78f55eadf7805">ripple::makeSlice</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_same&lt; T, char &gt;::value||std::is_same&lt; T, unsigned char &gt;::value, Slice &gt; makeSlice(std::array&lt; T, N &gt; const &amp;a)</div><div class="ttdef"><b>Definition</b> <a href="Slice_8h_source.html#l00244">Slice.h:244</a></div></div>
@@ -2013,9 +2022,9 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="anamespaceripple_html_abb3ed6f67e12d06f83f0f478f3f61fd1"><div class="ttname"><a href="namespaceripple.html#abb3ed6f67e12d06f83f0f478f3f61fd1">ripple::getCountsJson</a></div><div class="ttdeci">Json::Value getCountsJson(Application &amp;app, int minObjectCount)</div><div class="ttdef"><b>Definition</b> <a href="GetCounts_8cpp_source.html#l00062">GetCounts.cpp:62</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac124fe6744b7fe887dec949b56b16d50"><div class="ttname"><a href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">ripple::to_string</a></div><div class="ttdeci">std::string to_string(base_uint&lt; Bits, Tag &gt; const &amp;a)</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00630">base_uint.h:630</a></div></div>
<div class="ttc" id="anamespaceripple_html_acd7881ae39681c7d64a5904b367219ab"><div class="ttname"><a href="namespaceripple.html#acd7881ae39681c7d64a5904b367219ab">ripple::verifyHandshake</a></div><div class="ttdeci">PublicKey verifyHandshake(boost::beast::http::fields const &amp;headers, ripple::uint256 const &amp;sharedValue, std::optional&lt; std::uint32_t &gt; networkID, beast::IP::Address public_ip, beast::IP::Address remote, Application &amp;app)</div><div class="ttdoc">Validate header fields necessary for upgrading the link to the peer protocol.</div><div class="ttdef"><b>Definition</b> <a href="Handshake_8cpp_source.html#l00227">Handshake.cpp:227</a></div></div>
<div class="ttc" id="anamespaceripple_html_acdd9d0afaa4d6eee0c0f243f15c6298f"><div class="ttname"><a href="namespaceripple.html#acdd9d0afaa4d6eee0c0f243f15c6298f">ripple::make_Overlay</a></div><div class="ttdeci">std::unique_ptr&lt; Overlay &gt; make_Overlay(Application &amp;app, Overlay::Setup const &amp;setup, ServerHandler &amp;serverHandler, Resource::Manager &amp;resourceManager, Resolver &amp;resolver, boost::asio::io_context &amp;io_context, BasicConfig const &amp;config, beast::insight::Collector::ptr const &amp;collector)</div><div class="ttdoc">Creates the implementation of Overlay.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01595">OverlayImpl.cpp:1595</a></div></div>
<div class="ttc" id="anamespaceripple_html_acdd9d0afaa4d6eee0c0f243f15c6298f"><div class="ttname"><a href="namespaceripple.html#acdd9d0afaa4d6eee0c0f243f15c6298f">ripple::make_Overlay</a></div><div class="ttdeci">std::unique_ptr&lt; Overlay &gt; make_Overlay(Application &amp;app, Overlay::Setup const &amp;setup, ServerHandler &amp;serverHandler, Resource::Manager &amp;resourceManager, Resolver &amp;resolver, boost::asio::io_context &amp;io_context, BasicConfig const &amp;config, beast::insight::Collector::ptr const &amp;collector)</div><div class="ttdoc">Creates the implementation of Overlay.</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01604">OverlayImpl.cpp:1604</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad5143ceada01141772ae4aab984f94bda7f5cb74af5d7f4b82200738fdbdc5a45"><div class="ttname"><a href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7f5cb74af5d7f4b82200738fdbdc5a45">ripple::HashPrefix::manifest</a></div><div class="ttdeci">@ manifest</div><div class="ttdoc">Manifest.</div></div>
<div class="ttc" id="anamespaceripple_html_adc117aa1e40c420ae8c34dea1f2f1bf1"><div class="ttname"><a href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">ripple::setup_Overlay</a></div><div class="ttdeci">Overlay::Setup setup_Overlay(BasicConfig const &amp;config)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01490">OverlayImpl.cpp:1490</a></div></div>
<div class="ttc" id="anamespaceripple_html_adc117aa1e40c420ae8c34dea1f2f1bf1"><div class="ttname"><a href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">ripple::setup_Overlay</a></div><div class="ttdeci">Overlay::Setup setup_Overlay(BasicConfig const &amp;config)</div><div class="ttdef"><b>Definition</b> <a href="OverlayImpl_8cpp_source.html#l01499">OverlayImpl.cpp:1499</a></div></div>
<div class="ttc" id="anamespaceripple_html_af5659b42b02bf5cb8c8dfdbf8d496c74"><div class="ttname"><a href="namespaceripple.html#af5659b42b02bf5cb8c8dfdbf8d496c74">ripple::squelch</a></div><div class="ttdeci">constexpr Number squelch(Number const &amp;x, Number const &amp;limit) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00381">Number.h:381</a></div></div>
<div class="ttc" id="anamespaceripple_html_afe66a903fefc1f0613602efe9e2283de"><div class="ttname"><a href="namespaceripple.html#afe66a903fefc1f0613602efe9e2283de">ripple::default_prng</a></div><div class="ttdeci">beast::xor_shift_engine &amp; default_prng()</div><div class="ttdoc">Return the default random engine.</div><div class="ttdef"><b>Definition</b> <a href="include_2xrpl_2basics_2random_8h_source.html#l00065">include/xrpl/basics/random.h:65</a></div></div>
<div class="ttc" id="anamespacestd_1_1chrono_html"><div class="ttname"><a href="http://en.cppreference.com/w/namespacestd_1_1chrono.html">std::chrono</a></div></div>