Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
113 lines (111 loc) · 33.2 KB

File metadata and controls

113 lines (111 loc) · 33.2 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!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.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32 HTTPS Server: /home/frank/Projekte/esp32/https_server/esp32_https_server/src/HTTPConnection.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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.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">ESP32 HTTPS Server
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('HTTPConnection_8hpp_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">HTTPConnection.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="preprocessor">#ifndef SRC_HTTPCONNECTION_HPP_</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define SRC_HTTPCONNECTION_HPP_</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &lt;Arduino.h&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;mbedtls/base64.h&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;hwcrypto/sha.h&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// Required for sockets</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;lwip/netdb.h&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#undef read</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;lwip/sockets.h&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;HTTPSServerConstants.hpp&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;ConnectionContext.hpp&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;HTTPHeaders.hpp&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;HTTPHeader.hpp&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;ResourceResolver.hpp&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;ResolvedResource.hpp&quot;</span></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="preprocessor">#include &quot;ResourceNode.hpp&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;HTTPRequest.hpp&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;HTTPResponse.hpp&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;WebsocketHandler.hpp&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;WebsocketNode.hpp&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacehttpsserver.html">httpsserver</a> {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classhttpsserver_1_1HTTPConnection.html"> 37</a></span>&#160;<span class="keyword">class </span><a class="code" href="classhttpsserver_1_1HTTPConnection.html">HTTPConnection</a> : <span class="keyword">private</span> <a class="code" href="classhttpsserver_1_1ConnectionContext.html">ConnectionContext</a> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="classhttpsserver_1_1HTTPConnection.html">HTTPConnection</a>(<a class="code" href="classhttpsserver_1_1ResourceResolver.html">ResourceResolver</a> * resResolver);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classhttpsserver_1_1HTTPConnection.html">HTTPConnection</a>();</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classhttpsserver_1_1HTTPConnection.html#a477f2a00400be60f3b0ca08ab53beda5">initialize</a>(<span class="keywordtype">int</span> serverSocketID, <a class="code" href="classhttpsserver_1_1HTTPHeaders.html">HTTPHeaders</a> *defaultHeaders);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeConnection();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isSecure();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">void</span> loop();</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classhttpsserver_1_1HTTPConnection.html#af00c9a10be467a64ece8f820e939190d">isClosed</a>();</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classhttpsserver_1_1HTTPConnection.html#a6d8889292d644962a859e6e9b0bff305">isError</a>();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classhttpsserver_1_1HTTPRequest.html">HTTPRequest</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classhttpsserver_1_1HTTPResponse.html">HTTPResponse</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classhttpsserver_1_1WebsocketInputStreambuf.html">WebsocketInputStreambuf</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> writeBuffer(byte* buffer, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> readBytesToBuffer(byte* buffer, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> canReadData();</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> pendingByteCount();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// Timestamp of the last transmission action</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _lastTransmissionTS;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// Timestamp of when the shutdown was started</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _shutdownTS;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// Internal state machine of the connection:</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// O --- &gt; STATE_UNDEFINED -- initialize() --&gt; STATE_INITIAL -- get / http/1.1 --&gt; STATE_REQUEST_FINISHED --.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// | | | |</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// | | | | Host: ...\r\n</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// STATE_ERROR &lt;- on error-----------------------&lt;---------------------------------------&lt; | Foo: bar\r\n</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// ^ | | | \r\n</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// | shutdown .--&gt; STATE_CLOSED | | | \r\n</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// | fails | | | |</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// | | close() | | |</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="comment">// STATE_CLOSING &lt;---- STATE_WEBSOCKET &lt;-. | | |</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// ^ | | | |</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// `---------- close() ---------- STATE_BODY_FINISHED &lt;-- Body received or GET -- STATE_HEADERS_FINISHED &lt;-´</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">enum</span> {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// The order is important, to be able to use state &lt;= STATE_HEADERS_FINISHED etc.</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// The connection has not been established yet</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; STATE_UNDEFINED,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// The connection has just been created</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; STATE_INITIAL,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// The request line has been parsed</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; STATE_REQUEST_FINISHED,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// The headers have been parsed</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; STATE_HEADERS_FINISHED,</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// The body has been parsed/the complete request has been processed (GET has body of length 0)</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; STATE_BODY_FINISHED,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// The connection is in websocket mode</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; STATE_WEBSOCKET,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// The connection is about to close (and waiting for the client to send close notify)</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; STATE_CLOSING,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// The connection has been closed</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; STATE_CLOSED,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// An error has occured</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; STATE_ERROR</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; } _connectionState;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">enum</span> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; CSTATE_UNDEFINED,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; CSTATE_ACTIVE,</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; CSTATE_CLOSED</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; } _clientState;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordtype">void</span> raiseError(uint16_t code, std::string reason);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordtype">void</span> readLine(<span class="keywordtype">int</span> lengthLimit);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordtype">bool</span> isTimeoutExceeded();</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordtype">void</span> refreshTimeout();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">int</span> updateBuffer();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">size_t</span> pendingBufferSize();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordtype">void</span> signalClientClose();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordtype">void</span> signalRequestError();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">size_t</span> readBuffer(byte* buffer, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">size_t</span> getCacheSize();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordtype">bool</span> checkWebsocket();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// The receive buffer</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">char</span> _receiveBuffer[HTTPS_CONNECTION_DATA_CHUNK_SIZE];</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// First index on _receive_buffer that has not been processed yet (anything before may be discarded)</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">int</span> _bufferProcessed;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// The index on the receive_buffer that is the first one which is empty at the end.</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">int</span> _bufferUnusedIdx;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">// Socket address, length etc for the connection</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">struct </span>sockaddr _sockAddr;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; socklen_t _addrLen;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordtype">int</span> _socket;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// Resource resolver used to resolve resources</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classhttpsserver_1_1ResourceResolver.html">ResourceResolver</a> * _resResolver;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="comment">// The parser line. The struct is used to read the next line up to the \r\n in readLine()</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">struct </span>{</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; std::string text = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">bool</span> parsingFinished = <span class="keyword">false</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; } _parserLine;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// HTTP properties: Method, Request, Headers</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; std::string _httpMethod;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; std::string _httpResource;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classhttpsserver_1_1HTTPHeaders.html">HTTPHeaders</a> * _httpHeaders;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Default headers that are applied to every response</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classhttpsserver_1_1HTTPHeaders.html">HTTPHeaders</a> * _defaultHeaders;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// Should we use keep alive</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordtype">bool</span> _isKeepAlive;</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; <span class="comment">//Websocket connection</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classhttpsserver_1_1WebsocketHandler.html">WebsocketHandler</a> * _wsHandler;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</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="keywordtype">void</span> <a class="code" href="namespacehttpsserver.html#a95a1abf6125242682b1e624342a342b8">handleWebsocketHandshake</a>(<a class="code" href="classhttpsserver_1_1HTTPRequest.html">HTTPRequest</a> * req, <a class="code" href="classhttpsserver_1_1HTTPResponse.html">HTTPResponse</a> * res);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;std::string <a class="code" href="namespacehttpsserver.html#ae475bc730f2502e1f55ffc16a5f671a0">websocketKeyResponseHash</a>(std::string <span class="keyword">const</span> &amp;key);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacehttpsserver.html#a29faf1e31601ac1f50302a2813a06539">validationMiddleware</a>(<a class="code" href="classhttpsserver_1_1HTTPRequest.html">HTTPRequest</a> * req, <a class="code" href="classhttpsserver_1_1HTTPResponse.html">HTTPResponse</a> * res, std::function&lt;<span class="keywordtype">void</span>()&gt; next);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;} <span class="comment">/* namespace httpsserver */</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* SRC_HTTPCONNECTION_HPP_ */</span><span class="preprocessor"></span></div><div class="ttc" id="namespacehttpsserver_html_a95a1abf6125242682b1e624342a342b8"><div class="ttname"><a href="namespacehttpsserver.html#a95a1abf6125242682b1e624342a342b8">httpsserver::handleWebsocketHandshake</a></div><div class="ttdeci">void handleWebsocketHandshake(HTTPRequest *req, HTTPResponse *res)</div><div class="ttdef"><b>Definition:</b> HTTPConnection.cpp:624</div></div>
<div class="ttc" id="classhttpsserver_1_1HTTPRequest_html"><div class="ttname"><a href="classhttpsserver_1_1HTTPRequest.html">httpsserver::HTTPRequest</a></div><div class="ttdoc">Represents the request stream for an HTTP request. </div><div class="ttdef"><b>Definition:</b> HTTPRequest.hpp:21</div></div>
<div class="ttc" id="classhttpsserver_1_1HTTPResponse_html"><div class="ttname"><a href="classhttpsserver_1_1HTTPResponse.html">httpsserver::HTTPResponse</a></div><div class="ttdoc">Represents the response stream of an HTTP request. </div><div class="ttdef"><b>Definition:</b> HTTPResponse.hpp:25</div></div>
<div class="ttc" id="namespacehttpsserver_html_a29faf1e31601ac1f50302a2813a06539"><div class="ttname"><a href="namespacehttpsserver.html#a29faf1e31601ac1f50302a2813a06539">httpsserver::validationMiddleware</a></div><div class="ttdeci">void validationMiddleware(HTTPRequest *req, HTTPResponse *res, std::function&lt; void()&gt; next)</div><div class="ttdef"><b>Definition:</b> HTTPConnection.cpp:598</div></div>
<div class="ttc" id="classhttpsserver_1_1HTTPConnection_html_a6d8889292d644962a859e6e9b0bff305"><div class="ttname"><a href="classhttpsserver_1_1HTTPConnection.html#a6d8889292d644962a859e6e9b0bff305">httpsserver::HTTPConnection::isError</a></div><div class="ttdeci">bool isError()</div><div class="ttdef"><b>Definition:</b> HTTPConnection.cpp:88</div></div>
<div class="ttc" id="classhttpsserver_1_1HTTPHeaders_html"><div class="ttname"><a href="classhttpsserver_1_1HTTPHeaders.html">httpsserver::HTTPHeaders</a></div><div class="ttdoc">Groups and manages a set of HTTPHeader instances. </div><div class="ttdef"><b>Definition:</b> HTTPHeaders.hpp:18</div></div>
<div class="ttc" id="classhttpsserver_1_1WebsocketHandler_html"><div class="ttname"><a href="classhttpsserver_1_1WebsocketHandler.html">httpsserver::WebsocketHandler</a></div><div class="ttdef"><b>Definition:</b> WebsocketHandler.hpp:34</div></div>
<div class="ttc" id="classhttpsserver_1_1ResourceResolver_html"><div class="ttname"><a href="classhttpsserver_1_1ResourceResolver.html">httpsserver::ResourceResolver</a></div><div class="ttdoc">This class is used internally to resolve a string URL to the corresponding HTTPNode. </div><div class="ttdef"><b>Definition:</b> ResourceResolver.hpp:22</div></div>
<div class="ttc" id="classhttpsserver_1_1WebsocketInputStreambuf_html"><div class="ttname"><a href="classhttpsserver_1_1WebsocketInputStreambuf.html">httpsserver::WebsocketInputStreambuf</a></div><div class="ttdef"><b>Definition:</b> WebsocketInputStreambuf.hpp:21</div></div>
<div class="ttc" id="classhttpsserver_1_1ConnectionContext_html"><div class="ttname"><a href="classhttpsserver_1_1ConnectionContext.html">httpsserver::ConnectionContext</a></div><div class="ttdoc">Internal class to handle the state of a connection. </div><div class="ttdef"><b>Definition:</b> ConnectionContext.hpp:17</div></div>
<div class="ttc" id="classhttpsserver_1_1HTTPConnection_html"><div class="ttname"><a href="classhttpsserver_1_1HTTPConnection.html">httpsserver::HTTPConnection</a></div><div class="ttdoc">Represents a single open connection for the plain HTTPServer, without TLS. </div><div class="ttdef"><b>Definition:</b> HTTPConnection.hpp:37</div></div>
<div class="ttc" id="classhttpsserver_1_1HTTPConnection_html_af00c9a10be467a64ece8f820e939190d"><div class="ttname"><a href="classhttpsserver_1_1HTTPConnection.html#af00c9a10be467a64ece8f820e939190d">httpsserver::HTTPConnection::isClosed</a></div><div class="ttdeci">bool isClosed()</div><div class="ttdef"><b>Definition:</b> HTTPConnection.cpp:81</div></div>
<div class="ttc" id="namespacehttpsserver_html_ae475bc730f2502e1f55ffc16a5f671a0"><div class="ttname"><a href="namespacehttpsserver.html#ae475bc730f2502e1f55ffc16a5f671a0">httpsserver::websocketKeyResponseHash</a></div><div class="ttdeci">std::string websocketKeyResponseHash(std::string const &amp;key)</div><div class="ttdef"><b>Definition:</b> HTTPConnection.cpp:636</div></div>
<div class="ttc" id="classhttpsserver_1_1HTTPConnection_html_a477f2a00400be60f3b0ca08ab53beda5"><div class="ttname"><a href="classhttpsserver_1_1HTTPConnection.html#a477f2a00400be60f3b0ca08ab53beda5">httpsserver::HTTPConnection::initialize</a></div><div class="ttdeci">virtual int initialize(int serverSocketID, HTTPHeaders *defaultHeaders)</div><div class="ttdef"><b>Definition:</b> HTTPConnection.cpp:33</div></div>
<div class="ttc" id="namespacehttpsserver_html"><div class="ttname"><a href="namespacehttpsserver.html">httpsserver</a></div><div class="ttdef"><b>Definition:</b> ConnectionContext.cpp:3</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><b>HTTPConnection.hpp</b></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>
Morty Proxy This is a proxified and sanitized view of the page, visit original site.