This file is indexed.

/usr/share/doc/libpion-doc/html/tcp_2server_8hpp_source.html is in libpion-doc 5.0.7+dfsg-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.12"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>pion: include/pion/tcp/server.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">pion
   &#160;<span id="projectnumber">5.0.6</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_96d8a58f4ca411bbafcf73a070f69a21.html">pion</a></li><li class="navelem"><a class="el" href="dir_4713621c0f26f736c910ec7d682ed4d1.html">tcp</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">server.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// ---------------------------------------------------------------------</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// pion:  a Boost C++ framework for building lightweight HTTP interfaces</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// ---------------------------------------------------------------------</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">// Copyright (C) 2007-2014 Splunk Inc.  (https://github.com/splunk/pion)</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">// Distributed under the Boost Software License, Version 1.0.</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">// See http://www.boost.org/LICENSE_1_0.txt</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#ifndef __PION_TCP_SERVER_HEADER__</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#define __PION_TCP_SERVER_HEADER__</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;boost/asio.hpp&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;boost/noncopyable.hpp&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;boost/shared_ptr.hpp&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;boost/thread/mutex.hpp&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;boost/thread/condition.hpp&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;pion/config.hpp&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;pion/logger.hpp&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;pion/scheduler.hpp&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;pion/tcp/connection.hpp&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacepion.html">pion</a> {    <span class="comment">// begin namespace pion</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">namespace </span>tcp {     <span class="comment">// begin namespace tcp</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html">   32</a></span>&#160;<span class="keyword">class </span>PION_API <a class="code" href="classpion_1_1tcp_1_1server.html">server</a> :</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keyword">private</span> boost::noncopyable</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a728020c37ae9ec06197d01b195a24f9e">   38</a></span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a728020c37ae9ec06197d01b195a24f9e">~server</a>() { <span class="keywordflow">if</span> (m_is_listening) stop(<span class="keyword">false</span>); }</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    </div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keywordtype">void</span> start(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="keywordtype">void</span> stop(<span class="keywordtype">bool</span> wait_until_finished = <span class="keyword">false</span>);</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    </div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keywordtype">void</span> join(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    </div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordtype">void</span> set_ssl_key_file(<span class="keyword">const</span> std::string&amp; pem_key_file);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    std::size_t get_connections(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#acac1becb82699098831c720c96a1b45a">   64</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classpion_1_1tcp_1_1server.html#acac1becb82699098831c720c96a1b45a">get_port</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_endpoint.port(); }</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a392e9ede66cf2f96af52655363951e96">   67</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a392e9ede66cf2f96af52655363951e96">set_port</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> p) { m_endpoint.port(p); }</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a13e8d810b63726586856badc21a106e1">   70</a></span>&#160;    <span class="keyword">inline</span> boost::asio::ip::address <a class="code" href="classpion_1_1tcp_1_1server.html#a13e8d810b63726586856badc21a106e1">get_address</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_endpoint.address(); }</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#aa711c8de12d16c2806dc5fe57bed512e">   73</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#aa711c8de12d16c2806dc5fe57bed512e">set_address</a>(<span class="keyword">const</span> boost::asio::ip::address&amp; addr) { m_endpoint.address(addr); }</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    </div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#abc6fcd7827ae52758a243a4c198013a2">   76</a></span>&#160;    <span class="keyword">inline</span> <span class="keyword">const</span> boost::asio::ip::tcp::endpoint&amp; <a class="code" href="classpion_1_1tcp_1_1server.html#abc6fcd7827ae52758a243a4c198013a2">get_endpoint</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_endpoint; }</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a2f460aa6795aa6169c1b1fca5c4daa21">   79</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a2f460aa6795aa6169c1b1fca5c4daa21">set_endpoint</a>(<span class="keyword">const</span> boost::asio::ip::tcp::endpoint&amp; ep) { m_endpoint = ep; }</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#ab969d3a5400d2194d9df6b415ce14ef9">   82</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classpion_1_1tcp_1_1server.html#ab969d3a5400d2194d9df6b415ce14ef9">get_ssl_flag</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ssl_flag; }</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#ac6bb13e1f833a39b28bff7fa71029476">   85</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#ac6bb13e1f833a39b28bff7fa71029476">set_ssl_flag</a>(<span class="keywordtype">bool</span> b = <span class="keyword">true</span>) { m_ssl_flag = b; }</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a11201c6b34424ff5ec11c963629281ed">   88</a></span>&#160;    <span class="keyword">inline</span> connection::ssl_context_type&amp; <a class="code" href="classpion_1_1tcp_1_1server.html#a11201c6b34424ff5ec11c963629281ed">get_ssl_context_type</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_ssl_context; }</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#af0ce958c1bdefb7eee29a30659c38262">   91</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classpion_1_1tcp_1_1server.html#af0ce958c1bdefb7eee29a30659c38262">is_listening</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_is_listening; }</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#abe68393818a75e45d49757532802361e">   94</a></span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#abe68393818a75e45d49757532802361e">set_logger</a>(<a class="code" href="structpion_1_1logger.html">logger</a> log_ptr) { m_logger = log_ptr; }</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#af038c70801875d3d6a3826eb7a80b1c3">   97</a></span>&#160;    <span class="keyword">inline</span> <a class="code" href="structpion_1_1logger.html">logger</a> <a class="code" href="classpion_1_1tcp_1_1server.html#af038c70801875d3d6a3826eb7a80b1c3">get_logger</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_logger; }</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    </div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a41d5b598e52f70db5ae4302bb02370b8">  100</a></span>&#160;    <span class="keyword">inline</span> boost::asio::ip::tcp::acceptor&amp; <a class="code" href="classpion_1_1tcp_1_1server.html#a41d5b598e52f70db5ae4302bb02370b8">get_acceptor</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_tcp_acceptor; }</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a0224269294d70ee9f9a62d1c567f18e3">  103</a></span>&#160;    <span class="keyword">inline</span> <span class="keyword">const</span> boost::asio::ip::tcp::acceptor&amp; <a class="code" href="classpion_1_1tcp_1_1server.html#a0224269294d70ee9f9a62d1c567f18e3">get_acceptor</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_tcp_acceptor; }</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    </div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        </div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tcp_port);</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    </div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<span class="keyword">const</span> boost::asio::ip::tcp::endpoint&amp; endpoint);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<a class="code" href="classpion_1_1scheduler.html">scheduler</a>&amp; sched, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tcp_port = 0);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    </div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <a class="code" href="classpion_1_1tcp_1_1server.html">server</a>(<a class="code" href="classpion_1_1scheduler.html">scheduler</a>&amp; sched, <span class="keyword">const</span> boost::asio::ip::tcp::endpoint&amp; endpoint);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    </div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a1e8ae789868cd0b8eb08e5c3da9b33a4">  144</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a1e8ae789868cd0b8eb08e5c3da9b33a4">handle_connection</a>(<span class="keyword">const</span> tcp::connection_ptr&amp; tcp_conn) {</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        tcp_conn-&gt;set_lifecycle(connection::LIFECYCLE_CLOSE); <span class="comment">// make sure it will get closed</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        tcp_conn-&gt;finish();</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    }</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a814a44fc3d677071b9e2407898765316">  150</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a814a44fc3d677071b9e2407898765316">before_starting</a>(<span class="keywordtype">void</span>) {}</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a23766baf23b7b5be2e43da55547c3a31">  153</a></span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classpion_1_1tcp_1_1server.html#a23766baf23b7b5be2e43da55547c3a31">after_stopping</a>(<span class="keywordtype">void</span>) {}</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    </div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a436e6dbcc3b128b2f9a9be6fd99421b6">  156</a></span>&#160;    <span class="keyword">inline</span> boost::asio::io_service&amp; <a class="code" href="classpion_1_1tcp_1_1server.html#a436e6dbcc3b128b2f9a9be6fd99421b6">get_io_service</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> m_active_scheduler.get_io_service(); }</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    </div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    </div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classpion_1_1tcp_1_1server.html#a0fd391b946961fca8604b902ddb06f7d">  160</a></span>&#160;    <a class="code" href="structpion_1_1logger.html">logger</a>                  <a class="code" href="classpion_1_1tcp_1_1server.html#a0fd391b946961fca8604b902ddb06f7d">m_logger</a>;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    </div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    </div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        </div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordtype">void</span> handle_stop_request(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    </div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordtype">void</span> listen(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordtype">void</span> handle_accept(<span class="keyword">const</span> tcp::connection_ptr&amp; tcp_conn,</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;                      <span class="keyword">const</span> boost::system::error_code&amp; accept_error);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <span class="keywordtype">void</span> handle_ssl_handshake(<span class="keyword">const</span> tcp::connection_ptr&amp; tcp_conn,</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                            <span class="keyword">const</span> boost::system::error_code&amp; handshake_error);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    </div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keywordtype">void</span> finish_connection(<span class="keyword">const</span> tcp::connection_ptr&amp; tcp_conn);</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    </div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    std::size_t prune_connections(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    </div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    </div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <span class="keyword">typedef</span> std::set&lt;tcp::connection_ptr&gt;   ConnectionPool;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    </div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    </div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <a class="code" href="classpion_1_1single__service__scheduler.html">single_service_scheduler</a>                m_default_scheduler;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <a class="code" href="classpion_1_1scheduler.html">scheduler</a> &amp;                             m_active_scheduler;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    </div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    boost::asio::ip::tcp::acceptor          m_tcp_acceptor;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    connection::ssl_context_type            m_ssl_context;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        </div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    boost::condition                        m_server_has_stopped;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    boost::condition                        m_no_more_connections;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    ConnectionPool                          m_conn_pool;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    boost::asio::ip::tcp::endpoint          m_endpoint;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="keywordtype">bool</span>                                    m_ssl_flag;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordtype">bool</span>                                    m_is_listening;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    <span class="keyword">mutable</span> boost::mutex                    m_mutex;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;};</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="keyword">typedef</span> boost::shared_ptr&lt;server&gt;    server_ptr;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;}   <span class="comment">// end namespace tcp</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;}   <span class="comment">// end namespace pion</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="classpion_1_1tcp_1_1server_html_a11201c6b34424ff5ec11c963629281ed"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a11201c6b34424ff5ec11c963629281ed">pion::tcp::server::get_ssl_context_type</a></div><div class="ttdeci">connection::ssl_context_type &amp; get_ssl_context_type(void)</div><div class="ttdoc">returns the SSL context for configuration </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00088">server.hpp:88</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a2f460aa6795aa6169c1b1fca5c4daa21"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a2f460aa6795aa6169c1b1fca5c4daa21">pion::tcp::server::set_endpoint</a></div><div class="ttdeci">void set_endpoint(const boost::asio::ip::tcp::endpoint &amp;ep)</div><div class="ttdoc">sets tcp endpoint that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00079">server.hpp:79</a></div></div>
