This commit is contained in:
nbougalis
2022-07-19 15:12:23 +00:00
parent e7ca908a33
commit 70c2d3809d
2408 changed files with 53648 additions and 52103 deletions

View File

@@ -940,352 +940,366 @@ $(function() {
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; params,</div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; {user, <a class="code" href="namespaceripple.html#a8fdfc19db800245e87ac4f66f0304092">forwardedFor</a>}};</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <a class="code" href="classJson_1_1Value.html">Json::Value</a> result;</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keyword">auto</span> start = <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/system_clock/now.html">std::chrono::system_clock::now</a>();</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <a class="code" href="namespaceripple_1_1RPC.html#a84827a1d9b56ad8201671ff77c2ddf2e">RPC::doCommand</a>(context, result);</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keyword">auto</span> end = <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/system_clock/now.html">std::chrono::system_clock::now</a>();</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="namespaceripple.html#a9ed448ddcb5b36998c6d084f942b7173">logDuration</a>(params, end - start, <a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>);</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; </div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; usage.<a class="code" href="classripple_1_1Resource_1_1Consumer.html#a65d4f295e044ae0bf1e5ef1e4e6df539">charge</a>(loadType);</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">if</span> (usage.<a class="code" href="classripple_1_1Resource_1_1Consumer.html#a27db21f6a4965d2ade4ba1761e3d8ccd">warn</a>())</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; result[jss::warning] = jss::load;</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; </div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <a class="code" href="classJson_1_1Value.html">Json::Value</a> r(<a class="code" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>);</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">if</span> (ripplerpc &gt;= <span class="stringliteral">&quot;2.0&quot;</span>)</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keywordflow">if</span> (result.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::error))</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; {</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; result[jss::status] = jss::error;</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; result[<span class="stringliteral">&quot;code&quot;</span>] = result[jss::error_code];</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; result[<span class="stringliteral">&quot;message&quot;</span>] = result[jss::error_message];</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; result.<a class="code" href="classJson_1_1Value.html#aa52f7873b95d29627d6e83ba96f69aaa">removeMember</a>(jss::error_message);</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; JLOG(<a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;rpcError: &quot;</span> &lt;&lt; result[jss::error]</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; result[jss::error_message];</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; r[jss::error] = std::move(result);</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; }</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; {</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; result[jss::status] = jss::success;</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; r[jss::result] = std::move(result);</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; }</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; }</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; {</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="comment">// Always report &quot;status&quot;. On an error report the request as</span></div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="comment">// received.</span></div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">if</span> (result.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::error))</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keyword">auto</span> rq = params;</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; </div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">if</span> (rq.isObject())</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; { <span class="comment">// But mask potentially sensitive information.</span></div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::passphrase.c_str()))</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; rq[jss::passphrase.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::secret.c_str()))</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; rq[jss::secret.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::seed.c_str()))</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; rq[jss::seed.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::seed_hex.c_str()))</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; rq[jss::seed_hex.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; }</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; </div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; result[jss::status] = jss::error;</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; result[jss::request] = rq;</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; </div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; JLOG(<a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;rpcError: &quot;</span> &lt;&lt; result[jss::error]</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; result[jss::error_message];</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; }</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; {</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; result[jss::status] = jss::success;</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; }</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; r[jss::result] = std::move(result);</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; }</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; </div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">if</span> (params.isMember(jss::jsonrpc))</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; r[jss::jsonrpc] = params[jss::jsonrpc];</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keywordflow">if</span> (params.isMember(jss::ripplerpc))</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; r[jss::ripplerpc] = params[jss::ripplerpc];</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordflow">if</span> (params.isMember(jss::id))</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; r[jss::id] = params[jss::id];</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="keywordflow">if</span> (batch)</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; reply.<a class="code" href="classJson_1_1Value.html#a7e49ac977e4bcf59745a09d426669f75">append</a>(std::move(r));</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; reply = std::move(r);</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; </div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">if</span> (reply.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::result) &amp;&amp;</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; reply[jss::result].<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::result))</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; {</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; reply = reply[jss::result];</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keywordflow">if</span> (reply.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::status))</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; {</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; reply[jss::result][jss::status] = reply[jss::status];</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; reply.<a class="code" href="classJson_1_1Value.html#aa52f7873b95d29627d6e83ba96f69aaa">removeMember</a>(jss::status);</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; }</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; }</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; }</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keyword">auto</span> response = <a class="code" href="namespaceripple.html#af9776f187d3686a7fba4c2d2fbeebdf4">to_string</a>(reply);</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; </div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#adc58b4538fc24ffa1a0563256e958a78">rpc_time_</a>.<a class="code" href="classbeast_1_1insight_1_1Event.html#af25d64d42a95d26832e7354f07059245">notify</a>(std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/high_resolution_clock/now.html">std::chrono::high_resolution_clock::now</a>() - start));</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; ++<a class="code" href="classripple_1_1ServerHandlerImp.html#a54cdcb3c477eb5adb0891bd324735c93">rpc_requests_</a>;</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#ab3b7ba5d821b2a8868377c4b746cf5d6">rpc_size_</a>.<a class="code" href="classbeast_1_1insight_1_1Event.html#af25d64d42a95d26832e7354f07059245">notify</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">beast::insight::Event::value_type</a>{response.size()});</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; </div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; response += <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; </div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>())</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; {</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> maxSize = 10000;</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">if</span> (response.size() &lt;= maxSize)</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; stream &lt;&lt; <span class="stringliteral">&quot;Reply: &quot;</span> &lt;&lt; response;</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; stream &lt;&lt; <span class="stringliteral">&quot;Reply: &quot;</span> &lt;&lt; response.substr(0, maxSize);</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; }</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; </div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="namespaceripple.html#af9d0577f0b4ced1d08e8cba3ba14e45a">HTTPReply</a>(200, response, output, rpcJ);</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;}</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; </div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keyword">auto</span> start = <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/system_clock/now.html">std::chrono::system_clock::now</a>();</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; </div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; {</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="namespaceripple_1_1RPC.html#a84827a1d9b56ad8201671ff77c2ddf2e">RPC::doCommand</a>(context, result);</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; }</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keywordflow">catch</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; ex)</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; {</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; result = <a class="code" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a839833d48b635d8df6a9176274ae922f">rpcINTERNAL</a>);</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; JLOG(<a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;Internal error : &quot;</span> &lt;&lt; ex.<a class="codeRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>()</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; &lt;&lt; <span class="stringliteral">&quot; when processing request: &quot;</span></div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; &lt;&lt; <a class="code" href="classJson_1_1Compact.html">Json::Compact</a>{<a class="code" href="classJson_1_1Value.html">Json::Value</a>{params}};</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; }</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; </div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keyword">auto</span> end = <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/system_clock/now.html">std::chrono::system_clock::now</a>();</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; </div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <a class="code" href="namespaceripple.html#a9ed448ddcb5b36998c6d084f942b7173">logDuration</a>(params, end - start, <a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>);</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; </div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; usage.<a class="code" href="classripple_1_1Resource_1_1Consumer.html#a65d4f295e044ae0bf1e5ef1e4e6df539">charge</a>(loadType);</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">if</span> (usage.<a class="code" href="classripple_1_1Resource_1_1Consumer.html#a27db21f6a4965d2ade4ba1761e3d8ccd">warn</a>())</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; result[jss::warning] = jss::load;</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; </div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="classJson_1_1Value.html">Json::Value</a> r(<a class="code" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>);</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordflow">if</span> (ripplerpc &gt;= <span class="stringliteral">&quot;2.0&quot;</span>)</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; {</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordflow">if</span> (result.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::error))</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; {</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; result[jss::status] = jss::error;</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; result[<span class="stringliteral">&quot;code&quot;</span>] = result[jss::error_code];</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; result[<span class="stringliteral">&quot;message&quot;</span>] = result[jss::error_message];</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; result.<a class="code" href="classJson_1_1Value.html#aa52f7873b95d29627d6e83ba96f69aaa">removeMember</a>(jss::error_message);</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; JLOG(<a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;rpcError: &quot;</span> &lt;&lt; result[jss::error]</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; result[jss::error_message];</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; r[jss::error] = std::move(result);</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; }</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; {</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; result[jss::status] = jss::success;</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; r[jss::result] = std::move(result);</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; }</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; }</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; {</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="comment">// Always report &quot;status&quot;. On an error report the request as</span></div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="comment">// received.</span></div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">if</span> (result.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::error))</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; {</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keyword">auto</span> rq = params;</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; </div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keywordflow">if</span> (rq.isObject())</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; { <span class="comment">// But mask potentially sensitive information.</span></div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::passphrase.c_str()))</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; rq[jss::passphrase.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::secret.c_str()))</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; rq[jss::secret.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::seed.c_str()))</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; rq[jss::seed.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span> (rq.isMember(jss::seed_hex.c_str()))</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; rq[jss::seed_hex.c_str()] = <span class="stringliteral">&quot;&lt;masked&gt;&quot;</span>;</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; }</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; </div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; result[jss::status] = jss::error;</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; result[jss::request] = rq;</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; </div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; JLOG(<a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;rpcError: &quot;</span> &lt;&lt; result[jss::error]</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; result[jss::error_message];</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; {</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; result[jss::status] = jss::success;</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; }</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; r[jss::result] = std::move(result);</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; }</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; </div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keywordflow">if</span> (params.isMember(jss::jsonrpc))</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; r[jss::jsonrpc] = params[jss::jsonrpc];</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">if</span> (params.isMember(jss::ripplerpc))</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; r[jss::ripplerpc] = params[jss::ripplerpc];</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">if</span> (params.isMember(jss::id))</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; r[jss::id] = params[jss::id];</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">if</span> (batch)</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; reply.<a class="code" href="classJson_1_1Value.html#a7e49ac977e4bcf59745a09d426669f75">append</a>(std::move(r));</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; reply = std::move(r);</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; </div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordflow">if</span> (reply.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::result) &amp;&amp;</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; reply[jss::result].<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::result))</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; {</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; reply = reply[jss::result];</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">if</span> (reply.<a class="code" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::status))</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; {</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; reply[jss::result][jss::status] = reply[jss::status];</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; reply.<a class="code" href="classJson_1_1Value.html#aa52f7873b95d29627d6e83ba96f69aaa">removeMember</a>(jss::status);</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; }</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; }</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; }</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keyword">auto</span> response = <a class="code" href="namespaceripple.html#af9776f187d3686a7fba4c2d2fbeebdf4">to_string</a>(reply);</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; </div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#adc58b4538fc24ffa1a0563256e958a78">rpc_time_</a>.<a class="code" href="classbeast_1_1insight_1_1Event.html#af25d64d42a95d26832e7354f07059245">notify</a>(std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/high_resolution_clock/now.html">std::chrono::high_resolution_clock::now</a>() - start));</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; ++<a class="code" href="classripple_1_1ServerHandlerImp.html#a54cdcb3c477eb5adb0891bd324735c93">rpc_requests_</a>;</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#ab3b7ba5d821b2a8868377c4b746cf5d6">rpc_size_</a>.<a class="code" href="classbeast_1_1insight_1_1Event.html#af25d64d42a95d26832e7354f07059245">notify</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">beast::insight::Event::value_type</a>{response.size()});</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; </div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;<span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; response += <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; </div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;<span class="comment">/* This response is used with load balancing.</span></div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;<span class="comment"> If the server is overloaded, status 500 is reported. Otherwise status 200</span></div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;<span class="comment"> is reported, meaning the server can accept more connections.</span></div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;<a class="code" href="structripple_1_1Handoff.html">Handoff</a></div>
<div class="line"><a name="l00987"></a><span class="lineno"><a class="line" href="classripple_1_1ServerHandlerImp.html#ad75e744ed8a9fda6d46bcc8d87b33a38"> 987</a></span>&#160;<a class="code" href="classripple_1_1ServerHandlerImp.html#ad75e744ed8a9fda6d46bcc8d87b33a38">ServerHandlerImp::statusResponse</a>(<a class="code" href="namespaceripple.html#aa265217edeb8282e636c78b50049f4c0">http_request_type</a> <span class="keyword">const</span>&amp; request)<span class="keyword"> const</span></div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keyword">using namespace </span>boost::beast::http;</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <a class="code" href="structripple_1_1Handoff.html">Handoff</a> handoff;</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; response&lt;string_body&gt; msg;</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> reason;</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1ServerHandlerImp.html#a01566fadecc66a62be87713cc84a4197">app_</a>.<a class="code" href="classripple_1_1Application.html#a0005228a2b40d12b6985ac48bd768940">serverOkay</a>(reason))</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; {</div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; msg.result(boost::beast::http::status::ok);</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; msg.body() = <span class="stringliteral">&quot;&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;&quot;</span> + <a class="code" href="namespaceripple.html#aca32bc5eec87c90ce71880dbba08b93e">systemName</a>() +</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="stringliteral">&quot; Test page for rippled&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;&quot;</span> + <a class="code" href="namespaceripple.html#aca32bc5eec87c90ce71880dbba08b93e">systemName</a>() +</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <span class="stringliteral">&quot; Test&lt;/h1&gt;&lt;p&gt;This page shows rippled http(s) &quot;</span></div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <span class="stringliteral">&quot;connectivity is working.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;&quot;</span>;</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; }</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; {</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; msg.result(boost::beast::http::status::internal_server_error);</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; msg.body() = <span class="stringliteral">&quot;&lt;HTML&gt;&lt;BODY&gt;Server cannot accept clients: &quot;</span> + reason +</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="stringliteral">&quot;&lt;/BODY&gt;&lt;/HTML&gt;&quot;</span>;</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; msg.version(request.version());</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; msg.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/insert.html">insert</a>(<span class="stringliteral">&quot;Server&quot;</span>, <a class="code" href="namespaceripple_1_1BuildInfo.html#a1e2b1646cf948c1c19ff190903c3e789">BuildInfo::getFullVersionString</a>());</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; msg.insert(<span class="stringliteral">&quot;Content-Type&quot;</span>, <span class="stringliteral">&quot;text/html&quot;</span>);</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; msg.insert(<span class="stringliteral">&quot;Connection&quot;</span>, <span class="stringliteral">&quot;close&quot;</span>);</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; msg.prepare_payload();</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; handoff.<a class="code" href="structripple_1_1Handoff.html#a808daa7fd8b0b6f64aec56b83ce5fe85">response</a> = std::make_shared&lt;SimpleWriter&gt;(msg);</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">return</span> handoff;</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;}</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; </div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; </div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l01019"></a><span class="lineno"><a class="line" href="structripple_1_1ServerHandlerImp_1_1Setup.html#acf2e4a0b32981ef7eb945aad361bafd2"> 1019</a></span>&#160;<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#acf2e4a0b32981ef7eb945aad361bafd2">ServerHandler::Setup::makeContexts</a>()</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;{</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; p : <a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>)</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; {</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">if</span> (p.secure())</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; {</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">if</span> (p.ssl_key.empty() &amp;&amp; p.ssl_cert.empty() &amp;&amp; p.ssl_chain.empty())</div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; p.context = <a class="code" href="namespaceripple.html#a4d435c32e5733f8d57bf0562c25e0f3b">make_SSLContext</a>(p.ssl_ciphers);</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; p.context = <a class="code" href="namespaceripple.html#ae8b021ae4b350b66b5e9e39f4a32c844">make_SSLContextAuthed</a>(</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; p.ssl_key, p.ssl_cert, p.ssl_chain, p.ssl_ciphers);</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; }</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; {</div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; p.context = std::make_shared&lt;boost::asio::ssl::context&gt;(</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; boost::asio::ssl::context::sslv23);</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; }</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; }</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;}</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; </div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="keyword">static</span> <a class="code" href="structripple_1_1Port.html">Port</a></div>
<div class="line"><a name="l01040"></a><span class="lineno"><a class="line" href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b"> 1040</a></span>&#160;<a class="code" href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b">to_Port</a>(<a class="code" href="structripple_1_1ParsedPort.html">ParsedPort</a> <span class="keyword">const</span>&amp; parsed, <a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::ostream</a>&amp; log)</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;{</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <a class="code" href="structripple_1_1Port.html">Port</a> p;</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a7e18473959ba367d022b923434241324">name</a>;</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; </div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="keywordflow">if</span> (!parsed.<a class="code" href="structripple_1_1ParsedPort.html#ae32c2f5693e35df49944be81a716f2c3">ip</a>)</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; {</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing &#39;ip&#39; in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ae1ba6b8a6edf8c2544ebe903fffef178">ip</a> = *parsed.<a class="code" href="structripple_1_1ParsedPort.html#ae32c2f5693e35df49944be81a716f2c3">ip</a>;</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; </div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">if</span> (!parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a>)</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; {</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing &#39;port&#39; in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; }</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a> == 0)</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Port &quot;</span> &lt;&lt; *parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a> &lt;&lt; <span class="stringliteral">&quot;in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;] is invalid&quot;</span>;</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; }</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a0c5ce3306e741211ad5a08073f07ff29">port</a> = *parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a>;</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; </div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">if</span> (parsed.<a class="code" href="structripple_1_1ParsedPort.html#a6f5cbe8976ce63af96dccfa383874ff8">protocol</a>.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/set/empty.html">empty</a>())</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; {</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing &#39;protocol&#39; in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; }</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a41c843b31298cfa936f0d99e15bd843f">protocol</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a6f5cbe8976ce63af96dccfa383874ff8">protocol</a>;</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; </div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; p.<a class="code" href="structripple_1_1Port.html#acfff0cffb176d6ea929cdb82c68cf882">user</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a41912c012fa79bda189fb36041ba69be">user</a>;</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a27d3bc7390a8f0d728bb00446353e95c">password</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ab2a7830b8107f09c88af6525f2746c18">password</a>;</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ab1245b88601b253a079502b602d35d6a">admin_user</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ae2634e2aa4f3f491bdbc8fc4a7bcbb85">admin_user</a>;</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; p.<a class="code" href="structripple_1_1Port.html#aef3fd85511dc4d06046e84f4baa08063">admin_password</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a77a3490a5b883160ad79fc9a9465d01b">admin_password</a>;</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a94b5bfbc5b8b8c58cf15be92ffe7e4d8">ssl_key</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a4f5b226aeea7910ad9d8ed46d41c7600">ssl_key</a>;</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a8e80a833c4ee32124909c5842d3f504e">ssl_cert</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ac9fb4e80d5371867f17ca67ac2fa877e">ssl_cert</a>;</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a15de8caf0aa37baa379bec53ba23362c">ssl_chain</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a85c9d257b0ac9158ced4c30fba44f211">ssl_chain</a>;</div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ae5e84afe0fc12a5c33fa7ded231102a5">ssl_ciphers</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a23711e66cdaa65feaf3eaf67815b7ef8">ssl_ciphers</a>;</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; p.<a class="code" href="structripple_1_1Port.html#afa8100376068ed4e75e6074a76f0d85d">pmd_options</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a2ae919a80218f904b136a80093b718d5">pmd_options</a>;</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ae2db78e42b633d96af146c67543215e9">ws_queue_limit</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a509e4603be0b45a4c28ab6c2e6632142">ws_queue_limit</a>;</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a9000e3fcf242f5fc0e37924df80d0f8f">limit</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a2f73a7a8f938dba788ca358f2ef86170">limit</a>;</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; p.<a class="code" href="structripple_1_1Port.html#af662681da13f59b5784618916f4ee015">admin_nets_v4</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a3fe32f5a0b54244c90f6b7684f57775c">admin_nets_v4</a>;</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a388b34fc701fabbdb91fa5e935e191b7">admin_nets_v6</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ab7f5cf9ef9920924eefb47f07e4bfbaf">admin_nets_v6</a>;</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ad58922a18221abf77c3f3937b21480fa">secure_gateway_nets_v4</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#af6352ba8e1ca2026696d5f38447753da">secure_gateway_nets_v4</a>;</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; p.<a class="code" href="structripple_1_1Port.html#aa5b0b1ee9736658c12e97ae028c5f9bb">secure_gateway_nets_v6</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a616ba634f3c33ee5612c0d0c3968cc4d">secure_gateway_nets_v6</a>;</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; </div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">return</span> p;</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;}</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; </div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="keyword">static</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;Port&gt;</a></div>
<div class="line"><a name="l01091"></a><span class="lineno"><a class="line" href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0"> 1091</a></span>&#160;<a class="code" href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0">parse_Ports</a>(<a class="code" href="classripple_1_1Config.html">Config</a> <span class="keyword">const</span>&amp; config, <a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::ostream</a>&amp; log)</div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;{</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;Port&gt;</a> result;</div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; </div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keywordflow">if</span> (!config.<a class="code" href="classripple_1_1BasicConfig.html#a09b31b8ed3c769b4c23b040c3d4798ed">exists</a>(<span class="stringliteral">&quot;server&quot;</span>))</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; {</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Required section [server] is missing&quot;</span>;</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; }</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code" href="classripple_1_1ServerHandlerImp.html#a28a9242621ceed7801e20f4fc5beb8ea">m_journal</a>.<a class="code" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>())</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; {</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> maxSize = 10000;</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">if</span> (response.size() &lt;= maxSize)</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; stream &lt;&lt; <span class="stringliteral">&quot;Reply: &quot;</span> &lt;&lt; response;</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; stream &lt;&lt; <span class="stringliteral">&quot;Reply: &quot;</span> &lt;&lt; response.substr(0, maxSize);</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; }</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; </div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <a class="code" href="namespaceripple.html#af9d0577f0b4ced1d08e8cba3ba14e45a">HTTPReply</a>(200, response, output, rpcJ);</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;}</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; </div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;<span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; </div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="comment">/* This response is used with load balancing.</span></div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;<span class="comment"> If the server is overloaded, status 500 is reported. Otherwise status 200</span></div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;<span class="comment"> is reported, meaning the server can accept more connections.</span></div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<a class="code" href="structripple_1_1Handoff.html">Handoff</a></div>
<div class="line"><a name="l01001"></a><span class="lineno"><a class="line" href="classripple_1_1ServerHandlerImp.html#ad75e744ed8a9fda6d46bcc8d87b33a38"> 1001</a></span>&#160;<a class="code" href="classripple_1_1ServerHandlerImp.html#ad75e744ed8a9fda6d46bcc8d87b33a38">ServerHandlerImp::statusResponse</a>(<a class="code" href="namespaceripple.html#aa265217edeb8282e636c78b50049f4c0">http_request_type</a> <span class="keyword">const</span>&amp; request)<span class="keyword"> const</span></div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keyword">using namespace </span>boost::beast::http;</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <a class="code" href="structripple_1_1Handoff.html">Handoff</a> handoff;</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; response&lt;string_body&gt; msg;</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> reason;</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1ServerHandlerImp.html#a01566fadecc66a62be87713cc84a4197">app_</a>.<a class="code" href="classripple_1_1Application.html#a0005228a2b40d12b6985ac48bd768940">serverOkay</a>(reason))</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; {</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; msg.result(boost::beast::http::status::ok);</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; msg.body() = <span class="stringliteral">&quot;&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;&quot;</span> + <a class="code" href="namespaceripple.html#aca32bc5eec87c90ce71880dbba08b93e">systemName</a>() +</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="stringliteral">&quot; Test page for rippled&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;&quot;</span> + <a class="code" href="namespaceripple.html#aca32bc5eec87c90ce71880dbba08b93e">systemName</a>() +</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="stringliteral">&quot; Test&lt;/h1&gt;&lt;p&gt;This page shows rippled http(s) &quot;</span></div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="stringliteral">&quot;connectivity is working.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;&quot;</span>;</div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; {</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; msg.result(boost::beast::http::status::internal_server_error);</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; msg.body() = <span class="stringliteral">&quot;&lt;HTML&gt;&lt;BODY&gt;Server cannot accept clients: &quot;</span> + reason +</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="stringliteral">&quot;&lt;/BODY&gt;&lt;/HTML&gt;&quot;</span>;</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; }</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; msg.version(request.version());</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; msg.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/insert.html">insert</a>(<span class="stringliteral">&quot;Server&quot;</span>, <a class="code" href="namespaceripple_1_1BuildInfo.html#a1e2b1646cf948c1c19ff190903c3e789">BuildInfo::getFullVersionString</a>());</div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; msg.insert(<span class="stringliteral">&quot;Content-Type&quot;</span>, <span class="stringliteral">&quot;text/html&quot;</span>);</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; msg.insert(<span class="stringliteral">&quot;Connection&quot;</span>, <span class="stringliteral">&quot;close&quot;</span>);</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; msg.prepare_payload();</div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; handoff.<a class="code" href="structripple_1_1Handoff.html#a808daa7fd8b0b6f64aec56b83ce5fe85">response</a> = std::make_shared&lt;SimpleWriter&gt;(msg);</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">return</span> handoff;</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;}</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; </div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; </div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l01033"></a><span class="lineno"><a class="line" href="structripple_1_1ServerHandlerImp_1_1Setup.html#acf2e4a0b32981ef7eb945aad361bafd2"> 1033</a></span>&#160;<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#acf2e4a0b32981ef7eb945aad361bafd2">ServerHandler::Setup::makeContexts</a>()</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;{</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; p : <a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>)</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; {</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">if</span> (p.secure())</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; {</div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="keywordflow">if</span> (p.ssl_key.empty() &amp;&amp; p.ssl_cert.empty() &amp;&amp; p.ssl_chain.empty())</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; p.context = <a class="code" href="namespaceripple.html#a4d435c32e5733f8d57bf0562c25e0f3b">make_SSLContext</a>(p.ssl_ciphers);</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; p.context = <a class="code" href="namespaceripple.html#ae8b021ae4b350b66b5e9e39f4a32c844">make_SSLContextAuthed</a>(</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; p.ssl_key, p.ssl_cert, p.ssl_chain, p.ssl_ciphers);</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; }</div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; {</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; p.context = std::make_shared&lt;boost::asio::ssl::context&gt;(</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; boost::asio::ssl::context::sslv23);</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;}</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; </div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="keyword">static</span> <a class="code" href="structripple_1_1Port.html">Port</a></div>
<div class="line"><a name="l01054"></a><span class="lineno"><a class="line" href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b"> 1054</a></span>&#160;<a class="code" href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b">to_Port</a>(<a class="code" href="structripple_1_1ParsedPort.html">ParsedPort</a> <span class="keyword">const</span>&amp; parsed, <a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::ostream</a>&amp; log)</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;{</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <a class="code" href="structripple_1_1Port.html">Port</a> p;</div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a7e18473959ba367d022b923434241324">name</a>;</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; </div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">if</span> (!parsed.<a class="code" href="structripple_1_1ParsedPort.html#ae32c2f5693e35df49944be81a716f2c3">ip</a>)</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; {</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing &#39;ip&#39; in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; }</div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ae1ba6b8a6edf8c2544ebe903fffef178">ip</a> = *parsed.<a class="code" href="structripple_1_1ParsedPort.html#ae32c2f5693e35df49944be81a716f2c3">ip</a>;</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; </div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="keywordflow">if</span> (!parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a>)</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; {</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing &#39;port&#39; in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; }</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a> == 0)</div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; {</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Port &quot;</span> &lt;&lt; *parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a> &lt;&lt; <span class="stringliteral">&quot;in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;] is invalid&quot;</span>;</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; }</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a0c5ce3306e741211ad5a08073f07ff29">port</a> = *parsed.<a class="code" href="structripple_1_1ParsedPort.html#a379a41d37bcc5806794320915b6d151e">port</a>;</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; </div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">if</span> (parsed.<a class="code" href="structripple_1_1ParsedPort.html#a6f5cbe8976ce63af96dccfa383874ff8">protocol</a>.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/set/empty.html">empty</a>())</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; {</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing &#39;protocol&#39; in [&quot;</span> &lt;&lt; p.<a class="code" href="structripple_1_1Port.html#af27390c27984b98c5590b88ee78313a2">name</a> &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; }</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a41c843b31298cfa936f0d99e15bd843f">protocol</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a6f5cbe8976ce63af96dccfa383874ff8">protocol</a>;</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; </div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; p.<a class="code" href="structripple_1_1Port.html#acfff0cffb176d6ea929cdb82c68cf882">user</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a41912c012fa79bda189fb36041ba69be">user</a>;</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a27d3bc7390a8f0d728bb00446353e95c">password</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ab2a7830b8107f09c88af6525f2746c18">password</a>;</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ab1245b88601b253a079502b602d35d6a">admin_user</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ae2634e2aa4f3f491bdbc8fc4a7bcbb85">admin_user</a>;</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; p.<a class="code" href="structripple_1_1Port.html#aef3fd85511dc4d06046e84f4baa08063">admin_password</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a77a3490a5b883160ad79fc9a9465d01b">admin_password</a>;</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a94b5bfbc5b8b8c58cf15be92ffe7e4d8">ssl_key</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a4f5b226aeea7910ad9d8ed46d41c7600">ssl_key</a>;</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a8e80a833c4ee32124909c5842d3f504e">ssl_cert</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ac9fb4e80d5371867f17ca67ac2fa877e">ssl_cert</a>;</div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a15de8caf0aa37baa379bec53ba23362c">ssl_chain</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a85c9d257b0ac9158ced4c30fba44f211">ssl_chain</a>;</div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ae5e84afe0fc12a5c33fa7ded231102a5">ssl_ciphers</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a23711e66cdaa65feaf3eaf67815b7ef8">ssl_ciphers</a>;</div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; p.<a class="code" href="structripple_1_1Port.html#afa8100376068ed4e75e6074a76f0d85d">pmd_options</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a2ae919a80218f904b136a80093b718d5">pmd_options</a>;</div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ae2db78e42b633d96af146c67543215e9">ws_queue_limit</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a509e4603be0b45a4c28ab6c2e6632142">ws_queue_limit</a>;</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a9000e3fcf242f5fc0e37924df80d0f8f">limit</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a2f73a7a8f938dba788ca358f2ef86170">limit</a>;</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; p.<a class="code" href="structripple_1_1Port.html#af662681da13f59b5784618916f4ee015">admin_nets_v4</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a3fe32f5a0b54244c90f6b7684f57775c">admin_nets_v4</a>;</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; p.<a class="code" href="structripple_1_1Port.html#a388b34fc701fabbdb91fa5e935e191b7">admin_nets_v6</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#ab7f5cf9ef9920924eefb47f07e4bfbaf">admin_nets_v6</a>;</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; p.<a class="code" href="structripple_1_1Port.html#ad58922a18221abf77c3f3937b21480fa">secure_gateway_nets_v4</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#af6352ba8e1ca2026696d5f38447753da">secure_gateway_nets_v4</a>;</div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; p.<a class="code" href="structripple_1_1Port.html#aa5b0b1ee9736658c12e97ae028c5f9bb">secure_gateway_nets_v6</a> = parsed.<a class="code" href="structripple_1_1ParsedPort.html#a616ba634f3c33ee5612c0d0c3968cc4d">secure_gateway_nets_v6</a>;</div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; </div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <a class="code" href="structripple_1_1ParsedPort.html">ParsedPort</a> common;</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <a class="code" href="namespaceripple.html#a5b67e65f60cd241099149dc88f1e4bfd">parse_Port</a>(common, config[<span class="stringliteral">&quot;server&quot;</span>], log);</div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">return</span> p;</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;}</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; </div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; names = config.<a class="code" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;server&quot;</span>).<a class="code" href="classripple_1_1Section.html#a320f911d1e931b45b71a50c25561ecf7">values</a>();</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(names.size());</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; name : names)</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; {</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">if</span> (!config.<a class="code" href="classripple_1_1BasicConfig.html#a09b31b8ed3c769b4c23b040c3d4798ed">exists</a>(name))</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; {</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing section: [&quot;</span> &lt;&lt; name &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; }</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <a class="code" href="structripple_1_1ParsedPort.html">ParsedPort</a> parsed = common;</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; parsed.<a class="code" href="structripple_1_1ParsedPort.html#a7e18473959ba367d022b923434241324">name</a> = name;</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <a class="code" href="namespaceripple.html#a5b67e65f60cd241099149dc88f1e4bfd">parse_Port</a>(parsed, config[name], log);</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(<a class="code" href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b">to_Port</a>(parsed, log));</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; }</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; </div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="keywordflow">if</span> (config.<a class="code" href="classripple_1_1Config.html#a55cd8ef67ffbf6a137e0dd71bc8151c6">standalone</a>())</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; {</div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="keyword">auto</span> it = result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/begin.html">begin</a>();</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; </div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">while</span> (it != result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/end.html">end</a>())</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; {</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">auto</span>&amp; p = it-&gt;protocol;</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; </div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="comment">// Remove the peer protocol, and if that would</span></div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="comment">// leave the port empty, remove the port as well</span></div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">if</span> (p.erase(<span class="stringliteral">&quot;peer&quot;</span>) &amp;&amp; p.empty())</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; it = result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/erase.html">erase</a>(it);</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; ++it;</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; }</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; }</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; {</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> count =</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/algorithm/count.html">std::count_if</a>(result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/begin.html">cbegin</a>(), result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/end.html">cend</a>(), [](<a class="code" href="structripple_1_1Port.html">Port</a> <span class="keyword">const</span>&amp; p) {</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; return p.protocol.count(<span class="stringliteral">&quot;peer&quot;</span>) != 0;</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; });</div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; </div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">if</span> (count &gt; 1)</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; {</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Error: More than one peer protocol configured in [server]&quot;</span>;</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; }</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; </div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">if</span> (count == 0)</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Warning: No peer protocol configured&quot;</span>;</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; }</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; </div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;}</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; </div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;<span class="comment">// Fill out the client portion of the Setup</span></div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l01157"></a><span class="lineno"><a class="line" href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79"> 1157</a></span>&#160;<a class="code" href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79">setup_Client</a>(<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html">ServerHandler::Setup</a>&amp; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>)</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;{</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; decltype(<a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>)::<a class="code" href="classripple_1_1Dir_1_1const__iterator.html">const_iterator</a> iter;</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">for</span> (iter = <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cbegin(); iter != <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend(); ++iter)</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">if</span> (iter-&gt;protocol.count(<span class="stringliteral">&quot;http&quot;</span>) &gt; 0 ||</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; iter-&gt;protocol.count(<span class="stringliteral">&quot;https&quot;</span>) &gt; 0)</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="keywordflow">if</span> (iter == <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend())</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a44fccc2b575144cf16688e0510446bd4">secure</a> = iter-&gt;protocol.count(<span class="stringliteral">&quot;https&quot;</span>) &gt; 0;</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a1cfba82de3995bc70e297f18eee2dcef">ip</a> = <a class="code" href="namespacebeast_1_1IP.html#ab294c32a52d800b61d2fbe6f6d130faa">beast::IP::is_unspecified</a>(iter-&gt;ip)</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; ?</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="comment">// VFALCO HACK! to make localhost work</span></div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; (iter-&gt;ip.is_v6() ? <span class="stringliteral">&quot;::1&quot;</span> : <span class="stringliteral">&quot;127.0.0.1&quot;</span>)</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; : iter-&gt;ip.to_string();</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a71b103879153f77cac77ef88f3d3fb81">port</a> = iter-&gt;port;</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a5bb3e4c3f647d26ffc9bdeb011c776f8">user</a> = iter-&gt;user;</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#adae7271497ad30628f2c5d7ffbca9672">password</a> = iter-&gt;password;</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a407fa705ff2453644d66ff9236124043">admin_user</a> = iter-&gt;admin_user;</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a34a533292e151fe67b0daa142369841f">admin_password</a> = iter-&gt;admin_password;</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;}</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; </div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;<span class="comment">// Fill out the overlay portion of the Setup</span></div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l01181"></a><span class="lineno"><a class="line" href="namespaceripple.html#ab2ca61e1324164fc5b731835c119b0b1"> 1181</a></span>&#160;<a class="code" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">setup_Overlay</a>(<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html">ServerHandler::Setup</a>&amp; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>)</div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;{</div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> iter = <a class="codeRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(</div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cbegin(), <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend(), [](<a class="code" href="structripple_1_1Port.html">Port</a> <span class="keyword">const</span>&amp; port) {</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; return port.protocol.count(<span class="stringliteral">&quot;peer&quot;</span>) != 0;</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; });</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">if</span> (iter == <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend())</div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; {</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a581fef76b080ebf0e1a7f604cf81df72">overlay</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1overlay__t.html#a96eb29d239d6960eafc2e189b8086a03">port</a> = 0;</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; }</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a581fef76b080ebf0e1a7f604cf81df72">overlay</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1overlay__t.html#a981c3f48f0dd80a0ac78bc22f59c3b2d">ip</a> = iter-&gt;ip;</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a581fef76b080ebf0e1a7f604cf81df72">overlay</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1overlay__t.html#a96eb29d239d6960eafc2e189b8086a03">port</a> = iter-&gt;port;</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;}</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; </div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;ServerHandler::Setup</div>
<div class="line"><a name="l01197"></a><span class="lineno"><a class="line" href="namespaceripple.html#a9717a8236d67d262b4e5273712ac545c"> 1197</a></span>&#160;<a class="code" href="namespaceripple.html#a9717a8236d67d262b4e5273712ac545c">setup_ServerHandler</a>(<a class="code" href="classripple_1_1Config.html">Config</a> <span class="keyword">const</span>&amp; config, <a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::ostream</a>&amp;&amp; log)</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;{</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html">ServerHandler::Setup</a> <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>;</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a> = <a class="code" href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0">parse_Ports</a>(config, log);</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; </div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <a class="code" href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79">setup_Client</a>(<a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>);</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <a class="code" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">setup_Overlay</a>(<a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>);</div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; </div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>;</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;}</div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; </div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr&lt;ServerHandler&gt;</a></div>
<div class="line"><a name="l01209"></a><span class="lineno"><a class="line" href="namespaceripple.html#a44d8c60c9f62e56bb5ad95874dfa9eba"> 1209</a></span>&#160;<a class="code" href="namespaceripple.html#a44d8c60c9f62e56bb5ad95874dfa9eba">make_ServerHandler</a>(</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <a class="code" href="classripple_1_1Application.html">Application</a>&amp; app,</div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; boost::asio::io_service&amp; io_service,</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <a class="code" href="classripple_1_1JobQueue.html">JobQueue</a>&amp; jobQueue,</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="classripple_1_1NetworkOPs.html">NetworkOPs</a>&amp; networkOPs,</div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="classripple_1_1Resource_1_1Manager.html">Resource::Manager</a>&amp; resourceManager,</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="classripple_1_1CollectorManager.html">CollectorManager</a>&amp; cm)</div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;{</div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;ServerHandlerImp&gt;(</div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; app, io_service, jobQueue, networkOPs, resourceManager, cm);</div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;}</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; </div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="keyword">static</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;Port&gt;</a></div>
<div class="line"><a name="l01105"></a><span class="lineno"><a class="line" href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0"> 1105</a></span>&#160;<a class="code" href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0">parse_Ports</a>(<a class="code" href="classripple_1_1Config.html">Config</a> <span class="keyword">const</span>&amp; config, <a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::ostream</a>&amp; log)</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;{</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;Port&gt;</a> result;</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; </div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">if</span> (!config.<a class="code" href="classripple_1_1BasicConfig.html#a09b31b8ed3c769b4c23b040c3d4798ed">exists</a>(<span class="stringliteral">&quot;server&quot;</span>))</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; {</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Required section [server] is missing&quot;</span>;</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; }</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; </div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <a class="code" href="structripple_1_1ParsedPort.html">ParsedPort</a> common;</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <a class="code" href="namespaceripple.html#a5b67e65f60cd241099149dc88f1e4bfd">parse_Port</a>(common, config[<span class="stringliteral">&quot;server&quot;</span>], log);</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; </div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; names = config.<a class="code" href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">section</a>(<span class="stringliteral">&quot;server&quot;</span>).<a class="code" href="classripple_1_1Section.html#a320f911d1e931b45b71a50c25561ecf7">values</a>();</div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(names.size());</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; name : names)</div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; {</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">if</span> (!config.<a class="code" href="classripple_1_1BasicConfig.html#a09b31b8ed3c769b4c23b040c3d4798ed">exists</a>(name))</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; {</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Missing section: [&quot;</span> &lt;&lt; name &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; }</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <a class="code" href="structripple_1_1ParsedPort.html">ParsedPort</a> parsed = common;</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; parsed.<a class="code" href="structripple_1_1ParsedPort.html#a7e18473959ba367d022b923434241324">name</a> = name;</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <a class="code" href="namespaceripple.html#a5b67e65f60cd241099149dc88f1e4bfd">parse_Port</a>(parsed, config[name], log);</div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(<a class="code" href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b">to_Port</a>(parsed, log));</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; }</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; </div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">if</span> (config.<a class="code" href="classripple_1_1Config.html#a55cd8ef67ffbf6a137e0dd71bc8151c6">standalone</a>())</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; {</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keyword">auto</span> it = result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/begin.html">begin</a>();</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; </div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">while</span> (it != result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/end.html">end</a>())</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; {</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keyword">auto</span>&amp; p = it-&gt;protocol;</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; </div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">// Remove the peer protocol, and if that would</span></div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="comment">// leave the port empty, remove the port as well</span></div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keywordflow">if</span> (p.erase(<span class="stringliteral">&quot;peer&quot;</span>) &amp;&amp; p.empty())</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; it = result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/erase.html">erase</a>(it);</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; ++it;</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; }</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; }</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; {</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> count =</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/algorithm/count.html">std::count_if</a>(result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/begin.html">cbegin</a>(), result.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/end.html">cend</a>(), [](<a class="code" href="structripple_1_1Port.html">Port</a> <span class="keyword">const</span>&amp; p) {</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; return p.protocol.count(<span class="stringliteral">&quot;peer&quot;</span>) != 0;</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; });</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; </div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="keywordflow">if</span> (count &gt; 1)</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; {</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Error: More than one peer protocol configured in [server]&quot;</span>;</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; Throw&lt;std::exception&gt;();</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; }</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; </div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">if</span> (count == 0)</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; log &lt;&lt; <span class="stringliteral">&quot;Warning: No peer protocol configured&quot;</span>;</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; </div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;}</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; </div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="comment">// Fill out the client portion of the Setup</span></div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l01171"></a><span class="lineno"><a class="line" href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79"> 1171</a></span>&#160;<a class="code" href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79">setup_Client</a>(<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html">ServerHandler::Setup</a>&amp; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>)</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;{</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; decltype(<a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>)::<a class="code" href="classripple_1_1Dir_1_1const__iterator.html">const_iterator</a> iter;</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">for</span> (iter = <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cbegin(); iter != <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend(); ++iter)</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="keywordflow">if</span> (iter-&gt;protocol.count(<span class="stringliteral">&quot;http&quot;</span>) &gt; 0 ||</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; iter-&gt;protocol.count(<span class="stringliteral">&quot;https&quot;</span>) &gt; 0)</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">if</span> (iter == <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend())</div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a44fccc2b575144cf16688e0510446bd4">secure</a> = iter-&gt;protocol.count(<span class="stringliteral">&quot;https&quot;</span>) &gt; 0;</div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a1cfba82de3995bc70e297f18eee2dcef">ip</a> = <a class="code" href="namespacebeast_1_1IP.html#ab294c32a52d800b61d2fbe6f6d130faa">beast::IP::is_unspecified</a>(iter-&gt;ip)</div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; ?</div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="comment">// VFALCO HACK! to make localhost work</span></div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; (iter-&gt;ip.is_v6() ? <span class="stringliteral">&quot;::1&quot;</span> : <span class="stringliteral">&quot;127.0.0.1&quot;</span>)</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; : iter-&gt;ip.to_string();</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a71b103879153f77cac77ef88f3d3fb81">port</a> = iter-&gt;port;</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a5bb3e4c3f647d26ffc9bdeb011c776f8">user</a> = iter-&gt;user;</div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#adae7271497ad30628f2c5d7ffbca9672">password</a> = iter-&gt;password;</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a407fa705ff2453644d66ff9236124043">admin_user</a> = iter-&gt;admin_user;</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a0917334d1bcd42466056317511b70200">client</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1client__t.html#a34a533292e151fe67b0daa142369841f">admin_password</a> = iter-&gt;admin_password;</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;}</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; </div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="comment">// Fill out the overlay portion of the Setup</span></div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l01195"></a><span class="lineno"><a class="line" href="namespaceripple.html#ab2ca61e1324164fc5b731835c119b0b1"> 1195</a></span>&#160;<a class="code" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">setup_Overlay</a>(<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html">ServerHandler::Setup</a>&amp; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>)</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;{</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> iter = <a class="codeRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cbegin(), <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend(), [](<a class="code" href="structripple_1_1Port.html">Port</a> <span class="keyword">const</span>&amp; port) {</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; return port.protocol.count(<span class="stringliteral">&quot;peer&quot;</span>) != 0;</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; });</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">if</span> (iter == <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a>.cend())</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; {</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a581fef76b080ebf0e1a7f604cf81df72">overlay</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1overlay__t.html#a96eb29d239d6960eafc2e189b8086a03">port</a> = 0;</div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; }</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a581fef76b080ebf0e1a7f604cf81df72">overlay</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1overlay__t.html#a981c3f48f0dd80a0ac78bc22f59c3b2d">ip</a> = iter-&gt;ip;</div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#a581fef76b080ebf0e1a7f604cf81df72">overlay</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup_1_1overlay__t.html#a96eb29d239d6960eafc2e189b8086a03">port</a> = iter-&gt;port;</div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;}</div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; </div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;ServerHandler::Setup</div>
<div class="line"><a name="l01211"></a><span class="lineno"><a class="line" href="namespaceripple.html#a9717a8236d67d262b4e5273712ac545c"> 1211</a></span>&#160;<a class="code" href="namespaceripple.html#a9717a8236d67d262b4e5273712ac545c">setup_ServerHandler</a>(<a class="code" href="classripple_1_1Config.html">Config</a> <span class="keyword">const</span>&amp; config, <a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::ostream</a>&amp;&amp; log)</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;{</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html">ServerHandler::Setup</a> <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>;</div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>.<a class="code" href="structripple_1_1ServerHandlerImp_1_1Setup.html#ac610f2dee7d9f1e1b4716ef0ec477125">ports</a> = <a class="code" href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0">parse_Ports</a>(config, log);</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; </div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <a class="code" href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79">setup_Client</a>(<a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>);</div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <a class="code" href="namespaceripple.html#adc117aa1e40c420ae8c34dea1f2f1bf1">setup_Overlay</a>(<a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>);</div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; </div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1ServerHandlerImp.html#a125b89a61f26cc65f54ac062881d96f0">setup</a>;</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;}</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; </div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr&lt;ServerHandler&gt;</a></div>
<div class="line"><a name="l01223"></a><span class="lineno"><a class="line" href="namespaceripple.html#a44d8c60c9f62e56bb5ad95874dfa9eba"> 1223</a></span>&#160;<a class="code" href="namespaceripple.html#a44d8c60c9f62e56bb5ad95874dfa9eba">make_ServerHandler</a>(</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <a class="code" href="classripple_1_1Application.html">Application</a>&amp; app,</div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; boost::asio::io_service&amp; io_service,</div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <a class="code" href="classripple_1_1JobQueue.html">JobQueue</a>&amp; jobQueue,</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <a class="code" href="classripple_1_1NetworkOPs.html">NetworkOPs</a>&amp; networkOPs,</div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; <a class="code" href="classripple_1_1Resource_1_1Manager.html">Resource::Manager</a>&amp; resourceManager,</div>
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="code" href="classripple_1_1CollectorManager.html">CollectorManager</a>&amp; cm)</div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;{</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;ServerHandlerImp&gt;(</div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; app, io_service, jobQueue, networkOPs, resourceManager, cm);</div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;}</div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; </div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassripple_1_1Resource_1_1Manager_html_a031c6f28346713cb93ea3ff9018f6a9a"><div class="ttname"><a href="classripple_1_1Resource_1_1Manager.html#a031c6f28346713cb93ea3ff9018f6a9a">ripple::Resource::Manager::newInboundEndpoint</a></div><div class="ttdeci">virtual Consumer newInboundEndpoint(beast::IP::Endpoint const &amp;address)=0</div><div class="ttdoc">Create a new endpoint keyed by inbound IP address or the forwarded IP if proxied.</div></div>
<div class="ttc" id="aclassripple_1_1NetworkOPs_html"><div class="ttname"><a href="classripple_1_1NetworkOPs.html">ripple::NetworkOPs</a></div><div class="ttdoc">Provides server functionality for clients.</div><div class="ttdef"><b>Definition:</b> <a href="NetworkOPs_8h_source.html#l00086">NetworkOPs.h:86</a></div></div>
@@ -1363,9 +1377,9 @@ $(function() {
<div class="ttc" id="astructripple_1_1Port_html_a0c5ce3306e741211ad5a08073f07ff29"><div class="ttname"><a href="structripple_1_1Port.html#a0c5ce3306e741211ad5a08073f07ff29">ripple::Port::port</a></div><div class="ttdeci">std::uint16_t port</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00054">Port.h:54</a></div></div>
<div class="ttc" id="astructripple_1_1ParsedPort_html"><div class="ttname"><a href="structripple_1_1ParsedPort.html">ripple::ParsedPort</a></div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00096">Port.h:96</a></div></div>
<div class="ttc" id="aclassripple_1_1ServerHandlerImp_html_a6292a075e2699dcbfe6a38265b93e0d3"><div class="ttname"><a href="classripple_1_1ServerHandlerImp.html#a6292a075e2699dcbfe6a38265b93e0d3">ripple::ServerHandlerImp::onRequest</a></div><div class="ttdeci">void onRequest(Session &amp;session)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l00274">ServerHandlerImp.cpp:274</a></div></div>
<div class="ttc" id="astructripple_1_1ServerHandlerImp_1_1Setup_html_acf2e4a0b32981ef7eb945aad361bafd2"><div class="ttname"><a href="structripple_1_1ServerHandlerImp_1_1Setup.html#acf2e4a0b32981ef7eb945aad361bafd2">ripple::ServerHandlerImp::Setup::makeContexts</a></div><div class="ttdeci">void makeContexts()</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01019">ServerHandlerImp.cpp:1019</a></div></div>
<div class="ttc" id="astructripple_1_1ServerHandlerImp_1_1Setup_html_acf2e4a0b32981ef7eb945aad361bafd2"><div class="ttname"><a href="structripple_1_1ServerHandlerImp_1_1Setup.html#acf2e4a0b32981ef7eb945aad361bafd2">ripple::ServerHandlerImp::Setup::makeContexts</a></div><div class="ttdeci">void makeContexts()</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01033">ServerHandlerImp.cpp:1033</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae0f54f8ce649d639bf3e2b295347e17aa08b32fb23bf7f80fdc6ae53812f5c6ac"><div class="ttname"><a href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aa08b32fb23bf7f80fdc6ae53812f5c6ac">ripple::jtCLIENT_RPC</a></div><div class="ttdeci">@ jtCLIENT_RPC</div><div class="ttdef"><b>Definition:</b> <a href="Job_8h_source.html#l00051">Job.h:51</a></div></div>
<div class="ttc" id="aclassripple_1_1ServerHandlerImp_html_ad75e744ed8a9fda6d46bcc8d87b33a38"><div class="ttname"><a href="classripple_1_1ServerHandlerImp.html#ad75e744ed8a9fda6d46bcc8d87b33a38">ripple::ServerHandlerImp::statusResponse</a></div><div class="ttdeci">Handoff statusResponse(http_request_type const &amp;request) const</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l00987">ServerHandlerImp.cpp:987</a></div></div>
<div class="ttc" id="aclassripple_1_1ServerHandlerImp_html_ad75e744ed8a9fda6d46bcc8d87b33a38"><div class="ttname"><a href="classripple_1_1ServerHandlerImp.html#ad75e744ed8a9fda6d46bcc8d87b33a38">ripple::ServerHandlerImp::statusResponse</a></div><div class="ttdeci">Handoff statusResponse(http_request_type const &amp;request) const</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01001">ServerHandlerImp.cpp:1001</a></div></div>
<div class="ttc" id="astructripple_1_1Port_html_a41c843b31298cfa936f0d99e15bd843f"><div class="ttname"><a href="structripple_1_1Port.html#a41c843b31298cfa936f0d99e15bd843f">ripple::Port::protocol</a></div><div class="ttdeci">std::set&lt; std::string, boost::beast::iless &gt; protocol</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00055">Port.h:55</a></div></div>
<div class="ttc" id="aalgorithm_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae7d1335ce20e70be939ceea8a8f6945f"><div class="ttname"><a href="namespaceripple.html#ae7d1335ce20e70be939ceea8a8f6945f">ripple::isStatusRequest</a></div><div class="ttdeci">static bool isStatusRequest(http_request_type const &amp;request)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l00056">ServerHandlerImp.cpp:56</a></div></div>
@@ -1380,7 +1394,7 @@ $(function() {
<div class="ttc" id="apush_back_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">std::vector::push_back</a></div><div class="ttdeci">T push_back(T... args)</div></div>
<div class="ttc" id="astructbeast_1_1IPAddressConversion_html_a5e02e604b7d4a590f7ceb14a26a6947b"><div class="ttname"><a href="structbeast_1_1IPAddressConversion.html#a5e02e604b7d4a590f7ceb14a26a6947b">beast::IPAddressConversion::from_asio</a></div><div class="ttdeci">static IP::Endpoint from_asio(boost::asio::ip::address const &amp;address)</div><div class="ttdef"><b>Definition:</b> <a href="IPAddressConversion_8h_source.html#l00063">IPAddressConversion.h:63</a></div></div>
<div class="ttc" id="aclassripple_1_1ServerHandlerImp_html_adc58b4538fc24ffa1a0563256e958a78"><div class="ttname"><a href="classripple_1_1ServerHandlerImp.html#adc58b4538fc24ffa1a0563256e958a78">ripple::ServerHandlerImp::rpc_time_</a></div><div class="ttdeci">beast::insight::Event rpc_time_</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8h_source.html#l00101">ServerHandlerImp.h:101</a></div></div>
<div class="ttc" id="anamespaceripple_html_a9717a8236d67d262b4e5273712ac545c"><div class="ttname"><a href="namespaceripple.html#a9717a8236d67d262b4e5273712ac545c">ripple::setup_ServerHandler</a></div><div class="ttdeci">ServerHandler::Setup setup_ServerHandler(Config const &amp;config, std::ostream &amp;&amp;log)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01197">ServerHandlerImp.cpp:1197</a></div></div>
<div class="ttc" id="anamespaceripple_html_a9717a8236d67d262b4e5273712ac545c"><div class="ttname"><a href="namespaceripple.html#a9717a8236d67d262b4e5273712ac545c">ripple::setup_ServerHandler</a></div><div class="ttdeci">ServerHandler::Setup setup_ServerHandler(Config const &amp;config, std::ostream &amp;&amp;log)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01211">ServerHandlerImp.cpp:1211</a></div></div>
<div class="ttc" id="astdexcept_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/stdexcept.html">stdexcept</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae0f54f8ce649d639bf3e2b295347e17aaf73ecc1ab3356b01068bf5532d80d483"><div class="ttname"><a href="namespaceripple.html#ae0f54f8ce649d639bf3e2b295347e17aaf73ecc1ab3356b01068bf5532d80d483">ripple::jtCLIENT_WEBSOCKET</a></div><div class="ttdeci">@ jtCLIENT_WEBSOCKET</div><div class="ttdef"><b>Definition:</b> <a href="Job_8h_source.html#l00052">Job.h:52</a></div></div>
<div class="ttc" id="aclassripple_1_1CollectorManager_html_a5f94c050333714bcb4eaed94a5f04b71"><div class="ttname"><a href="classripple_1_1CollectorManager.html#a5f94c050333714bcb4eaed94a5f04b71">ripple::CollectorManager::group</a></div><div class="ttdeci">virtual beast::insight::Group::ptr const &amp; group(std::string const &amp;name)=0</div></div>
@@ -1393,7 +1407,7 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_a32d6d3ce1a48272b677d2c88b1d30932a55a275d2d3a5e83d075c30650592949d"><div class="ttname"><a href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a55a275d2d3a5e83d075c30650592949d">ripple::rpcSLOW_DOWN</a></div><div class="ttdeci">@ rpcSLOW_DOWN</div><div class="ttdef"><b>Definition:</b> <a href="ErrorCodes_8h_source.html#l00057">ErrorCodes.h:57</a></div></div>
<div class="ttc" id="aclassripple_1_1ServerHandlerImp_html_ae81dd23e516c70546341ea65b54859d2"><div class="ttname"><a href="classripple_1_1ServerHandlerImp.html#ae81dd23e516c70546341ea65b54859d2">ripple::ServerHandlerImp::mutex_</a></div><div class="ttdeci">std::mutex mutex_</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8h_source.html#l00102">ServerHandlerImp.h:102</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac597446213f304f13375429394c69909"><div class="ttname"><a href="namespaceripple.html#ac597446213f304f13375429394c69909">ripple::statusRequestResponse</a></div><div class="ttdeci">static Handoff statusRequestResponse(http_request_type const &amp;request, boost::beast::http::status status)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l00064">ServerHandlerImp.cpp:64</a></div></div>
<div class="ttc" id="anamespaceripple_html_a44d8c60c9f62e56bb5ad95874dfa9eba"><div class="ttname"><a href="namespaceripple.html#a44d8c60c9f62e56bb5ad95874dfa9eba">ripple::make_ServerHandler</a></div><div class="ttdeci">std::unique_ptr&lt; ServerHandler &gt; make_ServerHandler(Application &amp;app, boost::asio::io_service &amp;io_service, JobQueue &amp;jobQueue, NetworkOPs &amp;networkOPs, Resource::Manager &amp;resourceManager, CollectorManager &amp;cm)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01209">ServerHandlerImp.cpp:1209</a></div></div>
<div class="ttc" id="anamespaceripple_html_a44d8c60c9f62e56bb5ad95874dfa9eba"><div class="ttname"><a href="namespaceripple.html#a44d8c60c9f62e56bb5ad95874dfa9eba">ripple::make_ServerHandler</a></div><div class="ttdeci">std::unique_ptr&lt; ServerHandler &gt; make_ServerHandler(Application &amp;app, boost::asio::io_service &amp;io_service, JobQueue &amp;jobQueue, NetworkOPs &amp;networkOPs, Resource::Manager &amp;resourceManager, CollectorManager &amp;cm)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01223">ServerHandlerImp.cpp:1223</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a0005228a2b40d12b6985ac48bd768940"><div class="ttname"><a href="classripple_1_1Application.html#a0005228a2b40d12b6985ac48bd768940">ripple::Application::serverOkay</a></div><div class="ttdeci">virtual bool serverOkay(std::string &amp;reason)=0</div></div>
<div class="ttc" id="astructripple_1_1Port_html_a388b34fc701fabbdb91fa5e935e191b7"><div class="ttname"><a href="structripple_1_1Port.html#a388b34fc701fabbdb91fa5e935e191b7">ripple::Port::admin_nets_v6</a></div><div class="ttdeci">std::vector&lt; boost::asio::ip::network_v6 &gt; admin_nets_v6</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00057">Port.h:57</a></div></div>
<div class="ttc" id="aclassripple_1_1ServerHandlerImp_html_abdc517639e239157dbb5565a5a6ffbb5"><div class="ttname"><a href="classripple_1_1ServerHandlerImp.html#abdc517639e239157dbb5565a5a6ffbb5">ripple::ServerHandlerImp::processRequest</a></div><div class="ttdeci">void processRequest(Port const &amp;port, std::string const &amp;request, beast::IP::Endpoint const &amp;remoteIPAddress, Output &amp;&amp;, std::shared_ptr&lt; JobQueue::Coro &gt; coro, boost::string_view forwardedFor, boost::string_view user)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l00588">ServerHandlerImp.cpp:588</a></div></div>
@@ -1446,7 +1460,7 @@ $(function() {
<div class="ttc" id="astructripple_1_1Handoff_html_aaa0aa2a937dec4a692870365b7a4ad3d"><div class="ttname"><a href="structripple_1_1Handoff.html#aaa0aa2a937dec4a692870365b7a4ad3d">ripple::Handoff::moved</a></div><div class="ttdeci">bool moved</div><div class="ttdef"><b>Definition:</b> <a href="Handoff_8h_source.html#l00041">Handoff.h:41</a></div></div>
<div class="ttc" id="aclassripple_1_1ServerHandlerImp_html_a0c17eba93b95e41b4e897383fbbf9a6d"><div class="ttname"><a href="classripple_1_1ServerHandlerImp.html#a0c17eba93b95e41b4e897383fbbf9a6d">ripple::ServerHandlerImp::m_resourceManager</a></div><div class="ttdeci">Resource::Manager &amp; m_resourceManager</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8h_source.html#l00093">ServerHandlerImp.h:93</a></div></div>
<div class="ttc" id="aappend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">std::string::append</a></div><div class="ttdeci">T append(T... args)</div></div>
<div class="ttc" id="anamespaceripple_html_a1657c1d18a31190f61b59652b4184b3b"><div class="ttname"><a href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b">ripple::to_Port</a></div><div class="ttdeci">static Port to_Port(ParsedPort const &amp;parsed, std::ostream &amp;log)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01040">ServerHandlerImp.cpp:1040</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1657c1d18a31190f61b59652b4184b3b"><div class="ttname"><a href="namespaceripple.html#a1657c1d18a31190f61b59652b4184b3b">ripple::to_Port</a></div><div class="ttdeci">static Port to_Port(ParsedPort const &amp;parsed, std::ostream &amp;log)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01054">ServerHandlerImp.cpp:1054</a></div></div>
<div class="ttc" id="aclassripple_1_1StreambufWSMsg_html"><div class="ttname"><a href="classripple_1_1StreambufWSMsg.html">ripple::StreambufWSMsg</a></div><div class="ttdef"><b>Definition:</b> <a href="WSSession_8h_source.html#l00072">WSSession.h:72</a></div></div>
<div class="ttc" id="astructripple_1_1Port_html_afa8100376068ed4e75e6074a76f0d85d"><div class="ttname"><a href="structripple_1_1Port.html#afa8100376068ed4e75e6074a76f0d85d">ripple::Port::pmd_options</a></div><div class="ttdeci">boost::beast::websocket::permessage_deflate pmd_options</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00068">Port.h:68</a></div></div>
<div class="ttc" id="astructripple_1_1ParsedPort_html_a85c9d257b0ac9158ced4c30fba44f211"><div class="ttname"><a href="structripple_1_1ParsedPort.html#a85c9d257b0ac9158ced4c30fba44f211">ripple::ParsedPort::ssl_chain</a></div><div class="ttdeci">std::string ssl_chain</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00108">Port.h:108</a></div></div>
@@ -1482,7 +1496,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1Resource_1_1Consumer_html"><div class="ttname"><a href="classripple_1_1Resource_1_1Consumer.html">ripple::Resource::Consumer</a></div><div class="ttdoc">An endpoint that consumes resources.</div><div class="ttdef"><b>Definition:</b> <a href="Consumer_8h_source.html#l00034">Consumer.h:34</a></div></div>
<div class="ttc" id="aclassripple_1_1Resource_1_1Charge_html"><div class="ttname"><a href="classripple_1_1Resource_1_1Charge.html">ripple::Resource::Charge</a></div><div class="ttdoc">A consumption charge.</div><div class="ttdef"><b>Definition:</b> <a href="Charge_8h_source.html#l00030">Charge.h:30</a></div></div>
<div class="ttc" id="astructripple_1_1ParsedPort_html_a509e4603be0b45a4c28ab6c2e6632142"><div class="ttname"><a href="structripple_1_1ParsedPort.html#a509e4603be0b45a4c28ab6c2e6632142">ripple::ParsedPort::ws_queue_limit</a></div><div class="ttdeci">std::uint16_t ws_queue_limit</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00112">Port.h:112</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad3f4a8a0213ea07fa9802d10ee6a4d79"><div class="ttname"><a href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79">ripple::setup_Client</a></div><div class="ttdeci">static void setup_Client(ServerHandler::Setup &amp;setup)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01157">ServerHandlerImp.cpp:1157</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad3f4a8a0213ea07fa9802d10ee6a4d79"><div class="ttname"><a href="namespaceripple.html#ad3f4a8a0213ea07fa9802d10ee6a4d79">ripple::setup_Client</a></div><div class="ttdeci">static void setup_Client(ServerHandler::Setup &amp;setup)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01171">ServerHandlerImp.cpp:1171</a></div></div>
<div class="ttc" id="astructripple_1_1Port_html_a27d3bc7390a8f0d728bb00446353e95c"><div class="ttname"><a href="structripple_1_1Port.html#a27d3bc7390a8f0d728bb00446353e95c">ripple::Port::password</a></div><div class="ttdeci">std::string password</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00061">Port.h:61</a></div></div>
<div class="ttc" id="aclassJson_1_1Reader_html_a269793929575f925b629460c9c744da1"><div class="ttname"><a href="classJson_1_1Reader.html#a269793929575f925b629460c9c744da1">Json::Reader::getFormatedErrorMessages</a></div><div class="ttdeci">std::string getFormatedErrorMessages() const</div><div class="ttdoc">Returns a user friendly string that list errors in the parsed document.</div><div class="ttdef"><b>Definition:</b> <a href="json__reader_8cpp_source.html#l00931">json_reader.cpp:931</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a0511c5e849c6735036d4667a72ff01ee"><div class="ttname"><a href="classripple_1_1Application.html#a0511c5e849c6735036d4667a72ff01ee">ripple::Application::overlay</a></div><div class="ttdeci">virtual Overlay &amp; overlay()=0</div></div>
@@ -1520,7 +1534,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1BasicConfig_html_a09b31b8ed3c769b4c23b040c3d4798ed"><div class="ttname"><a href="classripple_1_1BasicConfig.html#a09b31b8ed3c769b4c23b040c3d4798ed">ripple::BasicConfig::exists</a></div><div class="ttdeci">bool exists(std::string const &amp;name) const</div><div class="ttdoc">Returns true if a section with the given name exists.</div><div class="ttdef"><b>Definition:</b> <a href="BasicConfig_8cpp_source.html#l00121">BasicConfig.cpp:121</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html"><div class="ttname"><a href="classJson_1_1Value.html">Json::Value</a></div><div class="ttdoc">Represents a JSON value.</div><div class="ttdef"><b>Definition:</b> <a href="json__value_8h_source.html#l00145">json_value.h:145</a></div></div>
<div class="ttc" id="aclassbeast_1_1insight_1_1Event_html_af25d64d42a95d26832e7354f07059245"><div class="ttname"><a href="classbeast_1_1insight_1_1Event.html#af25d64d42a95d26832e7354f07059245">beast::insight::Event::notify</a></div><div class="ttdeci">void notify(std::chrono::duration&lt; Rep, Period &gt; const &amp;value) const</div><div class="ttdoc">Push an event notification.</div><div class="ttdef"><b>Definition:</b> <a href="Event_8h_source.html#l00064">Event.h:64</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1f1695344e39dbde3cc619f8256000f0"><div class="ttname"><a href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0">ripple::parse_Ports</a></div><div class="ttdeci">static std::vector&lt; Port &gt; parse_Ports(Config const &amp;config, std::ostream &amp;log)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01091">ServerHandlerImp.cpp:1091</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1f1695344e39dbde3cc619f8256000f0"><div class="ttname"><a href="namespaceripple.html#a1f1695344e39dbde3cc619f8256000f0">ripple::parse_Ports</a></div><div class="ttdeci">static std::vector&lt; Port &gt; parse_Ports(Config const &amp;config, std::ostream &amp;log)</div><div class="ttdef"><b>Definition:</b> <a href="ServerHandlerImp_8cpp_source.html#l01105">ServerHandlerImp.cpp:1105</a></div></div>
<div class="ttc" id="aclassripple_1_1BasicConfig_html_a60aca585d76b1121dd4f72b358729456"><div class="ttname"><a href="classripple_1_1BasicConfig.html#a60aca585d76b1121dd4f72b358729456">ripple::BasicConfig::section</a></div><div class="ttdeci">Section &amp; section(std::string const &amp;name)</div><div class="ttdoc">Returns the section with the given name.</div><div class="ttdef"><b>Definition:</b> <a href="BasicConfig_8cpp_source.html#l00127">BasicConfig.cpp:127</a></div></div>
<div class="ttc" id="astructripple_1_1ParsedPort_html_a3fe32f5a0b54244c90f6b7684f57775c"><div class="ttname"><a href="structripple_1_1ParsedPort.html#a3fe32f5a0b54244c90f6b7684f57775c">ripple::ParsedPort::admin_nets_v4</a></div><div class="ttdeci">std::vector&lt; boost::asio::ip::network_v4 &gt; admin_nets_v4</div><div class="ttdef"><b>Definition:</b> <a href="Port_8h_source.html#l00116">Port.h:116</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html_ab0d86bf425efefd03513e8dbfaca317b"><div class="ttname"><a href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">Json::Value::asString</a></div><div class="ttdeci">std::string asString() const</div><div class="ttdoc">Returns the unquoted string value.</div><div class="ttdef"><b>Definition:</b> <a href="json__value_8cpp_source.html#l00469">json_value.cpp:469</a></div></div>