<div class="ttc" id="classpion_1_1single__service__scheduler_html"><div class="ttname"><a href="classpion_1_1single__service__scheduler.html">pion::single_service_scheduler</a></div><div class="ttdef"><b>Definition:</b> <a href="scheduler_8hpp_source.html#l00246">scheduler.hpp:246</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html">pion::tcp::server</a></div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00032">server.hpp:32</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_ab969d3a5400d2194d9df6b415ce14ef9"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#ab969d3a5400d2194d9df6b415ce14ef9">pion::tcp::server::get_ssl_flag</a></div><div class="ttdeci">bool get_ssl_flag(void) const</div><div class="ttdoc">returns true if the server uses SSL to encrypt connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00082">server.hpp:82</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_af0ce958c1bdefb7eee29a30659c38262"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#af0ce958c1bdefb7eee29a30659c38262">pion::tcp::server::is_listening</a></div><div class="ttdeci">bool is_listening(void) const</div><div class="ttdoc">returns true if the server is listening for connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00091">server.hpp:91</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a13e8d810b63726586856badc21a106e1"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a13e8d810b63726586856badc21a106e1">pion::tcp::server::get_address</a></div><div class="ttdeci">boost::asio::ip::address get_address(void) const</div><div class="ttdoc">returns IP address that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00070">server.hpp:70</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a0224269294d70ee9f9a62d1c567f18e3"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a0224269294d70ee9f9a62d1c567f18e3">pion::tcp::server::get_acceptor</a></div><div class="ttdeci">const boost::asio::ip::tcp::acceptor &amp; get_acceptor(void) const</div><div class="ttdoc">returns const reference to the TCP connection acceptor </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00103">server.hpp:103</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a41d5b598e52f70db5ae4302bb02370b8"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a41d5b598e52f70db5ae4302bb02370b8">pion::tcp::server::get_acceptor</a></div><div class="ttdeci">boost::asio::ip::tcp::acceptor &amp; get_acceptor(void)</div><div class="ttdoc">returns mutable reference to the TCP connection acceptor </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00100">server.hpp:100</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a436e6dbcc3b128b2f9a9be6fd99421b6"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a436e6dbcc3b128b2f9a9be6fd99421b6">pion::tcp::server::get_io_service</a></div><div class="ttdeci">boost::asio::io_service &amp; get_io_service(void)</div><div class="ttdoc">returns an async I/O service used to schedule work </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00156">server.hpp:156</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_abc6fcd7827ae52758a243a4c198013a2"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#abc6fcd7827ae52758a243a4c198013a2">pion::tcp::server::get_endpoint</a></div><div class="ttdeci">const boost::asio::ip::tcp::endpoint &amp; get_endpoint(void) const</div><div class="ttdoc">returns tcp endpoint that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00076">server.hpp:76</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_abe68393818a75e45d49757532802361e"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#abe68393818a75e45d49757532802361e">pion::tcp::server::set_logger</a></div><div class="ttdeci">void set_logger(logger log_ptr)</div><div class="ttdoc">sets the logger to be used </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00094">server.hpp:94</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a1e8ae789868cd0b8eb08e5c3da9b33a4"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a1e8ae789868cd0b8eb08e5c3da9b33a4">pion::tcp::server::handle_connection</a></div><div class="ttdeci">virtual void handle_connection(const tcp::connection_ptr &amp;tcp_conn)</div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00144">server.hpp:144</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_acac1becb82699098831c720c96a1b45a"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#acac1becb82699098831c720c96a1b45a">pion::tcp::server::get_port</a></div><div class="ttdeci">unsigned int get_port(void) const</div><div class="ttdoc">returns tcp port number that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00064">server.hpp:64</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a814a44fc3d677071b9e2407898765316"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a814a44fc3d677071b9e2407898765316">pion::tcp::server::before_starting</a></div><div class="ttdeci">virtual void before_starting(void)</div><div class="ttdoc">called before the TCP server starts listening for new connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00150">server.hpp:150</a></div></div>
<div class="ttc" id="structpion_1_1logger_html"><div class="ttname"><a href="structpion_1_1logger.html">pion::logger</a></div><div class="ttdef"><b>Definition:</b> <a href="logger_8hpp_source.html#l00238">logger.hpp:238</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_ac6bb13e1f833a39b28bff7fa71029476"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#ac6bb13e1f833a39b28bff7fa71029476">pion::tcp::server::set_ssl_flag</a></div><div class="ttdeci">void set_ssl_flag(bool b=true)</div><div class="ttdoc">sets value of SSL flag (true if the server uses SSL to encrypt connections) </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00085">server.hpp:85</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a23766baf23b7b5be2e43da55547c3a31"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a23766baf23b7b5be2e43da55547c3a31">pion::tcp::server::after_stopping</a></div><div class="ttdeci">virtual void after_stopping(void)</div><div class="ttdoc">called after the TCP server has stopped listing for new connections </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00153">server.hpp:153</a></div></div>
<div class="ttc" id="namespacepion_html"><div class="ttname"><a href="namespacepion.html">pion</a></div><div class="ttdef"><b>Definition:</b> <a href="admin__rights_8hpp_source.html#l00019">admin_rights.hpp:19</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a0fd391b946961fca8604b902ddb06f7d"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a0fd391b946961fca8604b902ddb06f7d">pion::tcp::server::m_logger</a></div><div class="ttdeci">logger m_logger</div><div class="ttdoc">primary logging interface used by this class </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00160">server.hpp:160</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_aa711c8de12d16c2806dc5fe57bed512e"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#aa711c8de12d16c2806dc5fe57bed512e">pion::tcp::server::set_address</a></div><div class="ttdeci">void set_address(const boost::asio::ip::address &amp;addr)</div><div class="ttdoc">sets IP address that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00073">server.hpp:73</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a392e9ede66cf2f96af52655363951e96"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a392e9ede66cf2f96af52655363951e96">pion::tcp::server::set_port</a></div><div class="ttdeci">void set_port(unsigned int p)</div><div class="ttdoc">sets tcp port number that the server listens for connections on </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00067">server.hpp:67</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_af038c70801875d3d6a3826eb7a80b1c3"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#af038c70801875d3d6a3826eb7a80b1c3">pion::tcp::server::get_logger</a></div><div class="ttdeci">logger get_logger(void)</div><div class="ttdoc">returns the logger currently in use </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00097">server.hpp:97</a></div></div>
<div class="ttc" id="classpion_1_1tcp_1_1server_html_a728020c37ae9ec06197d01b195a24f9e"><div class="ttname"><a href="classpion_1_1tcp_1_1server.html#a728020c37ae9ec06197d01b195a24f9e">pion::tcp::server::~server</a></div><div class="ttdeci">virtual ~server()</div><div class="ttdoc">default destructor </div><div class="ttdef"><b>Definition:</b> <a href="tcp_2server_8hpp_source.html#l00038">server.hpp:38</a></div></div>
<div class="ttc" id="classpion_1_1scheduler_html"><div class="ttname"><a href="classpion_1_1scheduler.html">pion::scheduler</a></div><div class="ttdef"><b>Definition:</b> <a href="scheduler_8hpp_source.html#l00034">scheduler.hpp:34</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.12
</small></address>
</body>
</html>