Create doxygen

This commit is contained in:
Florian Hoss 2022-07-30 11:46:19 +02:00
parent 2e91cc1567
commit 7aec70244e
150 changed files with 15105 additions and 23 deletions

2693
Doxyfile Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,389 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/API.cpp 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="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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">API.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;API.hpp&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span>{</div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"><a class="line" href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca"> 5</a></span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">API::API</a>(<a class="code hl_class" href="classfw_1_1_firewall.html">fw::Firewall</a> *firewall, <span class="keyword">const</span> <span class="keywordtype">char</span> *cert, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keyword">const</span> <span class="keywordtype">char</span> *username, <span class="keyword">const</span> <span class="keywordtype">char</span> *password, <span class="keyword">const</span> String ip, <span class="keyword">const</span> uint16_t port)</div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> {</div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> this-&gt;firewall = firewall;</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> this-&gt;api_ip = ip;</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> this-&gt;api_port = port;</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <span class="keywordflow">if</span> (this-&gt;setup_auth(username, password) == ERROR)</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> endless_loop();</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> this-&gt;server = <span class="keyword">new</span> ESP8266WebServerSecure(port);</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> this-&gt;serverCache = <span class="keyword">new</span> ServerSessions(5);</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> this-&gt;server = <span class="keyword">new</span> WebServer(port);</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> this-&gt;setup_routing(cert, key);</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> this-&gt;server-&gt;begin();</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> Serial.printf(<span class="stringliteral">&quot;%s endpoints -&gt; %s/api\n&quot;</span>, TAG, this-&gt;get_url_base().c_str());</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#if !defined(ESP8266)</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> this-&gt;server-&gt;handleClient();</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// https://docs.espressif.com/projects/arduino-esp32/en/latest/esp-idf_component.html</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> sleep(1);</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> }</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> }</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab"> 31</a></span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab">API::~API</a>()</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> {</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> this-&gt;server-&gt;stop();</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> }</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">void</span> API::handle_client()</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> {</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> this-&gt;server-&gt;handleClient();</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> }</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> String API::get_url_base()</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> {</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;https://&quot;</span> + this-&gt;api_ip + <span class="stringliteral">&quot;:&quot;</span> + this-&gt;api_port;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;http://&quot;</span> + this-&gt;api_ip + <span class="stringliteral">&quot;:&quot;</span> + this-&gt;api_port;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> }</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> ok_t API::setup_auth(<span class="keyword">const</span> <span class="keywordtype">char</span> *username, <span class="keyword">const</span> <span class="keywordtype">char</span> *password)</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (!username || *username == 0x00 || strlen(username) &gt; CREDENTIALS_LENGTH)</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> Serial.printf(<span class="stringliteral">&quot;%s Username too long or missing!\n&quot;</span>, TAG);</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">return</span> ERROR;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> strncpy(credentials.username, username, CREDENTIALS_LENGTH);</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span> (!password || *password == 0x00 || strlen(password) &gt; CREDENTIALS_LENGTH)</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> Serial.printf(<span class="stringliteral">&quot;%s Password too long or missing!\n&quot;</span>, TAG);</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">return</span> ERROR;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> }</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> strncpy(credentials.password, password, CREDENTIALS_LENGTH);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> SUCCESS;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> }</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> auth_t API::check_auth()</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> {</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (server-&gt;authenticate(this-&gt;credentials.username, this-&gt;credentials.password))</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">return</span> AUTHENTICATED;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> }</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> this-&gt;json_message_response(<span class="stringliteral">&quot;unauthorized&quot;</span>, 403);</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">return</span> DENIED;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> }</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> API::setup_routing(<span class="keyword">const</span> <span class="keywordtype">char</span> *cert, <span class="keyword">const</span> <span class="keywordtype">char</span> *key)</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> this-&gt;server-&gt;getServer().setRSACert(<span class="keyword">new</span> BearSSL::X509List(cert), <span class="keyword">new</span> BearSSL::PrivateKey(key));</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> this-&gt;server-&gt;getServer().setCache(serverCache);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> this-&gt;server-&gt;on(<span class="stringliteral">&quot;/api/firewall/rules&quot;</span>, HTTP_GET, std::bind(&amp;API::get_firewall_rules_handler, <span class="keyword">this</span>));</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> this-&gt;server-&gt;on(UriBraces(<span class="stringliteral">&quot;/api/firewall/rules/{}&quot;</span>), HTTP_GET, std::bind(&amp;API::get_firewall_rule_handler, <span class="keyword">this</span>));</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> this-&gt;server-&gt;on(<span class="stringliteral">&quot;/api/firewall/rules&quot;</span>, HTTP_POST, std::bind(&amp;API::post_firewall_handler, <span class="keyword">this</span>));</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> this-&gt;server-&gt;on(UriBraces(<span class="stringliteral">&quot;/api/firewall/rules/{}&quot;</span>), HTTP_PUT, std::bind(&amp;API::put_firewall_handler, <span class="keyword">this</span>));</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> this-&gt;server-&gt;on(UriBraces(<span class="stringliteral">&quot;/api/firewall/rules/{}&quot;</span>), HTTP_DELETE, std::bind(&amp;API::delete_firewall_handler, <span class="keyword">this</span>));</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> this-&gt;server-&gt;on(<span class="stringliteral">&quot;/api&quot;</span>, HTTP_GET, std::bind(&amp;API::get_endpoint_list_handler, <span class="keyword">this</span>));</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> this-&gt;server-&gt;onNotFound(std::bind(&amp;API::not_found_handler, <span class="keyword">this</span>));</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> add_endpoint_to_list(<span class="stringliteral">&quot;/api/firewall/rules&quot;</span>, <span class="stringliteral">&quot;GET&quot;</span>, <span class="stringliteral">&quot;Get all Firewall Rules&quot;</span>);</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> add_endpoint_to_list(<span class="stringliteral">&quot;/api/firewall/rules/&lt;key&gt;&quot;</span>, <span class="stringliteral">&quot;GET&quot;</span>, <span class="stringliteral">&quot;Get Firewall Rule by key&quot;</span>);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> add_endpoint_to_list(<span class="stringliteral">&quot;/api/firewall/rules&quot;</span>, <span class="stringliteral">&quot;POST&quot;</span>, <span class="stringliteral">&quot;Create Firewall Rule&quot;</span>);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> add_endpoint_to_list(<span class="stringliteral">&quot;/api/firewall/rules/&lt;key&gt;&quot;</span>, <span class="stringliteral">&quot;PUT&quot;</span>, <span class="stringliteral">&quot;Update Firewall Rule by key&quot;</span>);</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> add_endpoint_to_list(<span class="stringliteral">&quot;/api/firewall/rules/&lt;key&gt;&quot;</span>, <span class="stringliteral">&quot;DELETE&quot;</span>, <span class="stringliteral">&quot;Delete Firewall Rule by key&quot;</span>);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">void</span> API::add_endpoint_to_list(<span class="keyword">const</span> String uri, <span class="keyword">const</span> <span class="keywordtype">char</span> *method, <span class="keyword">const</span> <span class="keywordtype">char</span> *description)</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> api_endpoint_t *temp;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">const</span> String url = get_url_base() + uri;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> api_endpoint_t *api_ptr = (api_endpoint_t *)malloc(<span class="keyword">sizeof</span>(api_endpoint_t));</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> strncpy(api_ptr-&gt;uri, url.c_str(), <span class="keyword">sizeof</span>(api_ptr-&gt;uri));</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> strncpy(api_ptr-&gt;method, method, <span class="keyword">sizeof</span>(api_ptr-&gt;method));</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> strncpy(api_ptr-&gt;description, description, <span class="keyword">sizeof</span>(api_ptr-&gt;description));</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span> (this-&gt;endpoint_head == NULL)</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> {</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> this-&gt;endpoint_head = api_ptr;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> api_ptr-&gt;next = NULL;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> }</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> temp = this-&gt;endpoint_head;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">while</span> (temp-&gt;next != NULL)</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> temp = temp-&gt;next;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> temp-&gt;next = api_ptr;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> api_ptr-&gt;next = NULL;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">void</span> API::not_found_handler()</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> {</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> this-&gt;json_message_response(<span class="stringliteral">&quot;see &quot;</span> + get_url_base() + <span class="stringliteral">&quot;/api for available routes&quot;</span>, 404);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> }</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span> API::get_endpoint_list_handler()</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> {</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> this-&gt;json_array_response(this-&gt;construct_json_api(), 200);</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> }</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">void</span> API::get_firewall_rule_handler()</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (this-&gt;check_auth() == DENIED)</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> String param = this-&gt;server-&gt;pathArg(0);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">int</span> rule_number = atoi(param.c_str());</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> firewall_rule_t *rule_ptr = firewall-&gt;get_rule_from_firewall(rule_number);</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span> (rule_ptr == NULL)</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> this-&gt;json_message_response(<span class="stringliteral">&quot;rule does not exist&quot;</span>, 404);</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> this-&gt;json_generic_response(this-&gt;construct_json_firewall_rule(rule_ptr), 200);</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> }</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">void</span> API::get_firewall_rules_handler()</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> {</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span> (this-&gt;check_auth() == DENIED)</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> this-&gt;json_array_response(this-&gt;construct_json_firewall(), 200);</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> }</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">void</span> API::post_firewall_handler()</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> {</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span> (this-&gt;check_auth() == DENIED)</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span> (request_has_all_firewall_parameter())</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> {</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> String args[IPV4ADDRESS_LENGTH] = {};</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">for</span> (uint8_t i = 0; i &lt; firewall_fields_amount; i++)</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> {</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> args[i] = this-&gt;server-&gt;arg(firewall_fields[i]);</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> firewall_rule_t *rule_ptr = firewall-&gt;add_rule_to_firewall(args);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> this-&gt;json_generic_response(this-&gt;construct_json_firewall_rule(rule_ptr), 201);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> {</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> this-&gt;json_message_response(<span class="stringliteral">&quot;not enough parameter provided&quot;</span>, 400);</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> }</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> }</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">void</span> API::put_firewall_handler()</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> {</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span> (this-&gt;check_auth() == DENIED)</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> String param = this-&gt;server-&gt;pathArg(0);</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">int</span> rule_number = atoi(param.c_str());</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span> (request_has_all_firewall_parameter())</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> {</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> String args[IPV4ADDRESS_LENGTH] = {};</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span> (uint8_t i = 0; i &lt; firewall_fields_amount; i++)</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> {</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> args[i] = this-&gt;server-&gt;arg(firewall_fields[i]);</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> }</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> firewall_rule_t *rule_ptr = firewall-&gt;update_rule_of_firewall(args, rule_number);</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span> (rule_ptr == NULL)</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> this-&gt;json_message_response(<span class="stringliteral">&quot;rule does not exist&quot;</span>, 404);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> this-&gt;json_generic_response(this-&gt;construct_json_firewall_rule(rule_ptr), 200);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> }</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> {</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> this-&gt;json_message_response(<span class="stringliteral">&quot;not enough parameter provided&quot;</span>, 400);</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> }</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> }</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">void</span> API::delete_firewall_handler()</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> {</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span> (this-&gt;check_auth() == DENIED)</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> String param = this-&gt;server-&gt;pathArg(0);</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordtype">int</span> rule_number = atoi(param.c_str());</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span> (firewall-&gt;delete_rule_from_firewall(rule_number) == SUCCESS)</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> this-&gt;json_message_response(<span class="stringliteral">&quot;firewall rule deleted&quot;</span>, 200);</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> this-&gt;json_message_response(<span class="stringliteral">&quot;cannot delete firewall rule&quot;</span>, 500);</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">bool</span> API::request_has_all_firewall_parameter()</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> {</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span> (!this-&gt;server-&gt;args())</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">for</span> (uint8_t i = 0; i &lt; firewall_fields_amount; i++)</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> {</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span> (i != KEY &amp;&amp; !this-&gt;server-&gt;hasArg(firewall_fields[i]))</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> }</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> }</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> String API::json_new_attribute(String key, String value, <span class="keywordtype">bool</span> last)</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> {</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> String json_string;</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> json_string += <span class="stringliteral">&quot;\&quot;&quot;</span> + key + <span class="stringliteral">&quot;\&quot;: \&quot;&quot;</span> + value + <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span> (!last)</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> json_string += <span class="stringliteral">&quot;,&quot;</span>;</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">return</span> json_string;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> }</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> String API::json_new_attribute(String key, uint32_t value, <span class="keywordtype">bool</span> last)</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> {</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">return</span> json_new_attribute(key, String(value), last);</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">void</span> API::json_generic_response(String serialized_string, <span class="keyword">const</span> uint16_t response_code)</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> {</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> this-&gt;server-&gt;send(response_code, json_response_type, serialized_string);</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> }</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordtype">void</span> API::json_array_response(String serialized_string, <span class="keyword">const</span> uint16_t response_code)</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> {</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> this-&gt;server-&gt;send(response_code, json_response_type, <span class="stringliteral">&quot;[&quot;</span> + serialized_string + <span class="stringliteral">&quot;]&quot;</span>);</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> }</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">void</span> API::json_message_response(String message, <span class="keyword">const</span> uint16_t response_code)</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> {</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> String serialized_string = <span class="stringliteral">&quot;{&quot;</span>;</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> serialized_string += json_new_attribute(<span class="stringliteral">&quot;message&quot;</span>, message, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> serialized_string += <span class="stringliteral">&quot;}&quot;</span>;</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> this-&gt;server-&gt;send(response_code, json_response_type, serialized_string);</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> }</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> String API::construct_json_firewall_rule(firewall_rule_t *rule_ptr)</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> {</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> String serialized_string = <span class="stringliteral">&quot;{&quot;</span>;</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> serialized_string += json_new_attribute(firewall_fields[KEY], rule_ptr-&gt;key);</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> serialized_string += json_new_attribute(firewall_fields[IP], rule_ptr-&gt;ip);</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> serialized_string += json_new_attribute(firewall_fields[PORT_FROM], rule_ptr-&gt;port_from);</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> serialized_string += json_new_attribute(firewall_fields[PORT_TO], rule_ptr-&gt;port_to);</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> serialized_string += json_new_attribute(firewall_fields[PROTOCOL], protocol_to_string(rule_ptr-&gt;protocol));</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> serialized_string += json_new_attribute(firewall_fields[TARGET], target_to_string(rule_ptr-&gt;target), <span class="keyword">true</span>);</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> serialized_string += <span class="stringliteral">&quot;}&quot;</span>;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">return</span> serialized_string;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> }</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> String API::construct_json_firewall()</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> {</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> firewall_rule_t *rule_ptr = firewall-&gt;get_rule_head();</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> String serialized_string;</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">while</span> (rule_ptr != NULL)</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> {</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> serialized_string += construct_json_firewall_rule(rule_ptr);</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> rule_ptr = rule_ptr-&gt;next;</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span> (rule_ptr != NULL)</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> serialized_string += <span class="stringliteral">&quot;,&quot;</span>;</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> }</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">return</span> serialized_string;</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> }</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> String API::construct_json_api_endpoint(api_endpoint_t *api_ptr)</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> {</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> String serialized_string = <span class="stringliteral">&quot;{&quot;</span>;</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> serialized_string += json_new_attribute(<span class="stringliteral">&quot;endpoint&quot;</span>, api_ptr-&gt;uri);</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> serialized_string += json_new_attribute(<span class="stringliteral">&quot;description&quot;</span>, api_ptr-&gt;description);</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> serialized_string += json_new_attribute(<span class="stringliteral">&quot;method&quot;</span>, api_ptr-&gt;method, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> serialized_string += <span class="stringliteral">&quot;}&quot;</span>;</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> serialized_string;</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> }</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> String API::construct_json_api()</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> {</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> api_endpoint_t *api_ptr = this-&gt;endpoint_head;</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> String serialized_string;</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">while</span> (api_ptr != NULL)</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> {</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> serialized_string += construct_json_api_endpoint(api_ptr);</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> api_ptr = api_ptr-&gt;next;</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (api_ptr != NULL)</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> serialized_string += <span class="stringliteral">&quot;,&quot;</span>;</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">return</span> serialized_string;</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> }</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span>}</div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a033d5efd077dfad456cb6e6e7dd2baca"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">fw::API::API</a></div><div class="ttdeci">API(Firewall *, const char *cert, const char *key, const char *username, const char *password, const String ip, const uint16_t port=8080)</div><div class="ttdoc">Construct a new API object.</div><div class="ttdef"><b>Definition:</b> <a href="_a_p_i_8cpp_source.html#l00005">API.cpp:5</a></div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a66ac0bd592bb08d069aea199668670ab"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab">fw::API::~API</a></div><div class="ttdeci">~API()</div><div class="ttdoc">Destroy the API object.</div><div class="ttdef"><b>Definition:</b> <a href="_a_p_i_8cpp_source.html#l00031">API.cpp:31</a></div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html"><div class="ttname"><a href="classfw_1_1_firewall.html">fw::Firewall</a></div><div class="ttdef"><b>Definition:</b> <a href="_firewall_8hpp_source.html#l00015">Firewall.hpp:16</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>

View file

@ -0,0 +1,213 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/API.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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('_a_p_i_8hpp_source.html',''); initResizable(); });
/* @license-end */
</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">API.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef API_HPP</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define API_HPP</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;ESP8266WebServerSecure.h&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &quot;WebServer.h&quot;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;uri/UriBraces.h&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;Firewall.hpp&quot;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;Utils.hpp&quot;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span>{</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="classfw_1_1_a_p_i.html"> 20</a></span> <span class="keyword">class </span><a class="code hl_class" href="classfw_1_1_a_p_i.html">API</a></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> {</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">API</a>(<a class="code hl_class" href="classfw_1_1_firewall.html">Firewall</a> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *cert, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keyword">const</span> <span class="keywordtype">char</span> *username, <span class="keyword">const</span> <span class="keywordtype">char</span> *password, <span class="keyword">const</span> String ip, <span class="keyword">const</span> uint16_t port = 8080);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab">~API</a>();</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">void</span> handle_client();</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> BearSSL::ESP8266WebServerSecure *server;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> BearSSL::ServerSessions *serverCache;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> WebServer *server;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_class" href="classfw_1_1_firewall.html">Firewall</a> *firewall;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_struct" href="structcredential__t.html">credential_t</a> credentials;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_struct" href="structapi__endpoint__t.html">api_endpoint_t</a> *endpoint_head = NULL;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> String api_ip = <span class="stringliteral">&quot;0.0.0.0&quot;</span>;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> uint16_t api_port;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> String json_response_type = <span class="stringliteral">&quot;application/json; charset=utf-8&quot;</span>;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *TAG = <span class="stringliteral">&quot;[API]&quot;</span>;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> String <a class="code hl_function" href="classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07">get_url_base</a>();</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> ok_t <a class="code hl_function" href="classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d">setup_auth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *username, <span class="keyword">const</span> <span class="keywordtype">char</span> *password);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> auth_t <a class="code hl_function" href="classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c">check_auth</a>();</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20">setup_routing</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *cert, <span class="keyword">const</span> <span class="keywordtype">char</span> *key);</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772">add_endpoint_to_list</a>(<span class="keyword">const</span> String uri, <span class="keyword">const</span> <span class="keywordtype">char</span> *method, <span class="keyword">const</span> <span class="keywordtype">char</span> *description);</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d">not_found_handler</a>();</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1">get_endpoint_list_handler</a>();</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a">get_firewall_rule_handler</a>();</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8">get_firewall_rules_handler</a>();</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3">post_firewall_handler</a>();</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45">put_firewall_handler</a>();</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb">delete_firewall_handler</a>();</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50">request_has_all_firewall_parameter</a>();</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> String <a class="code hl_function" href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">json_new_attribute</a>(String key, String value, <span class="keywordtype">bool</span> last = <span class="keyword">false</span>);</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> String <a class="code hl_function" href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">json_new_attribute</a>(String key, uint32_t value, <span class="keywordtype">bool</span> last = <span class="keyword">false</span>);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5">json_generic_response</a>(String serialized_string, <span class="keyword">const</span> uint16_t response_code);</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802">json_array_response</a>(String serialized_string, <span class="keyword">const</span> uint16_t response_code);</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15">json_message_response</a>(String message, <span class="keyword">const</span> uint16_t response_code);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> String <a class="code hl_function" href="classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b">construct_json_firewall_rule</a>(<a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr);</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> String <a class="code hl_function" href="classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5">construct_json_firewall</a>();</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> String <a class="code hl_function" href="classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8">construct_json_api_endpoint</a>(<a class="code hl_struct" href="structapi__endpoint__t.html">api_endpoint_t</a> *api_ptr);</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> String <a class="code hl_function" href="classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab">construct_json_api</a>();</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> };</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span>}</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html"><div class="ttname"><a href="classfw_1_1_a_p_i.html">fw::API</a></div><div class="ttdoc">The API to create, edit or remove Firewall rules.</div><div class="ttdef"><b>Definition:</b> API.hpp:21</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a033d5efd077dfad456cb6e6e7dd2baca"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">fw::API::API</a></div><div class="ttdeci">API(Firewall *, const char *cert, const char *key, const char *username, const char *password, const String ip, const uint16_t port=8080)</div><div class="ttdoc">Construct a new API object, assign ip and port to generate endpoint list, setup authentication,...</div><div class="ttdef"><b>Definition:</b> API.cpp:5</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a0ff5aeb3b916dae9219041dc240d9156"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">fw::API::json_new_attribute</a></div><div class="ttdeci">String json_new_attribute(String key, String value, bool last=false)</div><div class="ttdoc">add another attribute to the json object</div><div class="ttdef"><b>Definition:</b> API.cpp:225</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a175d139d29530e2946f67789c9652da8"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8">fw::API::construct_json_api_endpoint</a></div><div class="ttdeci">String construct_json_api_endpoint(api_endpoint_t *api_ptr)</div><div class="ttdoc">construct an API endpoint as json object</div><div class="ttdef"><b>Definition:</b> API.cpp:284</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a1892bc26b882b055853e26ed95d8d802"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802">fw::API::json_array_response</a></div><div class="ttdeci">void json_array_response(String serialized_string, const uint16_t response_code)</div><div class="ttdoc">json response that wraps the message in array brackets</div><div class="ttdef"><b>Definition:</b> API.cpp:244</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a2d78e9dd43abb72da8872cb207db25e3"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3">fw::API::post_firewall_handler</a></div><div class="ttdeci">void post_firewall_handler()</div><div class="ttdoc">POST handler to create firewall rule.</div><div class="ttdef"><b>Definition:</b> API.cpp:156</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a45dcdd4969f70a7f1a02e49a47b16a1d"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d">fw::API::setup_auth</a></div><div class="ttdeci">ok_t setup_auth(const char *username, const char *password)</div><div class="ttdoc">Set up authentication.</div><div class="ttdef"><b>Definition:</b> API.cpp:52</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a592c2aa501ff920ebcc125f8d5635deb"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb">fw::API::delete_firewall_handler</a></div><div class="ttdeci">void delete_firewall_handler()</div><div class="ttdoc">DELETE handler to delete firewall rule.</div><div class="ttdef"><b>Definition:</b> API.cpp:201</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a66ac0bd592bb08d069aea199668670ab"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab">fw::API::~API</a></div><div class="ttdeci">~API()</div><div class="ttdoc">Destroy the API object.</div><div class="ttdef"><b>Definition:</b> API.cpp:31</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a682ec7e09a230507c39cbc7d7c7427d5"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5">fw::API::construct_json_firewall</a></div><div class="ttdeci">String construct_json_firewall()</div><div class="ttdoc">construct array of all firewall rules as json object</div><div class="ttdef"><b>Definition:</b> API.cpp:270</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a6b7d4ce75b9cdba0dd39c6c949ef1c15"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15">fw::API::json_message_response</a></div><div class="ttdeci">void json_message_response(String message, const uint16_t response_code)</div><div class="ttdoc">json response to send message as json object</div><div class="ttdef"><b>Definition:</b> API.cpp:249</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a6ce4a9dd9afae493f6639b6fb3f6ba45"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45">fw::API::put_firewall_handler</a></div><div class="ttdeci">void put_firewall_handler()</div><div class="ttdoc">PUT handler to update firewall rule.</div><div class="ttdef"><b>Definition:</b> API.cpp:176</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a734cbd9da536fb297da87b4310f20ba1"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1">fw::API::get_endpoint_list_handler</a></div><div class="ttdeci">void get_endpoint_list_handler()</div><div class="ttdoc">GET handler to retrieve endpoint list.</div><div class="ttdef"><b>Definition:</b> API.cpp:131</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_a90986dc50f303564e6f5af6d3707dd20"><div class="ttname"><a href="classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20">fw::API::setup_routing</a></div><div class="ttdeci">void setup_routing(const char *cert, const char *key)</div><div class="ttdoc">Set up the routing/endpoints and encryption.</div><div class="ttdef"><b>Definition:</b> API.cpp:79</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_aa541a477e14a992b55e3f75351887cab"><div class="ttname"><a href="classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab">fw::API::construct_json_api</a></div><div class="ttdeci">String construct_json_api()</div><div class="ttdoc">construct array of all endpoints as json object</div><div class="ttdef"><b>Definition:</b> API.cpp:294</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_aad90a1bfa8e00c4e25a091e5e9a61772"><div class="ttname"><a href="classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772">fw::API::add_endpoint_to_list</a></div><div class="ttdeci">void add_endpoint_to_list(const String uri, const char *method, const char *description)</div><div class="ttdoc">add endpoint information to linked list that is used for the /api endpoint</div><div class="ttdef"><b>Definition:</b> API.cpp:100</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_ab904f77fa777a1c8c19deb8e39cf89e8"><div class="ttname"><a href="classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8">fw::API::get_firewall_rules_handler</a></div><div class="ttdeci">void get_firewall_rules_handler()</div><div class="ttdoc">GET handler to retrieve firewall rules.</div><div class="ttdef"><b>Definition:</b> API.cpp:149</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_abab79e90786d14836dcf113077891c50"><div class="ttname"><a href="classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50">fw::API::request_has_all_firewall_parameter</a></div><div class="ttdeci">bool request_has_all_firewall_parameter()</div><div class="ttdoc">check if request to create/update firewall rule has all required parameter</div><div class="ttdef"><b>Definition:</b> API.cpp:213</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_ac249b6e7533414d0296bde477cecac1b"><div class="ttname"><a href="classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b">fw::API::construct_json_firewall_rule</a></div><div class="ttdeci">String construct_json_firewall_rule(firewall_rule_t *rule_ptr)</div><div class="ttdoc">construct a firewall rule as json object</div><div class="ttdef"><b>Definition:</b> API.cpp:257</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_ac76f5a6c9c28d71772b238a51b122e4a"><div class="ttname"><a href="classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a">fw::API::get_firewall_rule_handler</a></div><div class="ttdeci">void get_firewall_rule_handler()</div><div class="ttdoc">GET handler to retrieve single firewall rule.</div><div class="ttdef"><b>Definition:</b> API.cpp:136</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_acbebab924241292706c0287dca5c3ff5"><div class="ttname"><a href="classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5">fw::API::json_generic_response</a></div><div class="ttdeci">void json_generic_response(String serialized_string, const uint16_t response_code)</div><div class="ttdoc">json response to send any string and response code</div><div class="ttdef"><b>Definition:</b> API.cpp:239</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_adc9523a1b6e6a6e8f57a514a25c35b8c"><div class="ttname"><a href="classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c">fw::API::check_auth</a></div><div class="ttdeci">auth_t check_auth()</div><div class="ttdoc">check if request to API can proceed or needs to stop</div><div class="ttdef"><b>Definition:</b> API.cpp:69</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_aeb74e3b9efc2305c943683b14957ac9d"><div class="ttname"><a href="classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d">fw::API::not_found_handler</a></div><div class="ttdeci">void not_found_handler()</div><div class="ttdoc">handling not found</div><div class="ttdef"><b>Definition:</b> API.cpp:126</div></div>
<div class="ttc" id="aclassfw_1_1_a_p_i_html_af5dc938ae5a274e3599d637e672b8d07"><div class="ttname"><a href="classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07">fw::API::get_url_base</a></div><div class="ttdeci">String get_url_base()</div><div class="ttdoc">Get the url base string e.g. http://0.0.0.0:8080/api.</div><div class="ttdef"><b>Definition:</b> API.cpp:43</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html"><div class="ttname"><a href="classfw_1_1_firewall.html">fw::Firewall</a></div><div class="ttdoc">The Firewall will handle Firewall rules as linked list.</div><div class="ttdef"><b>Definition:</b> Firewall.hpp:20</div></div>
<div class="ttc" id="astructapi__endpoint__t_html"><div class="ttname"><a href="structapi__endpoint__t.html">api_endpoint_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:93</div></div>
<div class="ttc" id="astructcredential__t_html"><div class="ttname"><a href="structcredential__t.html">credential_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:85</div></div>
<div class="ttc" id="astructfirewall__rule__t_html"><div class="ttname"><a href="structfirewall__rule__t.html">firewall_rule_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:51</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>API.hpp</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,262 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/Firewall.cpp 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="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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">Firewall.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;Firewall.hpp&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span>{</div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> Firewall::Firewall()</div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> {</div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> this-&gt;amount_of_rules = retrieve_amount_of_rules();</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> <span class="keywordflow">for</span> (uint8_t i = 1; i &lt;= this-&gt;amount_of_rules; i++)</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> {</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> firewall_rule_t *rule_ptr = retrieve_firewall_rule(i);</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> this-&gt;add_rule_to_firewall(rule_ptr, <span class="keyword">false</span>);</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> }</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> }</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> Firewall::~Firewall()</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> {</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> }</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> firewall_rule_t *Firewall::get_rule_head()</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> {</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordflow">return</span> this-&gt;rule_head;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> }</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">void</span> Firewall::add_rule_to_firewall(firewall_rule_t *rule_ptr, <span class="keyword">const</span> <span class="keywordtype">bool</span> save_in_eeprom)</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> store_amount_of_rules(this-&gt;amount_of_rules);</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">if</span> (save_in_eeprom)</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> Storage::store_firewall_rule(rule_ptr);</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">if</span> (this-&gt;rule_head == NULL)</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> {</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> this-&gt;rule_head = rule_ptr;</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> rule_ptr-&gt;next = NULL;</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> }</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> firewall_rule_t *current_rule;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> current_rule = this-&gt;rule_head;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">while</span> (current_rule-&gt;next != NULL)</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> current_rule = current_rule-&gt;next;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> current_rule-&gt;next = rule_ptr;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> rule_ptr-&gt;next = NULL;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> }</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> firewall_rule_t *Firewall::add_rule_to_firewall(String *args)</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> {</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> firewall_rule_t *rule_ptr = (firewall_rule_t *)malloc(<span class="keyword">sizeof</span>(firewall_rule_t));</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> rule_ptr-&gt;key = ++this-&gt;amount_of_rules;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> strncpy(rule_ptr-&gt;ip, args[IP].c_str(), <span class="keyword">sizeof</span>(rule_ptr-&gt;ip));</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> rule_ptr-&gt;port_from = args[PORT_FROM].toInt();</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> rule_ptr-&gt;port_to = args[PORT_TO].toInt();</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> rule_ptr-&gt;protocol = string_to_protocol(args[PROTOCOL]);</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> rule_ptr-&gt;target = string_to_target(args[TARGET]);</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> add_rule_to_firewall(rule_ptr);</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> rule_ptr;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> }</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> firewall_rule_t *Firewall::update_rule_of_firewall(String *args, <span class="keyword">const</span> uint8_t key)</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> {</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> firewall_rule_t *rule_ptr = get_rule_from_firewall(key);</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">if</span> (rule_ptr == NULL)</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> rule_ptr;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> strncpy(rule_ptr-&gt;ip, args[IP].c_str(), <span class="keyword">sizeof</span>(rule_ptr-&gt;ip));</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> rule_ptr-&gt;port_from = args[PORT_FROM].toInt();</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> rule_ptr-&gt;port_to = args[PORT_TO].toInt();</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> rule_ptr-&gt;protocol = string_to_protocol(args[PROTOCOL]);</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> rule_ptr-&gt;target = string_to_target(args[TARGET]);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> Storage::store_firewall_rule(rule_ptr);</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">return</span> rule_ptr;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> }</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> firewall_rule_t *Firewall::get_rule_from_firewall(<span class="keyword">const</span> uint8_t key)</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> firewall_rule_t *rule_ptr = this-&gt;rule_head;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (this-&gt;rule_head == NULL)</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">while</span> (rule_ptr-&gt;key != key)</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> {</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span> (rule_ptr-&gt;next == NULL)</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> rule_ptr = rule_ptr-&gt;next;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> }</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> rule_ptr;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> }</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> ok_t Firewall::delete_rule_from_firewall(<span class="keyword">const</span> uint8_t key)</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (this-&gt;rule_head == NULL)</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">return</span> NO_ACTION;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> firewall_rule_t *current_rule = this-&gt;rule_head;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> firewall_rule_t *previous_rule = NULL;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> firewall_rule_t *temp = NULL;</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">while</span> (current_rule-&gt;key != key)</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> {</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (current_rule-&gt;next == NULL)</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> NO_ACTION;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> {</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> previous_rule = current_rule;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> current_rule = current_rule-&gt;next;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (current_rule == this-&gt;rule_head)</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> {</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> this-&gt;rule_head = rule_head-&gt;next;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> temp = this-&gt;rule_head;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> }</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> {</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> previous_rule-&gt;next = current_rule-&gt;next;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> temp = previous_rule-&gt;next;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> }</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">while</span> (temp != NULL)</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> {</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> temp-&gt;key--;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> temp = temp-&gt;next;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> free(current_rule);</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> this-&gt;amount_of_rules--;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> Storage::store_amount_of_rules(this-&gt;amount_of_rules);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span> (this-&gt;amount_of_rules != 0)</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> Storage::store_all_firewall_rules(rule_head);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> SUCCESS;</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> my_packet_t *Firewall::get_packet_information(<span class="keyword">struct</span> pbuf *pbuf)</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> my_packet_t *packet = (my_packet_t *)malloc(<span class="keyword">sizeof</span>(my_packet_t));</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">const</span> <span class="keyword">struct </span>ip_hdr *iphdr = (<span class="keyword">struct </span>ip_hdr *)pbuf-&gt;payload;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> u16_t iphdr_hlen = IPH_HL_BYTES(iphdr);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> packet-&gt;protocol = (firewall_protocol_t)IPH_PROTO(iphdr);</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> sprintf(packet-&gt;ip, <span class="stringliteral">&quot;%d.%d.%d.%d&quot;</span>, ip4_addr1_16_val(iphdr-&gt;src), ip4_addr2_16_val(iphdr-&gt;src), ip4_addr3_16_val(iphdr-&gt;src), ip4_addr4_16_val(iphdr-&gt;src));</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (packet-&gt;protocol == PROTOCOL_UDP)</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> {</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">const</span> <span class="keyword">struct </span>udp_hdr *udphdr = (<span class="keyword">const</span> <span class="keyword">struct </span>udp_hdr *)((<span class="keyword">const</span> u8_t *)iphdr + iphdr_hlen);</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> packet-&gt;port = lwip_ntohs(udphdr-&gt;dest);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> }</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (packet-&gt;protocol == PROTOCOL_TCP)</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> {</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">const</span> <span class="keyword">struct </span>tcp_hdr *tcphdr = (<span class="keyword">const</span> <span class="keyword">struct </span>tcp_hdr *)((<span class="keyword">const</span> u8_t *)iphdr + iphdr_hlen);</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> packet-&gt;port = lwip_ntohs(tcphdr-&gt;dest);</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> packet;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> }</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">bool</span> Firewall::rule_allows_packet(firewall_rule_t *rule_ptr, my_packet_t *packet)</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> {</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> (strncmp(rule_ptr-&gt;ip, packet-&gt;ip, IPV4ADDRESS_LENGTH) == 0)</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> {</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span> ((rule_ptr-&gt;protocol == PROTOCOL_ALL || packet-&gt;protocol == rule_ptr-&gt;protocol) &amp;&amp;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> is_in_range(packet-&gt;port, rule_ptr-&gt;port_from, rule_ptr-&gt;port_to) &amp;&amp;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> rule_ptr-&gt;target == TARGET_ACCEPT)</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> free(packet);</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> }</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordtype">bool</span> Firewall::is_packet_allowed(<span class="keyword">struct</span> pbuf *pbuf)</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> {</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// no rules -&gt; no action</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span> (this-&gt;amount_of_rules == 0)</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> my_packet_t *packet = get_packet_information(pbuf);</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> firewall_rule_t *rule_ptr = this-&gt;rule_head;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">while</span> (rule_ptr != NULL)</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span> (rule_allows_packet(rule_ptr, packet))</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> rule_ptr = rule_ptr-&gt;next;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> }</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> free(packet);</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> }</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>

View file

@ -0,0 +1,159 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/Firewall.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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('_firewall_8hpp_source.html',''); initResizable(); });
/* @license-end */
</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">Firewall.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef FIREWALL_HPP</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define FIREWALL_HPP</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;Utils.hpp&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;Storage.hpp&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &quot;WiFiClient.h&quot;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &quot;lwip/netif.h&quot;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;lwip/pbuf.h&quot;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;lwip/ip4.h&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;lwip/prot/udp.h&quot;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;lwip/prot/tcp.h&quot;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span>{</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"><a class="line" href="classfw_1_1_firewall.html"> 19</a></span> <span class="keyword">class </span><a class="code hl_class" href="classfw_1_1_firewall.html">Firewall</a> : <span class="keyword">public</span> <a class="code hl_class" href="classfw_1_1_storage.html">Storage</a></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> {</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <a class="code hl_function" href="classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42">Firewall</a>();</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_function" href="classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d">~Firewall</a>();</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *<a class="code hl_function" href="classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009">get_rule_head</a>();</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">add_rule_to_firewall</a>(<a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr, <span class="keyword">const</span> <span class="keywordtype">bool</span> save_in_eeprom = <span class="keyword">true</span>);</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *<a class="code hl_function" href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">add_rule_to_firewall</a>(String *args);</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *<a class="code hl_function" href="classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594">update_rule_of_firewall</a>(String *args, <span class="keyword">const</span> uint8_t key);</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *<a class="code hl_function" href="classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2">get_rule_from_firewall</a>(<span class="keyword">const</span> uint8_t key);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> ok_t <a class="code hl_function" href="classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1">delete_rule_from_firewall</a>(<span class="keyword">const</span> uint8_t key);</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d">is_packet_allowed</a>(<span class="keyword">struct</span> pbuf *pbuf);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1">rule_allows_packet</a>(<a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr, <a class="code hl_struct" href="structmy__packet__t.html">my_packet_t</a> *packet);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_struct" href="structmy__packet__t.html">my_packet_t</a> *<a class="code hl_function" href="classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba">get_packet_information</a>(<span class="keyword">struct</span> pbuf *pbuf);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> uint8_t amount_of_rules = 0;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_head = NULL;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> };</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>}</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassfw_1_1_firewall_html"><div class="ttname"><a href="classfw_1_1_firewall.html">fw::Firewall</a></div><div class="ttdoc">The Firewall will handle Firewall rules as linked list.</div><div class="ttdef"><b>Definition:</b> Firewall.hpp:20</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a25fac8da12651a927c8285aa75e213d1"><div class="ttname"><a href="classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1">fw::Firewall::delete_rule_from_firewall</a></div><div class="ttdeci">ok_t delete_rule_from_firewall(const uint8_t key)</div><div class="ttdoc">delete rule from the firewall linked list, update amount of rules, store new order of rules in Storag...</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:88</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a26fea38729777e00e5ee3a8d58f785b1"><div class="ttname"><a href="classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1">fw::Firewall::rule_allows_packet</a></div><div class="ttdeci">bool rule_allows_packet(firewall_rule_t *rule_ptr, my_packet_t *packet)</div><div class="ttdoc">checks if network packet is allowed by the rule</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:151</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a2c7c043d66b645ecc15e71561132057d"><div class="ttname"><a href="classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d">fw::Firewall::~Firewall</a></div><div class="ttdeci">~Firewall()</div><div class="ttdoc">Destroy the Firewall object.</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:15</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a2cc2717bd5999bc9a2f24ae33e4abd42"><div class="ttname"><a href="classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42">fw::Firewall::Firewall</a></div><div class="ttdeci">Firewall()</div><div class="ttdoc">Construct a new Firewall object, retrieve current amount of firewall rules and restore them from Stor...</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:5</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a6815085477349f902e77cc5564b1b5ba"><div class="ttname"><a href="classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba">fw::Firewall::get_packet_information</a></div><div class="ttdeci">my_packet_t * get_packet_information(struct pbuf *pbuf)</div><div class="ttdoc">prepares the necessary information to check packet</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:128</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a7aa017cfb1ae6d6748d3f8c48e18dcf2"><div class="ttname"><a href="classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2">fw::Firewall::get_rule_from_firewall</a></div><div class="ttdeci">firewall_rule_t * get_rule_from_firewall(const uint8_t key)</div><div class="ttdoc">retrieve rule from the firewall linked list</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:73</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a81eca0d34c28e5c4244b557a1f8e047d"><div class="ttname"><a href="classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d">fw::Firewall::is_packet_allowed</a></div><div class="ttdeci">bool is_packet_allowed(struct pbuf *pbuf)</div><div class="ttdoc">checks if network packet is allowed to pass firewall</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:166</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a86f7d6ef56888f673fa46c4bc9ad3009"><div class="ttname"><a href="classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009">fw::Firewall::get_rule_head</a></div><div class="ttdeci">firewall_rule_t * get_rule_head()</div><div class="ttdoc">Get the current rule head, it indicates the first rule position of the linked list.</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:19</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_a987ec9a98b7d6ef56cf569e0290b3594"><div class="ttname"><a href="classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594">fw::Firewall::update_rule_of_firewall</a></div><div class="ttdeci">firewall_rule_t * update_rule_of_firewall(String *args, const uint8_t key)</div><div class="ttdoc">update rule of firewall, store it in Storage</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:58</div></div>
<div class="ttc" id="aclassfw_1_1_firewall_html_aae2a4a36257033c91f8f183b11de82c5"><div class="ttname"><a href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">fw::Firewall::add_rule_to_firewall</a></div><div class="ttdeci">void add_rule_to_firewall(firewall_rule_t *rule_ptr, const bool save_in_eeprom=true)</div><div class="ttdoc">add a new rule to the linked list, update amount of rules, store it in Storage if save_in_eeprom is t...</div><div class="ttdef"><b>Definition:</b> Firewall.cpp:24</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html"><div class="ttname"><a href="classfw_1_1_storage.html">fw::Storage</a></div><div class="ttdoc">The Storage will handle Firewall rules in EEPROM.</div><div class="ttdef"><b>Definition:</b> Storage.hpp:18</div></div>
<div class="ttc" id="astructfirewall__rule__t_html"><div class="ttname"><a href="structfirewall__rule__t.html">firewall_rule_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:51</div></div>
<div class="ttc" id="astructmy__packet__t_html"><div class="ttname"><a href="structmy__packet__t.html">my_packet_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:64</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>Firewall.hpp</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,196 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/Storage.cpp 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="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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">Storage.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;Storage.hpp&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span>{</div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> Storage::Storage()</div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> {</div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> this-&gt;max_rules = 15;</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> this-&gt;eeprom_amount_of_rules = 0;</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> this-&gt;eeprom_rules_head = 1;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> this-&gt;eeprom_size = this-&gt;max_rules * <span class="keyword">sizeof</span>(firewall_rule_t) + eeprom_rules_head;</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> EEPROM.begin(this-&gt;eeprom_size);</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> }</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> Storage::~Storage()</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> {</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> }</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> uint16_t Storage::eeprom_rule_position(uint8_t key)</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> {</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keywordflow">return</span> eeprom_rules_head + (key - 1) * <span class="keyword">sizeof</span>(firewall_rule_t);</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> }</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> uint8_t Storage::retrieve_amount_of_rules()</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> {</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> uint8_t amount_of_rules = EEPROM.read(this-&gt;eeprom_amount_of_rules);</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">if</span> (amount_of_rules &gt; this-&gt;max_rules)</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> this-&gt;memory.begin(<span class="stringliteral">&quot;settings&quot;</span>, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">const</span> uint8_t amount_of_rules = memory.getUChar(<span class="stringliteral">&quot;amount_of_rules&quot;</span>, 0);</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> this-&gt;memory.end();</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">return</span> amount_of_rules;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> }</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> Storage::store_amount_of_rules(<span class="keyword">const</span> uint8_t new_amount)</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> {</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> EEPROM.put(this-&gt;eeprom_amount_of_rules, new_amount);</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> EEPROM.commit();</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> this-&gt;memory.begin(<span class="stringliteral">&quot;settings&quot;</span>, <span class="keyword">false</span>);</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> this-&gt;memory.putUChar(<span class="stringliteral">&quot;amount_of_rules&quot;</span>, new_amount);</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> this-&gt;memory.end();</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> firewall_rule_t *Storage::retrieve_firewall_rule(<span class="keyword">const</span> uint8_t key)</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> firewall_rule_t *rule_ptr = (firewall_rule_t *)malloc(<span class="keyword">sizeof</span>(firewall_rule_t));</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> rule_ptr-&gt;key = key;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> uint16_t eeprom_position = eeprom_rule_position(key);</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> EEPROM.get(eeprom_position, rule_ptr-&gt;ip);</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> EEPROM.get(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;ip), rule_ptr-&gt;port_from);</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> EEPROM.get(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;port_from), rule_ptr-&gt;port_to);</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> EEPROM.get(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;port_to), rule_ptr-&gt;protocol);</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> EEPROM.get(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;protocol), rule_ptr-&gt;target);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">char</span> rulename[10]; <span class="comment">// fwRule99\n</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> sprintf(rulename, <span class="stringliteral">&quot;fwRule%i&quot;</span>, key);</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> this-&gt;memory.begin(rulename, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> strncpy(rule_ptr-&gt;ip, this-&gt;memory.getString(firewall_fields[IP], <span class="stringliteral">&quot;0.0.0.0&quot;</span>).c_str(), <span class="keyword">sizeof</span>(rule_ptr-&gt;ip));</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> rule_ptr-&gt;port_from = this-&gt;memory.getUShort(firewall_fields[PORT_FROM], 0);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> rule_ptr-&gt;port_to = this-&gt;memory.getUShort(firewall_fields[PORT_TO], 0);</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> rule_ptr-&gt;protocol = <span class="keyword">static_cast&lt;</span>firewall_protocol_t<span class="keyword">&gt;</span>(this-&gt;memory.getUChar(firewall_fields[PROTOCOL], PROTOCOL_ALL));</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> rule_ptr-&gt;target = <span class="keyword">static_cast&lt;</span>firewall_target_t<span class="keyword">&gt;</span>(this-&gt;memory.getUChar(firewall_fields[TARGET], TARGET_ACCEPT));</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> this-&gt;memory.end();</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> rule_ptr;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> Storage::store_all_firewall_rules(firewall_rule_t *rule_head)</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> {</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> firewall_rule_t *temp = rule_head;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">while</span> (temp != NULL)</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> store_firewall_rule(temp);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> temp = temp-&gt;next;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> }</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span> Storage::store_firewall_rule(firewall_rule_t *rule_ptr)</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> {</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> uint16_t eeprom_position = eeprom_rule_position(rule_ptr-&gt;key);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> EEPROM.put(eeprom_position, rule_ptr-&gt;ip);</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> EEPROM.put(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;ip), rule_ptr-&gt;port_from);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> EEPROM.put(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;port_from), rule_ptr-&gt;port_to);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> EEPROM.put(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;port_to), rule_ptr-&gt;protocol);</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> EEPROM.put(eeprom_position += <span class="keyword">sizeof</span>(rule_ptr-&gt;protocol), rule_ptr-&gt;target);</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> EEPROM.commit();</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">char</span> rulename[10]; <span class="comment">// fwRule99\n</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> sprintf(rulename, <span class="stringliteral">&quot;fwRule%i&quot;</span>, rule_ptr-&gt;key);</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> this-&gt;memory.begin(rulename, <span class="keyword">false</span>);</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> this-&gt;memory.putString(firewall_fields[IP], rule_ptr-&gt;ip);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> this-&gt;memory.putUShort(firewall_fields[PORT_FROM], rule_ptr-&gt;port_from);</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> this-&gt;memory.putUShort(firewall_fields[PORT_TO], rule_ptr-&gt;port_to);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> this-&gt;memory.putUChar(firewall_fields[PROTOCOL], rule_ptr-&gt;protocol);</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> this-&gt;memory.putUChar(firewall_fields[TARGET], rule_ptr-&gt;target);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> this-&gt;memory.end();</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> }</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span>}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>

View file

@ -0,0 +1,153 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/Storage.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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('_storage_8hpp_source.html',''); initResizable(); });
/* @license-end */
</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">Storage.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef STORAGE_HPP</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define STORAGE_HPP</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;EEPROM.h&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &quot;Preferences.h&quot;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;Utils.hpp&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span>{</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classfw_1_1_storage.html"> 17</a></span> <span class="keyword">class </span><a class="code hl_class" href="classfw_1_1_storage.html">Storage</a></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> {</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_function" href="classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e">Storage</a>();</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_function" href="classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1">~Storage</a>();</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#ifdef ESP8266</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> uint8_t max_rules;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> uint16_t eeprom_size;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> uint16_t eeprom_amount_of_rules;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> uint16_t eeprom_rules_head;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> uint16_t eeprom_rule_position(uint8_t key);</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> Preferences memory;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> uint8_t <a class="code hl_function" href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">retrieve_amount_of_rules</a>();</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">store_amount_of_rules</a>(<span class="keyword">const</span> uint8_t new_amount);</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *<a class="code hl_function" href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">retrieve_firewall_rule</a>(<span class="keyword">const</span> uint8_t key);</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">store_all_firewall_rules</a>(<a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_head);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">store_firewall_rule</a>(<a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> };</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>}</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="aclassfw_1_1_storage_html"><div class="ttname"><a href="classfw_1_1_storage.html">fw::Storage</a></div><div class="ttdoc">The Storage will handle Firewall rules in EEPROM.</div><div class="ttdef"><b>Definition:</b> Storage.hpp:18</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html_a11b6f2d893abc79879418853d4f840e1"><div class="ttname"><a href="classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1">fw::Storage::~Storage</a></div><div class="ttdeci">~Storage()</div><div class="ttdoc">Destroy the Storage object.</div><div class="ttdef"><b>Definition:</b> Storage.cpp:16</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html_a20d0089533fea31893b323f7fde8535c"><div class="ttname"><a href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">fw::Storage::retrieve_firewall_rule</a></div><div class="ttdeci">firewall_rule_t * retrieve_firewall_rule(const uint8_t key)</div><div class="ttdoc">retrieve a Firewall rule from Storage</div><div class="ttdef"><b>Definition:</b> Storage.cpp:54</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html_a7747d174b1b3dd6bb417c1c5a8ac259c"><div class="ttname"><a href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">fw::Storage::store_all_firewall_rules</a></div><div class="ttdeci">void store_all_firewall_rules(firewall_rule_t *rule_head)</div><div class="ttdoc">store all Firewall rules in Storage</div><div class="ttdef"><b>Definition:</b> Storage.cpp:81</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html_a79d1951d339a19edab7fd22aaa68cc96"><div class="ttname"><a href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">fw::Storage::store_amount_of_rules</a></div><div class="ttdeci">void store_amount_of_rules(const uint8_t new_amount)</div><div class="ttdoc">store a new amount of Firewall rules in the Storage</div><div class="ttdef"><b>Definition:</b> Storage.cpp:42</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html_a9b9fcc0e523d4b14a77e33a5806a348e"><div class="ttname"><a href="classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e">fw::Storage::Storage</a></div><div class="ttdeci">Storage()</div><div class="ttdoc">Construct a new Storage object.</div><div class="ttdef"><b>Definition:</b> Storage.cpp:5</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html_a9c1d226dbad072a6d0bf7e3507b7863b"><div class="ttname"><a href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">fw::Storage::store_firewall_rule</a></div><div class="ttdeci">void store_firewall_rule(firewall_rule_t *rule_ptr)</div><div class="ttdoc">store Firewall rule in Storage</div><div class="ttdef"><b>Definition:</b> Storage.cpp:91</div></div>
<div class="ttc" id="aclassfw_1_1_storage_html_aba4b010a57e6f5f5255b41d832891394"><div class="ttname"><a href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">fw::Storage::retrieve_amount_of_rules</a></div><div class="ttdeci">uint8_t retrieve_amount_of_rules()</div><div class="ttdoc">retrieve the current amount of Firewall rules in the Storage</div><div class="ttdef"><b>Definition:</b> Storage.cpp:27</div></div>
<div class="ttc" id="astructfirewall__rule__t_html"><div class="ttname"><a href="structfirewall__rule__t.html">firewall_rule_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:51</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>Storage.hpp</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,137 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/Utils.cpp 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="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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">Utils.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &quot;Utils.hpp&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span>{</div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> String protocol_to_string(firewall_protocol_t &amp;protocol)</div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> {</div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> <span class="keywordflow">switch</span> (protocol)</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> {</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="keywordflow">case</span> PROTOCOL_TCP:</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;TCP&quot;</span>;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <span class="keywordflow">case</span> PROTOCOL_UDP:</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;UDP&quot;</span>;</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;ALL&quot;</span>;</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> }</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> }</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> firewall_protocol_t string_to_protocol(String &amp;protocol)</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> {</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keywordflow">if</span> (protocol.equals(<span class="stringliteral">&quot;TCP&quot;</span>))</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordflow">return</span> PROTOCOL_TCP;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (protocol.equals(<span class="stringliteral">&quot;UDP&quot;</span>))</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keywordflow">return</span> PROTOCOL_UDP;</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">return</span> PROTOCOL_ALL;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> }</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> String target_to_string(firewall_target_t &amp;target)</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> {</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">switch</span> (target)</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> {</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">case</span> TARGET_DROP:</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;DROP&quot;</span>;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;ACCEPT&quot;</span>;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> }</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> }</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> firewall_target_t string_to_target(String &amp;target)</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> {</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span> (target.equals(<span class="stringliteral">&quot;DROP&quot;</span>))</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> TARGET_DROP;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> TARGET_ACCEPT;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> }</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">void</span> endless_loop()</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> {</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> Serial.printf(<span class="stringliteral">&quot;Something went wrong. Running endless loop until fixed...&quot;</span>);</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> delay(500);</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> }</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">bool</span> is_in_range(<span class="keyword">const</span> uint16_t number, <span class="keyword">const</span> uint16_t lower, <span class="keyword">const</span> uint16_t upper)</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">return</span> lower &lt;= number &amp;&amp; number &lt;= upper;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> }</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>

View file

@ -0,0 +1,198 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src/Utils.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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('_utils_8hpp_source.html',''); initResizable(); });
/* @license-end */
</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">Utils.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef UTILS_HPP</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define UTILS_HPP</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;WString.h&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="keyword">namespace </span>fw</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span>{</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t IPV4ADDRESS_LENGTH = 16;</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t CREDENTIALS_LENGTH = 32;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">static</span> <span class="keyword">const</span> uint8_t firewall_fields_amount = 6;</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">const</span> <span class="keywordtype">char</span> firewall_fields[firewall_fields_amount][10] = {<span class="stringliteral">&quot;key&quot;</span>, <span class="stringliteral">&quot;ip&quot;</span>, <span class="stringliteral">&quot;port_from&quot;</span>, <span class="stringliteral">&quot;port_to&quot;</span>, <span class="stringliteral">&quot;protocol&quot;</span>, <span class="stringliteral">&quot;target&quot;</span>};</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> firewall_targets : uint8_t</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> {</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> TARGET_DROP = 1,</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> TARGET_ACCEPT = 2,</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> } firewall_target_t;</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> firewall_protocols : uint8_t</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> PROTOCOL_TCP = 6,</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> PROTOCOL_UDP = 17,</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> PROTOCOL_ALL = 255,</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> } firewall_protocol_t;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> ok : uint8_t</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> {</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> SUCCESS = 0,</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> ERROR = 1,</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> NO_ACTION = 2,</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> } ok_t;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> auth : uint8_t</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> {</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> AUTHENTICATED = 0,</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> DENIED = 1,</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> } auth_t;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structfirewall__rule__t.html"> 50</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>firewall_rules</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> {</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> uint8_t key;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">char</span> ip[IPV4ADDRESS_LENGTH];</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> uint16_t port_from;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> uint16_t port_to;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> firewall_protocol_t protocol;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> firewall_target_t target;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">struct </span>firewall_rules *next;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> } <a class="code hl_struct" href="structfirewall__rule__t.html">firewall_rule_t</a>;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structmy__packet__t.html"> 63</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>my_packet</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> {</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">char</span> ip[IPV4ADDRESS_LENGTH];</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> firewall_protocol_t protocol;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> uint16_t port;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> } <a class="code hl_struct" href="structmy__packet__t.html">my_packet_t</a>;</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> firewall_fields : uint8_t</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> {</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> KEY,</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> IP,</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> PORT_FROM,</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> PORT_TO,</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> PROTOCOL,</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> TARGET,</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> } firewall_fields_t;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="structcredential__t.html"> 84</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>credentials</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">char</span> password[CREDENTIALS_LENGTH];</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">char</span> username[CREDENTIALS_LENGTH];</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> } <a class="code hl_struct" href="structcredential__t.html">credential_t</a>;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="structapi__endpoint__t.html"> 92</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>api_endpoints</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> {</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">char</span> uri[60];</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">char</span> method[7];</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">char</span> description[30];</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">struct </span>api_endpoints *next;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> } <a class="code hl_struct" href="structapi__endpoint__t.html">api_endpoint_t</a>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> String protocol_to_string(firewall_protocol_t &amp;protocol);</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> firewall_protocol_t string_to_protocol(String &amp;protocol);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> String target_to_string(firewall_target_t &amp;target);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> firewall_target_t string_to_target(String &amp;target);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">void</span> endless_loop();</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">bool</span> is_in_range(<span class="keyword">const</span> uint16_t number, <span class="keyword">const</span> uint16_t lower, <span class="keyword">const</span> uint16_t upper);</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor">#endif</span></div>
<div class="ttc" id="astructapi__endpoint__t_html"><div class="ttname"><a href="structapi__endpoint__t.html">api_endpoint_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:93</div></div>
<div class="ttc" id="astructcredential__t_html"><div class="ttname"><a href="structcredential__t.html">credential_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:85</div></div>
<div class="ttc" id="astructfirewall__rule__t_html"><div class="ttname"><a href="structfirewall__rule__t.html">firewall_rule_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:51</div></div>
<div class="ttc" id="astructmy__packet__t_html"><div class="ttname"><a href="structmy__packet__t.html">my_packet_t</a></div><div class="ttdef"><b>Definition:</b> Utils.hpp:64</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>Utils.hpp</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

110
doxygen/html/annotated.html Normal file
View file

@ -0,0 +1,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Class List</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('annotated.html',''); initResizable(); });
/* @license-end */
</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">Class List</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>fw</b></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfw_1_1_a_p_i.html" target="_self">API</a></td><td class="desc">The <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> to create, edit or remove <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules </td></tr>
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfw_1_1_firewall.html" target="_self">Firewall</a></td><td class="desc">The <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules as linked list </td></tr>
<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfw_1_1_storage.html" target="_self">Storage</a></td><td class="desc">The <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in EEPROM </td></tr>
<tr id="row_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structapi__endpoint__t.html" target="_self">api_endpoint_t</a></td><td class="desc"></td></tr>
<tr id="row_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structcredential__t.html" target="_self">credential_t</a></td><td class="desc"></td></tr>
<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfirewall__rule__t.html" target="_self">firewall_rule_t</a></td><td class="desc"></td></tr>
<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmy__packet__t.html" target="_self">my_packet_t</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,12 @@
var annotated_dup =
[
[ "fw", null, [
[ "API", "classfw_1_1_a_p_i.html", "classfw_1_1_a_p_i" ],
[ "Firewall", "classfw_1_1_firewall.html", "classfw_1_1_firewall" ],
[ "Storage", "classfw_1_1_storage.html", "classfw_1_1_storage" ]
] ],
[ "api_endpoint_t", "structapi__endpoint__t.html", null ],
[ "credential_t", "structcredential__t.html", null ],
[ "firewall_rule_t", "structfirewall__rule__t.html", null ],
[ "my_packet_t", "structmy__packet__t.html", null ]
];

BIN
doxygen/html/bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
doxygen/html/bdwn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

116
doxygen/html/classes.html Normal file
View file

@ -0,0 +1,116 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Class Index</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classes.html',''); initResizable(); });
/* @license-end */
</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">Class Index</div></div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a></div>
<div class="classindex">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_A" name="letter_A">A</a></dt>
<dd><a class="el" href="classfw_1_1_a_p_i.html">API</a> (fw)</dd><dd><a class="el" href="structapi__endpoint__t.html">api_endpoint_t</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_C" name="letter_C">C</a></dt>
<dd><a class="el" href="structcredential__t.html">credential_t</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt>
<dd><a class="el" href="classfw_1_1_firewall.html">Firewall</a> (fw)</dd><dd><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_M" name="letter_M">M</a></dt>
<dd><a class="el" href="structmy__packet__t.html">my_packet_t</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
<dd><a class="el" href="classfw_1_1_storage.html">Storage</a> (fw)</dd></dl>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,133 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Member List</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classfw_1_1_a_p_i.html',''); initResizable(); });
/* @license-end */
</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">fw::API Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772">add_endpoint_to_list</a>(const String uri, const char *method, const char *description)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">API</a>(Firewall *, const char *cert, const char *key, const char *username, const char *password, const String ip, const uint16_t port=8080)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>api_ip</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>api_port</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c">check_auth</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab">construct_json_api</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8">construct_json_api_endpoint</a>(api_endpoint_t *api_ptr)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5">construct_json_firewall</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b">construct_json_firewall_rule</a>(firewall_rule_t *rule_ptr)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>credentials</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb">delete_firewall_handler</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>endpoint_head</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>firewall</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1">get_endpoint_list_handler</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a">get_firewall_rule_handler</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8">get_firewall_rules_handler</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07">get_url_base</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802">json_array_response</a>(String serialized_string, const uint16_t response_code)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5">json_generic_response</a>(String serialized_string, const uint16_t response_code)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15">json_message_response</a>(String message, const uint16_t response_code)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">json_new_attribute</a>(String key, String value, bool last=false)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#aba378d97c999dda14ef2e4e97a9948f5">json_new_attribute</a>(String key, uint32_t value, bool last=false)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>json_response_type</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d">not_found_handler</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3">post_firewall_handler</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45">put_firewall_handler</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50">request_has_all_firewall_parameter</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>server</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d">setup_auth</a>(const char *username, const char *password)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20">setup_routing</a>(const char *cert, const char *key)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TAG</b> (defined in <a class="el" href="classfw_1_1_a_p_i.html">fw::API</a>)</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab">~API</a>()</td><td class="entry"><a class="el" href="classfw_1_1_a_p_i.html">fw::API</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,905 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: fw::API Class Reference</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classfw_1_1_a_p_i.html',''); initResizable(); });
/* @license-end */
</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="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classfw_1_1_a_p_i-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">fw::API Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>The <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> to create, edit or remove <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules.
<a href="classfw_1_1_a_p_i.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_a_p_i_8hpp_source.html">API.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a033d5efd077dfad456cb6e6e7dd2baca"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">API</a> (<a class="el" href="classfw_1_1_firewall.html">Firewall</a> *, const char *cert, const char *key, const char *username, const char *password, const String ip, const uint16_t port=8080)</td></tr>
<tr class="memdesc:a033d5efd077dfad456cb6e6e7dd2baca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a new <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> object, assign ip and port to generate endpoint list, setup authentication, create WebServer, setup routing. <a href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">More...</a><br /></td></tr>
<tr class="separator:a033d5efd077dfad456cb6e6e7dd2baca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66ac0bd592bb08d069aea199668670ab"><td class="memItemLeft" align="right" valign="top"><a id="a66ac0bd592bb08d069aea199668670ab" name="a66ac0bd592bb08d069aea199668670ab"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>~API</b> ()</td></tr>
<tr class="memdesc:a66ac0bd592bb08d069aea199668670ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy the <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> object. <br /></td></tr>
<tr class="separator:a66ac0bd592bb08d069aea199668670ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:af5dc938ae5a274e3599d637e672b8d07"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07">get_url_base</a> ()</td></tr>
<tr class="memdesc:af5dc938ae5a274e3599d637e672b8d07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the url base string e.g. <a href="http://0.0.0.0:8080/api">http://0.0.0.0:8080/api</a>. <a href="classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07">More...</a><br /></td></tr>
<tr class="separator:af5dc938ae5a274e3599d637e672b8d07"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45dcdd4969f70a7f1a02e49a47b16a1d"><td class="memItemLeft" align="right" valign="top">ok_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d">setup_auth</a> (const char *username, const char *password)</td></tr>
<tr class="memdesc:a45dcdd4969f70a7f1a02e49a47b16a1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set up authentication. <a href="classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d">More...</a><br /></td></tr>
<tr class="separator:a45dcdd4969f70a7f1a02e49a47b16a1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc9523a1b6e6a6e8f57a514a25c35b8c"><td class="memItemLeft" align="right" valign="top">auth_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c">check_auth</a> ()</td></tr>
<tr class="memdesc:adc9523a1b6e6a6e8f57a514a25c35b8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">check if request to <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> can proceed or needs to stop <a href="classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c">More...</a><br /></td></tr>
<tr class="separator:adc9523a1b6e6a6e8f57a514a25c35b8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90986dc50f303564e6f5af6d3707dd20"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20">setup_routing</a> (const char *cert, const char *key)</td></tr>
<tr class="memdesc:a90986dc50f303564e6f5af6d3707dd20"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set up the routing/endpoints and encryption. <a href="classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20">More...</a><br /></td></tr>
<tr class="separator:a90986dc50f303564e6f5af6d3707dd20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad90a1bfa8e00c4e25a091e5e9a61772"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772">add_endpoint_to_list</a> (const String uri, const char *method, const char *description)</td></tr>
<tr class="memdesc:aad90a1bfa8e00c4e25a091e5e9a61772"><td class="mdescLeft">&#160;</td><td class="mdescRight">add endpoint information to linked list that is used for the /api endpoint <a href="classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772">More...</a><br /></td></tr>
<tr class="separator:aad90a1bfa8e00c4e25a091e5e9a61772"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb74e3b9efc2305c943683b14957ac9d"><td class="memItemLeft" align="right" valign="top"><a id="aeb74e3b9efc2305c943683b14957ac9d" name="aeb74e3b9efc2305c943683b14957ac9d"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>not_found_handler</b> ()</td></tr>
<tr class="memdesc:aeb74e3b9efc2305c943683b14957ac9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">handling not found <br /></td></tr>
<tr class="separator:aeb74e3b9efc2305c943683b14957ac9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a734cbd9da536fb297da87b4310f20ba1"><td class="memItemLeft" align="right" valign="top"><a id="a734cbd9da536fb297da87b4310f20ba1" name="a734cbd9da536fb297da87b4310f20ba1"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>get_endpoint_list_handler</b> ()</td></tr>
<tr class="memdesc:a734cbd9da536fb297da87b4310f20ba1"><td class="mdescLeft">&#160;</td><td class="mdescRight">GET handler to retrieve endpoint list. <br /></td></tr>
<tr class="separator:a734cbd9da536fb297da87b4310f20ba1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac76f5a6c9c28d71772b238a51b122e4a"><td class="memItemLeft" align="right" valign="top"><a id="ac76f5a6c9c28d71772b238a51b122e4a" name="ac76f5a6c9c28d71772b238a51b122e4a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>get_firewall_rule_handler</b> ()</td></tr>
<tr class="memdesc:ac76f5a6c9c28d71772b238a51b122e4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">GET handler to retrieve single firewall rule. <br /></td></tr>
<tr class="separator:ac76f5a6c9c28d71772b238a51b122e4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab904f77fa777a1c8c19deb8e39cf89e8"><td class="memItemLeft" align="right" valign="top"><a id="ab904f77fa777a1c8c19deb8e39cf89e8" name="ab904f77fa777a1c8c19deb8e39cf89e8"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>get_firewall_rules_handler</b> ()</td></tr>
<tr class="memdesc:ab904f77fa777a1c8c19deb8e39cf89e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">GET handler to retrieve firewall rules. <br /></td></tr>
<tr class="separator:ab904f77fa777a1c8c19deb8e39cf89e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d78e9dd43abb72da8872cb207db25e3"><td class="memItemLeft" align="right" valign="top"><a id="a2d78e9dd43abb72da8872cb207db25e3" name="a2d78e9dd43abb72da8872cb207db25e3"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>post_firewall_handler</b> ()</td></tr>
<tr class="memdesc:a2d78e9dd43abb72da8872cb207db25e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">POST handler to create firewall rule. <br /></td></tr>
<tr class="separator:a2d78e9dd43abb72da8872cb207db25e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ce4a9dd9afae493f6639b6fb3f6ba45"><td class="memItemLeft" align="right" valign="top"><a id="a6ce4a9dd9afae493f6639b6fb3f6ba45" name="a6ce4a9dd9afae493f6639b6fb3f6ba45"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>put_firewall_handler</b> ()</td></tr>
<tr class="memdesc:a6ce4a9dd9afae493f6639b6fb3f6ba45"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUT handler to update firewall rule. <br /></td></tr>
<tr class="separator:a6ce4a9dd9afae493f6639b6fb3f6ba45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a592c2aa501ff920ebcc125f8d5635deb"><td class="memItemLeft" align="right" valign="top"><a id="a592c2aa501ff920ebcc125f8d5635deb" name="a592c2aa501ff920ebcc125f8d5635deb"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>delete_firewall_handler</b> ()</td></tr>
<tr class="memdesc:a592c2aa501ff920ebcc125f8d5635deb"><td class="mdescLeft">&#160;</td><td class="mdescRight">DELETE handler to delete firewall rule. <br /></td></tr>
<tr class="separator:a592c2aa501ff920ebcc125f8d5635deb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abab79e90786d14836dcf113077891c50"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50">request_has_all_firewall_parameter</a> ()</td></tr>
<tr class="memdesc:abab79e90786d14836dcf113077891c50"><td class="mdescLeft">&#160;</td><td class="mdescRight">check if request to create/update firewall rule has all required parameter <a href="classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50">More...</a><br /></td></tr>
<tr class="separator:abab79e90786d14836dcf113077891c50"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ff5aeb3b916dae9219041dc240d9156"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">json_new_attribute</a> (String key, String value, bool last=false)</td></tr>
<tr class="memdesc:a0ff5aeb3b916dae9219041dc240d9156"><td class="mdescLeft">&#160;</td><td class="mdescRight">add another attribute to the json object <a href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">More...</a><br /></td></tr>
<tr class="separator:a0ff5aeb3b916dae9219041dc240d9156"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba378d97c999dda14ef2e4e97a9948f5"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#aba378d97c999dda14ef2e4e97a9948f5">json_new_attribute</a> (String key, uint32_t value, bool last=false)</td></tr>
<tr class="memdesc:aba378d97c999dda14ef2e4e97a9948f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">add another attribute to the json object <a href="classfw_1_1_a_p_i.html#aba378d97c999dda14ef2e4e97a9948f5">More...</a><br /></td></tr>
<tr class="separator:aba378d97c999dda14ef2e4e97a9948f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acbebab924241292706c0287dca5c3ff5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5">json_generic_response</a> (String serialized_string, const uint16_t response_code)</td></tr>
<tr class="memdesc:acbebab924241292706c0287dca5c3ff5"><td class="mdescLeft">&#160;</td><td class="mdescRight">json response to send any string and response code <a href="classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5">More...</a><br /></td></tr>
<tr class="separator:acbebab924241292706c0287dca5c3ff5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1892bc26b882b055853e26ed95d8d802"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802">json_array_response</a> (String serialized_string, const uint16_t response_code)</td></tr>
<tr class="memdesc:a1892bc26b882b055853e26ed95d8d802"><td class="mdescLeft">&#160;</td><td class="mdescRight">json response that wraps the message in array brackets <a href="classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802">More...</a><br /></td></tr>
<tr class="separator:a1892bc26b882b055853e26ed95d8d802"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b7d4ce75b9cdba0dd39c6c949ef1c15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15">json_message_response</a> (String message, const uint16_t response_code)</td></tr>
<tr class="memdesc:a6b7d4ce75b9cdba0dd39c6c949ef1c15"><td class="mdescLeft">&#160;</td><td class="mdescRight">json response to send message as json object <a href="classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15">More...</a><br /></td></tr>
<tr class="separator:a6b7d4ce75b9cdba0dd39c6c949ef1c15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac249b6e7533414d0296bde477cecac1b"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b">construct_json_firewall_rule</a> (<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr)</td></tr>
<tr class="memdesc:ac249b6e7533414d0296bde477cecac1b"><td class="mdescLeft">&#160;</td><td class="mdescRight">construct a firewall rule as json object <a href="classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b">More...</a><br /></td></tr>
<tr class="separator:ac249b6e7533414d0296bde477cecac1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a682ec7e09a230507c39cbc7d7c7427d5"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5">construct_json_firewall</a> ()</td></tr>
<tr class="memdesc:a682ec7e09a230507c39cbc7d7c7427d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">construct array of all firewall rules as json object <a href="classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5">More...</a><br /></td></tr>
<tr class="separator:a682ec7e09a230507c39cbc7d7c7427d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a175d139d29530e2946f67789c9652da8"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8">construct_json_api_endpoint</a> (<a class="el" href="structapi__endpoint__t.html">api_endpoint_t</a> *api_ptr)</td></tr>
<tr class="memdesc:a175d139d29530e2946f67789c9652da8"><td class="mdescLeft">&#160;</td><td class="mdescRight">construct an <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> endpoint as json object <a href="classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8">More...</a><br /></td></tr>
<tr class="separator:a175d139d29530e2946f67789c9652da8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa541a477e14a992b55e3f75351887cab"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab">construct_json_api</a> ()</td></tr>
<tr class="memdesc:aa541a477e14a992b55e3f75351887cab"><td class="mdescLeft">&#160;</td><td class="mdescRight">construct array of all endpoints as json object <a href="classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab">More...</a><br /></td></tr>
<tr class="separator:aa541a477e14a992b55e3f75351887cab"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a63b835a5e99f9addd8389d35aefc1aa1"><td class="memItemLeft" align="right" valign="top"><a id="a63b835a5e99f9addd8389d35aefc1aa1" name="a63b835a5e99f9addd8389d35aefc1aa1"></a>
WebServer *&#160;</td><td class="memItemRight" valign="bottom"><b>server</b></td></tr>
<tr class="separator:a63b835a5e99f9addd8389d35aefc1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad9cd5f27dafe039210d12c60e1cd6172"><td class="memItemLeft" align="right" valign="top"><a id="ad9cd5f27dafe039210d12c60e1cd6172" name="ad9cd5f27dafe039210d12c60e1cd6172"></a>
<a class="el" href="classfw_1_1_firewall.html">Firewall</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>firewall</b></td></tr>
<tr class="separator:ad9cd5f27dafe039210d12c60e1cd6172"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc5ef98b67d8f69d633434fa6867e654"><td class="memItemLeft" align="right" valign="top"><a id="abc5ef98b67d8f69d633434fa6867e654" name="abc5ef98b67d8f69d633434fa6867e654"></a>
<a class="el" href="structcredential__t.html">credential_t</a>&#160;</td><td class="memItemRight" valign="bottom"><b>credentials</b></td></tr>
<tr class="separator:abc5ef98b67d8f69d633434fa6867e654"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec0db3ef7ca1b851a99eaf5a3ed0041c"><td class="memItemLeft" align="right" valign="top"><a id="aec0db3ef7ca1b851a99eaf5a3ed0041c" name="aec0db3ef7ca1b851a99eaf5a3ed0041c"></a>
<a class="el" href="structapi__endpoint__t.html">api_endpoint_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>endpoint_head</b> = NULL</td></tr>
<tr class="separator:aec0db3ef7ca1b851a99eaf5a3ed0041c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af59975d0ca4c32f2edb4e026fea008aa"><td class="memItemLeft" align="right" valign="top"><a id="af59975d0ca4c32f2edb4e026fea008aa" name="af59975d0ca4c32f2edb4e026fea008aa"></a>
String&#160;</td><td class="memItemRight" valign="bottom"><b>api_ip</b> = &quot;0.0.0.0&quot;</td></tr>
<tr class="separator:af59975d0ca4c32f2edb4e026fea008aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dcccd4386829794c7df93d21b1f91d8"><td class="memItemLeft" align="right" valign="top"><a id="a8dcccd4386829794c7df93d21b1f91d8" name="a8dcccd4386829794c7df93d21b1f91d8"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>api_port</b></td></tr>
<tr class="separator:a8dcccd4386829794c7df93d21b1f91d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a31fe0e90c14da484b9cabfcf00e65b04"><td class="memItemLeft" align="right" valign="top"><a id="a31fe0e90c14da484b9cabfcf00e65b04" name="a31fe0e90c14da484b9cabfcf00e65b04"></a>
String&#160;</td><td class="memItemRight" valign="bottom"><b>json_response_type</b> = &quot;application/json; charset=utf-8&quot;</td></tr>
<tr class="separator:a31fe0e90c14da484b9cabfcf00e65b04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9df393e56c5ff6f934f8fa628bf68217"><td class="memItemLeft" align="right" valign="top"><a id="a9df393e56c5ff6f934f8fa628bf68217" name="a9df393e56c5ff6f934f8fa628bf68217"></a>
const char *&#160;</td><td class="memItemRight" valign="bottom"><b>TAG</b> = &quot;[API]&quot;</td></tr>
<tr class="separator:a9df393e56c5ff6f934f8fa628bf68217"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >The <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> to create, edit or remove <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules. </p>
<dl class="section author"><dt>Author</dt><dd>Florian Hoss </dd></dl>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a033d5efd077dfad456cb6e6e7dd2baca" name="a033d5efd077dfad456cb6e6e7dd2baca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a033d5efd077dfad456cb6e6e7dd2baca">&#9670;&nbsp;</a></span>API()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">fw::API::API </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a> *&#160;</td>
<td class="paramname"><em>firewall</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>cert</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>username</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>password</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const String&#160;</td>
<td class="paramname"><em>ip</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint16_t&#160;</td>
<td class="paramname"><em>port</em> = <code>8080</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a new <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> object, assign ip and port to generate endpoint list, setup authentication, create WebServer, setup routing. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cert</td><td></td></tr>
<tr><td class="paramname">key</td><td></td></tr>
<tr><td class="paramname">username</td><td></td></tr>
<tr><td class="paramname">password</td><td></td></tr>
<tr><td class="paramname">ip</td><td></td></tr>
<tr><td class="paramname">port</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="aad90a1bfa8e00c4e25a091e5e9a61772" name="aad90a1bfa8e00c4e25a091e5e9a61772"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad90a1bfa8e00c4e25a091e5e9a61772">&#9670;&nbsp;</a></span>add_endpoint_to_list()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::API::add_endpoint_to_list </td>
<td>(</td>
<td class="paramtype">const String&#160;</td>
<td class="paramname"><em>uri</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>method</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>description</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>add endpoint information to linked list that is used for the /api endpoint </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">uri</td><td></td></tr>
<tr><td class="paramname">method</td><td></td></tr>
<tr><td class="paramname">description</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="adc9523a1b6e6a6e8f57a514a25c35b8c" name="adc9523a1b6e6a6e8f57a514a25c35b8c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc9523a1b6e6a6e8f57a514a25c35b8c">&#9670;&nbsp;</a></span>check_auth()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">auth_t fw::API::check_auth </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>check if request to <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> can proceed or needs to stop </p>
<dl class="section return"><dt>Returns</dt><dd>auth_t </dd></dl>
</div>
</div>
<a id="aa541a477e14a992b55e3f75351887cab" name="aa541a477e14a992b55e3f75351887cab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa541a477e14a992b55e3f75351887cab">&#9670;&nbsp;</a></span>construct_json_api()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">String fw::API::construct_json_api </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>construct array of all endpoints as json object </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">api_ptr</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>String </dd></dl>
</div>
</div>
<a id="a175d139d29530e2946f67789c9652da8" name="a175d139d29530e2946f67789c9652da8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a175d139d29530e2946f67789c9652da8">&#9670;&nbsp;</a></span>construct_json_api_endpoint()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">String fw::API::construct_json_api_endpoint </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structapi__endpoint__t.html">api_endpoint_t</a> *&#160;</td>
<td class="paramname"><em>api_ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>construct an <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> endpoint as json object </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">api_ptr</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>String </dd></dl>
</div>
</div>
<a id="a682ec7e09a230507c39cbc7d7c7427d5" name="a682ec7e09a230507c39cbc7d7c7427d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a682ec7e09a230507c39cbc7d7c7427d5">&#9670;&nbsp;</a></span>construct_json_firewall()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">String fw::API::construct_json_firewall </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>construct array of all firewall rules as json object </p>
<dl class="section return"><dt>Returns</dt><dd>String </dd></dl>
</div>
</div>
<a id="ac249b6e7533414d0296bde477cecac1b" name="ac249b6e7533414d0296bde477cecac1b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac249b6e7533414d0296bde477cecac1b">&#9670;&nbsp;</a></span>construct_json_firewall_rule()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">String fw::API::construct_json_firewall_rule </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td>
<td class="paramname"><em>rule_ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>construct a firewall rule as json object </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rule_ptr</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>String </dd></dl>
</div>
</div>
<a id="af5dc938ae5a274e3599d637e672b8d07" name="af5dc938ae5a274e3599d637e672b8d07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af5dc938ae5a274e3599d637e672b8d07">&#9670;&nbsp;</a></span>get_url_base()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">String fw::API::get_url_base </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the url base string e.g. <a href="http://0.0.0.0:8080/api">http://0.0.0.0:8080/api</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>String </dd></dl>
</div>
</div>
<a id="a1892bc26b882b055853e26ed95d8d802" name="a1892bc26b882b055853e26ed95d8d802"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1892bc26b882b055853e26ed95d8d802">&#9670;&nbsp;</a></span>json_array_response()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::API::json_array_response </td>
<td>(</td>
<td class="paramtype">String&#160;</td>
<td class="paramname"><em>serialized_string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint16_t&#160;</td>
<td class="paramname"><em>response_code</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>json response that wraps the message in array brackets </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">serialized_string</td><td></td></tr>
<tr><td class="paramname">response_code</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="acbebab924241292706c0287dca5c3ff5" name="acbebab924241292706c0287dca5c3ff5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbebab924241292706c0287dca5c3ff5">&#9670;&nbsp;</a></span>json_generic_response()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::API::json_generic_response </td>
<td>(</td>
<td class="paramtype">String&#160;</td>
<td class="paramname"><em>serialized_string</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint16_t&#160;</td>
<td class="paramname"><em>response_code</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>json response to send any string and response code </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">serialized_string</td><td></td></tr>
<tr><td class="paramname">response_code</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a6b7d4ce75b9cdba0dd39c6c949ef1c15" name="a6b7d4ce75b9cdba0dd39c6c949ef1c15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6b7d4ce75b9cdba0dd39c6c949ef1c15">&#9670;&nbsp;</a></span>json_message_response()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::API::json_message_response </td>
<td>(</td>
<td class="paramtype">String&#160;</td>
<td class="paramname"><em>message</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint16_t&#160;</td>
<td class="paramname"><em>response_code</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>json response to send message as json object </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">message</td><td></td></tr>
<tr><td class="paramname">response_code</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a0ff5aeb3b916dae9219041dc240d9156" name="a0ff5aeb3b916dae9219041dc240d9156"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0ff5aeb3b916dae9219041dc240d9156">&#9670;&nbsp;</a></span>json_new_attribute() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">String fw::API::json_new_attribute </td>
<td>(</td>
<td class="paramtype">String&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">String&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>last</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>add another attribute to the json object </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td></td></tr>
<tr><td class="paramname">value</td><td></td></tr>
<tr><td class="paramname">last</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>String </dd></dl>
</div>
</div>
<a id="aba378d97c999dda14ef2e4e97a9948f5" name="aba378d97c999dda14ef2e4e97a9948f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba378d97c999dda14ef2e4e97a9948f5">&#9670;&nbsp;</a></span>json_new_attribute() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">String fw::API::json_new_attribute </td>
<td>(</td>
<td class="paramtype">String&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>last</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>add another attribute to the json object </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td></td></tr>
<tr><td class="paramname">value</td><td></td></tr>
<tr><td class="paramname">last</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>String </dd></dl>
</div>
</div>
<a id="abab79e90786d14836dcf113077891c50" name="abab79e90786d14836dcf113077891c50"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abab79e90786d14836dcf113077891c50">&#9670;&nbsp;</a></span>request_has_all_firewall_parameter()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool fw::API::request_has_all_firewall_parameter </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>check if request to create/update firewall rule has all required parameter </p>
<dl class="section return"><dt>Returns</dt><dd>true </dd>
<dd>
false </dd></dl>
</div>
</div>
<a id="a45dcdd4969f70a7f1a02e49a47b16a1d" name="a45dcdd4969f70a7f1a02e49a47b16a1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45dcdd4969f70a7f1a02e49a47b16a1d">&#9670;&nbsp;</a></span>setup_auth()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">ok_t fw::API::setup_auth </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>username</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>password</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Set up authentication. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">username</td><td></td></tr>
<tr><td class="paramname">password</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ok_t </dd></dl>
</div>
</div>
<a id="a90986dc50f303564e6f5af6d3707dd20" name="a90986dc50f303564e6f5af6d3707dd20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90986dc50f303564e6f5af6d3707dd20">&#9670;&nbsp;</a></span>setup_routing()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::API::setup_routing </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>cert</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>key</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Set up the routing/endpoints and encryption. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cert</td><td></td></tr>
<tr><td class="paramname">key</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>src/<a class="el" href="_a_p_i_8hpp_source.html">API.hpp</a></li>
<li>src/API.cpp</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>fw</b></li><li class="navelem"><a class="el" href="classfw_1_1_a_p_i.html">API</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,27 @@
var classfw_1_1_a_p_i =
[
[ "API", "classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca", null ],
[ "~API", "classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab", null ],
[ "add_endpoint_to_list", "classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772", null ],
[ "check_auth", "classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c", null ],
[ "construct_json_api", "classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab", null ],
[ "construct_json_api_endpoint", "classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8", null ],
[ "construct_json_firewall", "classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5", null ],
[ "construct_json_firewall_rule", "classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b", null ],
[ "delete_firewall_handler", "classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb", null ],
[ "get_endpoint_list_handler", "classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1", null ],
[ "get_firewall_rule_handler", "classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a", null ],
[ "get_firewall_rules_handler", "classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8", null ],
[ "get_url_base", "classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07", null ],
[ "json_array_response", "classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802", null ],
[ "json_generic_response", "classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5", null ],
[ "json_message_response", "classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15", null ],
[ "json_new_attribute", "classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156", null ],
[ "json_new_attribute", "classfw_1_1_a_p_i.html#aba378d97c999dda14ef2e4e97a9948f5", null ],
[ "not_found_handler", "classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d", null ],
[ "post_firewall_handler", "classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3", null ],
[ "put_firewall_handler", "classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45", null ],
[ "request_has_all_firewall_parameter", "classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50", null ],
[ "setup_auth", "classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d", null ],
[ "setup_routing", "classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20", null ]
];

View file

@ -0,0 +1,122 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Member List</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classfw_1_1_firewall.html',''); initResizable(); });
/* @license-end */
</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">fw::Firewall Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">add_rule_to_firewall</a>(firewall_rule_t *rule_ptr, const bool save_in_eeprom=true)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#af1d9481f13052673c64aaf88d019e01d">add_rule_to_firewall</a>(String *args)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>amount_of_rules</b> (defined in <a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a>)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1">delete_rule_from_firewall</a>(const uint8_t key)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42">Firewall</a>()</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba">get_packet_information</a>(struct pbuf *pbuf)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2">get_rule_from_firewall</a>(const uint8_t key)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009">get_rule_head</a>()</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d">is_packet_allowed</a>(struct pbuf *pbuf)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>memory</b> (defined in <a class="el" href="classfw_1_1_storage.html">fw::Storage</a>)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">retrieve_amount_of_rules</a>()</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">retrieve_firewall_rule</a>(const uint8_t key)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1">rule_allows_packet</a>(firewall_rule_t *rule_ptr, my_packet_t *packet)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>rule_head</b> (defined in <a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a>)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e">Storage</a>()</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">store_all_firewall_rules</a>(firewall_rule_t *rule_head)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">store_amount_of_rules</a>(const uint8_t new_amount)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">store_firewall_rule</a>(firewall_rule_t *rule_ptr)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594">update_rule_of_firewall</a>(String *args, const uint8_t key)</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d">~Firewall</a>()</td><td class="entry"><a class="el" href="classfw_1_1_firewall.html">fw::Firewall</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1">~Storage</a>()</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,489 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: fw::Firewall Class Reference</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classfw_1_1_firewall.html',''); initResizable(); });
/* @license-end */
</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="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classfw_1_1_firewall-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">fw::Firewall Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>The <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules as linked list.
<a href="classfw_1_1_firewall.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_firewall_8hpp_source.html">Firewall.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for fw::Firewall:</div>
<div class="dyncontent">
<div class="center">
<img src="classfw_1_1_firewall.png" usemap="#fw::Firewall_map" alt=""/>
<map id="fw::Firewall_map" name="fw::Firewall_map">
<area href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM." alt="fw::Storage" shape="rect" coords="0,0,76,24"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a2cc2717bd5999bc9a2f24ae33e4abd42"><td class="memItemLeft" align="right" valign="top"><a id="a2cc2717bd5999bc9a2f24ae33e4abd42" name="a2cc2717bd5999bc9a2f24ae33e4abd42"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Firewall</b> ()</td></tr>
<tr class="memdesc:a2cc2717bd5999bc9a2f24ae33e4abd42"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a new <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> object, retrieve current amount of firewall rules and restore them from <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a>. <br /></td></tr>
<tr class="separator:a2cc2717bd5999bc9a2f24ae33e4abd42"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c7c043d66b645ecc15e71561132057d"><td class="memItemLeft" align="right" valign="top"><a id="a2c7c043d66b645ecc15e71561132057d" name="a2c7c043d66b645ecc15e71561132057d"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>~Firewall</b> ()</td></tr>
<tr class="memdesc:a2c7c043d66b645ecc15e71561132057d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy the <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> object. <br /></td></tr>
<tr class="separator:a2c7c043d66b645ecc15e71561132057d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86f7d6ef56888f673fa46c4bc9ad3009"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009">get_rule_head</a> ()</td></tr>
<tr class="memdesc:a86f7d6ef56888f673fa46c4bc9ad3009"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current rule head, it indicates the first rule position of the linked list. <a href="classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009">More...</a><br /></td></tr>
<tr class="separator:a86f7d6ef56888f673fa46c4bc9ad3009"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae2a4a36257033c91f8f183b11de82c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">add_rule_to_firewall</a> (<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr, const bool save_in_eeprom=true)</td></tr>
<tr class="memdesc:aae2a4a36257033c91f8f183b11de82c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">add a new rule to the linked list, update amount of rules, store it in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> if save_in_eeprom is true <a href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">More...</a><br /></td></tr>
<tr class="separator:aae2a4a36257033c91f8f183b11de82c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1d9481f13052673c64aaf88d019e01d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#af1d9481f13052673c64aaf88d019e01d">add_rule_to_firewall</a> (String *args)</td></tr>
<tr class="memdesc:af1d9481f13052673c64aaf88d019e01d"><td class="mdescLeft">&#160;</td><td class="mdescRight">add a new rule to the firewall, providing request parameter <a href="classfw_1_1_firewall.html#af1d9481f13052673c64aaf88d019e01d">More...</a><br /></td></tr>
<tr class="separator:af1d9481f13052673c64aaf88d019e01d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a987ec9a98b7d6ef56cf569e0290b3594"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594">update_rule_of_firewall</a> (String *args, const uint8_t key)</td></tr>
<tr class="memdesc:a987ec9a98b7d6ef56cf569e0290b3594"><td class="mdescLeft">&#160;</td><td class="mdescRight">update rule of firewall, store it in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594">More...</a><br /></td></tr>
<tr class="separator:a987ec9a98b7d6ef56cf569e0290b3594"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7aa017cfb1ae6d6748d3f8c48e18dcf2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2">get_rule_from_firewall</a> (const uint8_t key)</td></tr>
<tr class="memdesc:a7aa017cfb1ae6d6748d3f8c48e18dcf2"><td class="mdescLeft">&#160;</td><td class="mdescRight">retrieve rule from the firewall linked list <a href="classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2">More...</a><br /></td></tr>
<tr class="separator:a7aa017cfb1ae6d6748d3f8c48e18dcf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25fac8da12651a927c8285aa75e213d1"><td class="memItemLeft" align="right" valign="top">ok_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1">delete_rule_from_firewall</a> (const uint8_t key)</td></tr>
<tr class="memdesc:a25fac8da12651a927c8285aa75e213d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">delete rule from the firewall linked list, update amount of rules, store new order of rules in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1">More...</a><br /></td></tr>
<tr class="separator:a25fac8da12651a927c8285aa75e213d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81eca0d34c28e5c4244b557a1f8e047d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d">is_packet_allowed</a> (struct pbuf *pbuf)</td></tr>
<tr class="memdesc:a81eca0d34c28e5c4244b557a1f8e047d"><td class="mdescLeft">&#160;</td><td class="mdescRight">checks if network packet is allowed to pass firewall <a href="classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d">More...</a><br /></td></tr>
<tr class="separator:a81eca0d34c28e5c4244b557a1f8e047d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classfw_1_1_storage"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classfw_1_1_storage')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td></tr>
<tr class="memitem:a9b9fcc0e523d4b14a77e33a5806a348e inherit pub_methods_classfw_1_1_storage"><td class="memItemLeft" align="right" valign="top"><a id="a9b9fcc0e523d4b14a77e33a5806a348e" name="a9b9fcc0e523d4b14a77e33a5806a348e"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Storage</b> ()</td></tr>
<tr class="memdesc:a9b9fcc0e523d4b14a77e33a5806a348e inherit pub_methods_classfw_1_1_storage"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a new <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> object. <br /></td></tr>
<tr class="separator:a9b9fcc0e523d4b14a77e33a5806a348e inherit pub_methods_classfw_1_1_storage"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11b6f2d893abc79879418853d4f840e1 inherit pub_methods_classfw_1_1_storage"><td class="memItemLeft" align="right" valign="top"><a id="a11b6f2d893abc79879418853d4f840e1" name="a11b6f2d893abc79879418853d4f840e1"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>~Storage</b> ()</td></tr>
<tr class="memdesc:a11b6f2d893abc79879418853d4f840e1 inherit pub_methods_classfw_1_1_storage"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> object. <br /></td></tr>
<tr class="separator:a11b6f2d893abc79879418853d4f840e1 inherit pub_methods_classfw_1_1_storage"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a26fea38729777e00e5ee3a8d58f785b1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1">rule_allows_packet</a> (<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr, <a class="el" href="structmy__packet__t.html">my_packet_t</a> *packet)</td></tr>
<tr class="memdesc:a26fea38729777e00e5ee3a8d58f785b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">checks if network packet is allowed by the rule <a href="classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1">More...</a><br /></td></tr>
<tr class="separator:a26fea38729777e00e5ee3a8d58f785b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6815085477349f902e77cc5564b1b5ba"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmy__packet__t.html">my_packet_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba">get_packet_information</a> (struct pbuf *pbuf)</td></tr>
<tr class="memdesc:a6815085477349f902e77cc5564b1b5ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">prepares the necessary information to check packet <a href="classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba">More...</a><br /></td></tr>
<tr class="separator:a6815085477349f902e77cc5564b1b5ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classfw_1_1_storage"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classfw_1_1_storage')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td></tr>
<tr class="memitem:aba4b010a57e6f5f5255b41d832891394 inherit pro_methods_classfw_1_1_storage"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">retrieve_amount_of_rules</a> ()</td></tr>
<tr class="memdesc:aba4b010a57e6f5f5255b41d832891394 inherit pro_methods_classfw_1_1_storage"><td class="mdescLeft">&#160;</td><td class="mdescRight">retrieve the current amount of <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">More...</a><br /></td></tr>
<tr class="separator:aba4b010a57e6f5f5255b41d832891394 inherit pro_methods_classfw_1_1_storage"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79d1951d339a19edab7fd22aaa68cc96 inherit pro_methods_classfw_1_1_storage"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">store_amount_of_rules</a> (const uint8_t new_amount)</td></tr>
<tr class="memdesc:a79d1951d339a19edab7fd22aaa68cc96 inherit pro_methods_classfw_1_1_storage"><td class="mdescLeft">&#160;</td><td class="mdescRight">store a new amount of <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">More...</a><br /></td></tr>
<tr class="separator:a79d1951d339a19edab7fd22aaa68cc96 inherit pro_methods_classfw_1_1_storage"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20d0089533fea31893b323f7fde8535c inherit pro_methods_classfw_1_1_storage"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">retrieve_firewall_rule</a> (const uint8_t key)</td></tr>
<tr class="memdesc:a20d0089533fea31893b323f7fde8535c inherit pro_methods_classfw_1_1_storage"><td class="mdescLeft">&#160;</td><td class="mdescRight">retrieve a <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rule from <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">More...</a><br /></td></tr>
<tr class="separator:a20d0089533fea31893b323f7fde8535c inherit pro_methods_classfw_1_1_storage"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7747d174b1b3dd6bb417c1c5a8ac259c inherit pro_methods_classfw_1_1_storage"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">store_all_firewall_rules</a> (<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_head)</td></tr>
<tr class="memdesc:a7747d174b1b3dd6bb417c1c5a8ac259c inherit pro_methods_classfw_1_1_storage"><td class="mdescLeft">&#160;</td><td class="mdescRight">store all <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">More...</a><br /></td></tr>
<tr class="separator:a7747d174b1b3dd6bb417c1c5a8ac259c inherit pro_methods_classfw_1_1_storage"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c1d226dbad072a6d0bf7e3507b7863b inherit pro_methods_classfw_1_1_storage"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">store_firewall_rule</a> (<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr)</td></tr>
<tr class="memdesc:a9c1d226dbad072a6d0bf7e3507b7863b inherit pro_methods_classfw_1_1_storage"><td class="mdescLeft">&#160;</td><td class="mdescRight">store <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rule in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">More...</a><br /></td></tr>
<tr class="separator:a9c1d226dbad072a6d0bf7e3507b7863b inherit pro_methods_classfw_1_1_storage"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:aa67aba1e6dc06e88119b1681757ebc44"><td class="memItemLeft" align="right" valign="top"><a id="aa67aba1e6dc06e88119b1681757ebc44" name="aa67aba1e6dc06e88119b1681757ebc44"></a>
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>amount_of_rules</b> = 0</td></tr>
<tr class="separator:aa67aba1e6dc06e88119b1681757ebc44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a69d03fa8fcaffd218ef4520e98d654b1"><td class="memItemLeft" align="right" valign="top"><a id="a69d03fa8fcaffd218ef4520e98d654b1" name="a69d03fa8fcaffd218ef4520e98d654b1"></a>
<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>rule_head</b> = NULL</td></tr>
<tr class="separator:a69d03fa8fcaffd218ef4520e98d654b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >The <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules as linked list. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="aae2a4a36257033c91f8f183b11de82c5" name="aae2a4a36257033c91f8f183b11de82c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae2a4a36257033c91f8f183b11de82c5">&#9670;&nbsp;</a></span>add_rule_to_firewall() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void fw::Firewall::add_rule_to_firewall </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td>
<td class="paramname"><em>rule_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool&#160;</td>
<td class="paramname"><em>save_in_eeprom</em> = <code>true</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>add a new rule to the linked list, update amount of rules, store it in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> if save_in_eeprom is true </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rule_ptr</td><td></td></tr>
<tr><td class="paramname">save_in_eeprom</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af1d9481f13052673c64aaf88d019e01d" name="af1d9481f13052673c64aaf88d019e01d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af1d9481f13052673c64aaf88d019e01d">&#9670;&nbsp;</a></span>add_rule_to_firewall() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> * fw::Firewall::add_rule_to_firewall </td>
<td>(</td>
<td class="paramtype">String *&#160;</td>
<td class="paramname"><em>args</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>add a new rule to the firewall, providing request parameter </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">args</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>firewall_rule_t* </dd></dl>
</div>
</div>
<a id="a25fac8da12651a927c8285aa75e213d1" name="a25fac8da12651a927c8285aa75e213d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a25fac8da12651a927c8285aa75e213d1">&#9670;&nbsp;</a></span>delete_rule_from_firewall()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ok_t fw::Firewall::delete_rule_from_firewall </td>
<td>(</td>
<td class="paramtype">const uint8_t&#160;</td>
<td class="paramname"><em>key</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>delete rule from the firewall linked list, update amount of rules, store new order of rules in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>ok_t </dd></dl>
</div>
</div>
<a id="a6815085477349f902e77cc5564b1b5ba" name="a6815085477349f902e77cc5564b1b5ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6815085477349f902e77cc5564b1b5ba">&#9670;&nbsp;</a></span>get_packet_information()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structmy__packet__t.html">my_packet_t</a> * fw::Firewall::get_packet_information </td>
<td>(</td>
<td class="paramtype">struct pbuf *&#160;</td>
<td class="paramname"><em>pbuf</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>prepares the necessary information to check packet </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pbuf</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>my_packet_t* </dd></dl>
</div>
</div>
<a id="a7aa017cfb1ae6d6748d3f8c48e18dcf2" name="a7aa017cfb1ae6d6748d3f8c48e18dcf2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7aa017cfb1ae6d6748d3f8c48e18dcf2">&#9670;&nbsp;</a></span>get_rule_from_firewall()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> * fw::Firewall::get_rule_from_firewall </td>
<td>(</td>
<td class="paramtype">const uint8_t&#160;</td>
<td class="paramname"><em>key</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>retrieve rule from the firewall linked list </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>firewall_rule_t* </dd></dl>
</div>
</div>
<a id="a86f7d6ef56888f673fa46c4bc9ad3009" name="a86f7d6ef56888f673fa46c4bc9ad3009"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a86f7d6ef56888f673fa46c4bc9ad3009">&#9670;&nbsp;</a></span>get_rule_head()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> * fw::Firewall::get_rule_head </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the current rule head, it indicates the first rule position of the linked list. </p>
<dl class="section return"><dt>Returns</dt><dd>firewall_rule_t* </dd></dl>
</div>
</div>
<a id="a81eca0d34c28e5c4244b557a1f8e047d" name="a81eca0d34c28e5c4244b557a1f8e047d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81eca0d34c28e5c4244b557a1f8e047d">&#9670;&nbsp;</a></span>is_packet_allowed()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool fw::Firewall::is_packet_allowed </td>
<td>(</td>
<td class="paramtype">struct pbuf *&#160;</td>
<td class="paramname"><em>pbuf</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>checks if network packet is allowed to pass firewall </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pbuf</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true </dd>
<dd>
false </dd></dl>
</div>
</div>
<a id="a26fea38729777e00e5ee3a8d58f785b1" name="a26fea38729777e00e5ee3a8d58f785b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a26fea38729777e00e5ee3a8d58f785b1">&#9670;&nbsp;</a></span>rule_allows_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool fw::Firewall::rule_allows_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td>
<td class="paramname"><em>rule_ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structmy__packet__t.html">my_packet_t</a> *&#160;</td>
<td class="paramname"><em>packet</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>checks if network packet is allowed by the rule </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rule_ptr</td><td></td></tr>
<tr><td class="paramname">packet</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true </dd>
<dd>
false </dd></dl>
</div>
</div>
<a id="a987ec9a98b7d6ef56cf569e0290b3594" name="a987ec9a98b7d6ef56cf569e0290b3594"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a987ec9a98b7d6ef56cf569e0290b3594">&#9670;&nbsp;</a></span>update_rule_of_firewall()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> * fw::Firewall::update_rule_of_firewall </td>
<td>(</td>
<td class="paramtype">String *&#160;</td>
<td class="paramname"><em>args</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t&#160;</td>
<td class="paramname"><em>key</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>update rule of firewall, store it in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">args</td><td></td></tr>
<tr><td class="paramname">key</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>firewall_rule_t* </dd></dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>src/<a class="el" href="_firewall_8hpp_source.html">Firewall.hpp</a></li>
<li>src/Firewall.cpp</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>fw</b></li><li class="navelem"><a class="el" href="classfw_1_1_firewall.html">Firewall</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

View file

@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Member List</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classfw_1_1_storage.html',''); initResizable(); });
/* @license-end */
</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">fw::Storage Member List</div></div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classfw_1_1_storage.html">fw::Storage</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memory</b> (defined in <a class="el" href="classfw_1_1_storage.html">fw::Storage</a>)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">retrieve_amount_of_rules</a>()</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">retrieve_firewall_rule</a>(const uint8_t key)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e">Storage</a>()</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">store_all_firewall_rules</a>(firewall_rule_t *rule_head)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">store_amount_of_rules</a>(const uint8_t new_amount)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">store_firewall_rule</a>(firewall_rule_t *rule_ptr)</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1">~Storage</a>()</td><td class="entry"><a class="el" href="classfw_1_1_storage.html">fw::Storage</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,326 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: fw::Storage Class Reference</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classfw_1_1_storage.html',''); initResizable(); });
/* @license-end */
</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="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classfw_1_1_storage-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">fw::Storage Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>The <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in EEPROM.
<a href="classfw_1_1_storage.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_storage_8hpp_source.html">Storage.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for fw::Storage:</div>
<div class="dyncontent">
<div class="center">
<img src="classfw_1_1_storage.png" usemap="#fw::Storage_map" alt=""/>
<map id="fw::Storage_map" name="fw::Storage_map">
<area href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list." alt="fw::Firewall" shape="rect" coords="0,56,76,80"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a9b9fcc0e523d4b14a77e33a5806a348e"><td class="memItemLeft" align="right" valign="top"><a id="a9b9fcc0e523d4b14a77e33a5806a348e" name="a9b9fcc0e523d4b14a77e33a5806a348e"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Storage</b> ()</td></tr>
<tr class="memdesc:a9b9fcc0e523d4b14a77e33a5806a348e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a new <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> object. <br /></td></tr>
<tr class="separator:a9b9fcc0e523d4b14a77e33a5806a348e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11b6f2d893abc79879418853d4f840e1"><td class="memItemLeft" align="right" valign="top"><a id="a11b6f2d893abc79879418853d4f840e1" name="a11b6f2d893abc79879418853d4f840e1"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>~Storage</b> ()</td></tr>
<tr class="memdesc:a11b6f2d893abc79879418853d4f840e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> object. <br /></td></tr>
<tr class="separator:a11b6f2d893abc79879418853d4f840e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:aba4b010a57e6f5f5255b41d832891394"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">retrieve_amount_of_rules</a> ()</td></tr>
<tr class="memdesc:aba4b010a57e6f5f5255b41d832891394"><td class="mdescLeft">&#160;</td><td class="mdescRight">retrieve the current amount of <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">More...</a><br /></td></tr>
<tr class="separator:aba4b010a57e6f5f5255b41d832891394"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79d1951d339a19edab7fd22aaa68cc96"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">store_amount_of_rules</a> (const uint8_t new_amount)</td></tr>
<tr class="memdesc:a79d1951d339a19edab7fd22aaa68cc96"><td class="mdescLeft">&#160;</td><td class="mdescRight">store a new amount of <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">More...</a><br /></td></tr>
<tr class="separator:a79d1951d339a19edab7fd22aaa68cc96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20d0089533fea31893b323f7fde8535c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">retrieve_firewall_rule</a> (const uint8_t key)</td></tr>
<tr class="memdesc:a20d0089533fea31893b323f7fde8535c"><td class="mdescLeft">&#160;</td><td class="mdescRight">retrieve a <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rule from <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">More...</a><br /></td></tr>
<tr class="separator:a20d0089533fea31893b323f7fde8535c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7747d174b1b3dd6bb417c1c5a8ac259c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">store_all_firewall_rules</a> (<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_head)</td></tr>
<tr class="memdesc:a7747d174b1b3dd6bb417c1c5a8ac259c"><td class="mdescLeft">&#160;</td><td class="mdescRight">store all <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">More...</a><br /></td></tr>
<tr class="separator:a7747d174b1b3dd6bb417c1c5a8ac259c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c1d226dbad072a6d0bf7e3507b7863b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">store_firewall_rule</a> (<a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *rule_ptr)</td></tr>
<tr class="memdesc:a9c1d226dbad072a6d0bf7e3507b7863b"><td class="mdescLeft">&#160;</td><td class="mdescRight">store <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rule in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> <a href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">More...</a><br /></td></tr>
<tr class="separator:a9c1d226dbad072a6d0bf7e3507b7863b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a22d4748911ab3f0ee4101d672516ee04"><td class="memItemLeft" align="right" valign="top"><a id="a22d4748911ab3f0ee4101d672516ee04" name="a22d4748911ab3f0ee4101d672516ee04"></a>
Preferences&#160;</td><td class="memItemRight" valign="bottom"><b>memory</b></td></tr>
<tr class="separator:a22d4748911ab3f0ee4101d672516ee04"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >The <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in EEPROM. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="aba4b010a57e6f5f5255b41d832891394" name="aba4b010a57e6f5f5255b41d832891394"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba4b010a57e6f5f5255b41d832891394">&#9670;&nbsp;</a></span>retrieve_amount_of_rules()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">uint8_t fw::Storage::retrieve_amount_of_rules </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>retrieve the current amount of <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> </p>
<dl class="section return"><dt>Returns</dt><dd>uint8_t </dd></dl>
</div>
</div>
<a id="a20d0089533fea31893b323f7fde8535c" name="a20d0089533fea31893b323f7fde8535c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a20d0089533fea31893b323f7fde8535c">&#9670;&nbsp;</a></span>retrieve_firewall_rule()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> * fw::Storage::retrieve_firewall_rule </td>
<td>(</td>
<td class="paramtype">const uint8_t&#160;</td>
<td class="paramname"><em>key</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>retrieve a <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rule from <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">key</td><td></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>firewall_rule_t* </dd></dl>
</div>
</div>
<a id="a7747d174b1b3dd6bb417c1c5a8ac259c" name="a7747d174b1b3dd6bb417c1c5a8ac259c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7747d174b1b3dd6bb417c1c5a8ac259c">&#9670;&nbsp;</a></span>store_all_firewall_rules()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::Storage::store_all_firewall_rules </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td>
<td class="paramname"><em>rule_head</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>store all <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rule_head</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a79d1951d339a19edab7fd22aaa68cc96" name="a79d1951d339a19edab7fd22aaa68cc96"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79d1951d339a19edab7fd22aaa68cc96">&#9670;&nbsp;</a></span>store_amount_of_rules()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::Storage::store_amount_of_rules </td>
<td>(</td>
<td class="paramtype">const uint8_t&#160;</td>
<td class="paramname"><em>new_amount</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>store a new amount of <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in the <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">new_amount</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a9c1d226dbad072a6d0bf7e3507b7863b" name="a9c1d226dbad072a6d0bf7e3507b7863b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c1d226dbad072a6d0bf7e3507b7863b">&#9670;&nbsp;</a></span>store_firewall_rule()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void fw::Storage::store_firewall_rule </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structfirewall__rule__t.html">firewall_rule_t</a> *&#160;</td>
<td class="paramname"><em>rule_ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>store <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rule in <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rule_ptr</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>src/<a class="el" href="_storage_8hpp_source.html">Storage.hpp</a></li>
<li>src/Storage.cpp</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>fw</b></li><li class="navelem"><a class="el" href="classfw_1_1_storage.html">Storage</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,10 @@
var classfw_1_1_storage =
[
[ "Storage", "classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e", null ],
[ "~Storage", "classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1", null ],
[ "retrieve_amount_of_rules", "classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394", null ],
[ "retrieve_firewall_rule", "classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c", null ],
[ "store_all_firewall_rules", "classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c", null ],
[ "store_amount_of_rules", "classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96", null ],
[ "store_firewall_rule", "classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b", null ]
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

BIN
doxygen/html/closed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

View file

@ -0,0 +1,111 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: src Directory Reference</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html',''); initResizable(); });
/* @license-end */
</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">src Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
Files</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>API.hpp</b> <a href="_a_p_i_8hpp_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>Firewall.hpp</b> <a href="_firewall_8hpp_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>Storage.hpp</b> <a href="_storage_8hpp_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>Utils.hpp</b> <a href="_utils_8hpp_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</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="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,7 @@
var dir_68267d1309a1af8e8297ef4c3efbcdba =
[
[ "API.hpp", "_a_p_i_8hpp_source.html", null ],
[ "Firewall.hpp", "_firewall_8hpp_source.html", null ],
[ "Storage.hpp", "_storage_8hpp_source.html", null ],
[ "Utils.hpp", "_utils_8hpp_source.html", null ]
];

BIN
doxygen/html/doc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

1841
doxygen/html/doxygen.css Normal file

File diff suppressed because it is too large Load diff

26
doxygen/html/doxygen.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

121
doxygen/html/dynsections.js Normal file
View file

@ -0,0 +1,121 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
function updateStripes()
{
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
}
function toggleLevel(level)
{
$('table.directory tr').each(function() {
var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.html('&#9660;');
$(this).show();
} else if (l==level+1) {
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.html('&#9658;');
$(this).show();
} else {
$(this).hide();
}
});
updateStripes();
}
function toggleFolder(id)
{
// the clicked row
var currentRow = $('#row_'+id);
// all rows after the clicked row
var rows = currentRow.nextAll("tr");
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}
/* @license-end */

107
doxygen/html/files.html Normal file
View file

@ -0,0 +1,107 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: File List</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('files.html',''); initResizable(); });
/* @license-end */
</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">File List</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="_a_p_i_8hpp_source.html"><span class="icondoc"></span></a><b>API.hpp</b></td><td class="desc"></td></tr>
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="_firewall_8hpp_source.html"><span class="icondoc"></span></a><b>Firewall.hpp</b></td><td class="desc"></td></tr>
<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="_storage_8hpp_source.html"><span class="icondoc"></span></a><b>Storage.hpp</b></td><td class="desc"></td></tr>
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="_utils_8hpp_source.html"><span class="icondoc"></span></a><b>Utils.hpp</b></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var files_dup =
[
[ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ]
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

BIN
doxygen/html/folderopen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

187
doxygen/html/functions.html Normal file
View file

@ -0,0 +1,187 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Class Members</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('functions.html',''); initResizable(); });
/* @license-end */
</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="contents">
<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
<h3><a id="index_a" name="index_a"></a>- a -</h3><ul>
<li>add_endpoint_to_list()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772">fw::API</a></li>
<li>add_rule_to_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">fw::Firewall</a></li>
<li>API()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">fw::API</a></li>
</ul>
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
<li>check_auth()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c">fw::API</a></li>
<li>construct_json_api()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab">fw::API</a></li>
<li>construct_json_api_endpoint()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8">fw::API</a></li>
<li>construct_json_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5">fw::API</a></li>
<li>construct_json_firewall_rule()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b">fw::API</a></li>
</ul>
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>delete_firewall_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb">fw::API</a></li>
<li>delete_rule_from_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1">fw::Firewall</a></li>
</ul>
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
<li>Firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42">fw::Firewall</a></li>
</ul>
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>get_endpoint_list_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1">fw::API</a></li>
<li>get_firewall_rule_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a">fw::API</a></li>
<li>get_firewall_rules_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8">fw::API</a></li>
<li>get_packet_information()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba">fw::Firewall</a></li>
<li>get_rule_from_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2">fw::Firewall</a></li>
<li>get_rule_head()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009">fw::Firewall</a></li>
<li>get_url_base()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07">fw::API</a></li>
</ul>
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
<li>is_packet_allowed()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d">fw::Firewall</a></li>
</ul>
<h3><a id="index_j" name="index_j"></a>- j -</h3><ul>
<li>json_array_response()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802">fw::API</a></li>
<li>json_generic_response()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5">fw::API</a></li>
<li>json_message_response()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15">fw::API</a></li>
<li>json_new_attribute()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">fw::API</a></li>
</ul>
<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
<li>not_found_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d">fw::API</a></li>
</ul>
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
<li>post_firewall_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3">fw::API</a></li>
<li>put_firewall_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45">fw::API</a></li>
</ul>
<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
<li>request_has_all_firewall_parameter()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50">fw::API</a></li>
<li>retrieve_amount_of_rules()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">fw::Storage</a></li>
<li>retrieve_firewall_rule()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">fw::Storage</a></li>
<li>rule_allows_packet()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1">fw::Firewall</a></li>
</ul>
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
<li>setup_auth()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d">fw::API</a></li>
<li>setup_routing()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20">fw::API</a></li>
<li>Storage()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e">fw::Storage</a></li>
<li>store_all_firewall_rules()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">fw::Storage</a></li>
<li>store_amount_of_rules()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">fw::Storage</a></li>
<li>store_firewall_rule()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">fw::Storage</a></li>
</ul>
<h3><a id="index_u" name="index_u"></a>- u -</h3><ul>
<li>update_rule_of_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594">fw::Firewall</a></li>
</ul>
<h3><a id="index__7E" name="index__7E"></a>- ~ -</h3><ul>
<li>~API()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab">fw::API</a></li>
<li>~Firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d">fw::Firewall</a></li>
<li>~Storage()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1">fw::Storage</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

View file

@ -0,0 +1,187 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Class Members - Functions</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('functions_func.html',''); initResizable(); });
/* @license-end */
</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="contents">
&#160;
<h3><a id="index_a" name="index_a"></a>- a -</h3><ul>
<li>add_endpoint_to_list()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772">fw::API</a></li>
<li>add_rule_to_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5">fw::Firewall</a></li>
<li>API()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca">fw::API</a></li>
</ul>
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
<li>check_auth()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c">fw::API</a></li>
<li>construct_json_api()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab">fw::API</a></li>
<li>construct_json_api_endpoint()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8">fw::API</a></li>
<li>construct_json_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5">fw::API</a></li>
<li>construct_json_firewall_rule()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b">fw::API</a></li>
</ul>
<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
<li>delete_firewall_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb">fw::API</a></li>
<li>delete_rule_from_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1">fw::Firewall</a></li>
</ul>
<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
<li>Firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42">fw::Firewall</a></li>
</ul>
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>get_endpoint_list_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1">fw::API</a></li>
<li>get_firewall_rule_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a">fw::API</a></li>
<li>get_firewall_rules_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8">fw::API</a></li>
<li>get_packet_information()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba">fw::Firewall</a></li>
<li>get_rule_from_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2">fw::Firewall</a></li>
<li>get_rule_head()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009">fw::Firewall</a></li>
<li>get_url_base()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07">fw::API</a></li>
</ul>
<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
<li>is_packet_allowed()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d">fw::Firewall</a></li>
</ul>
<h3><a id="index_j" name="index_j"></a>- j -</h3><ul>
<li>json_array_response()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802">fw::API</a></li>
<li>json_generic_response()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5">fw::API</a></li>
<li>json_message_response()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15">fw::API</a></li>
<li>json_new_attribute()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156">fw::API</a></li>
</ul>
<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
<li>not_found_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d">fw::API</a></li>
</ul>
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
<li>post_firewall_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3">fw::API</a></li>
<li>put_firewall_handler()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45">fw::API</a></li>
</ul>
<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
<li>request_has_all_firewall_parameter()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50">fw::API</a></li>
<li>retrieve_amount_of_rules()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394">fw::Storage</a></li>
<li>retrieve_firewall_rule()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c">fw::Storage</a></li>
<li>rule_allows_packet()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1">fw::Firewall</a></li>
</ul>
<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
<li>setup_auth()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d">fw::API</a></li>
<li>setup_routing()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20">fw::API</a></li>
<li>Storage()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e">fw::Storage</a></li>
<li>store_all_firewall_rules()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c">fw::Storage</a></li>
<li>store_amount_of_rules()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96">fw::Storage</a></li>
<li>store_firewall_rule()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b">fw::Storage</a></li>
</ul>
<h3><a id="index_u" name="index_u"></a>- u -</h3><ul>
<li>update_rule_of_firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594">fw::Firewall</a></li>
</ul>
<h3><a id="index__7E" name="index__7E"></a>- ~ -</h3><ul>
<li>~API()&#160;:&#160;<a class="el" href="classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab">fw::API</a></li>
<li>~Firewall()&#160;:&#160;<a class="el" href="classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d">fw::Firewall</a></li>
<li>~Storage()&#160;:&#160;<a class="el" href="classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1">fw::Storage</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

109
doxygen/html/hierarchy.html Normal file
View file

@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: Class Hierarchy</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('hierarchy.html',''); initResizable(); });
/* @license-end */
</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">Class Hierarchy</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfw_1_1_a_p_i.html" target="_self">fw::API</a></td><td class="desc">The <a class="el" href="classfw_1_1_a_p_i.html" title="The API to create, edit or remove Firewall rules.">API</a> to create, edit or remove <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules </td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structapi__endpoint__t.html" target="_self">api_endpoint_t</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structcredential__t.html" target="_self">credential_t</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfirewall__rule__t.html" target="_self">firewall_rule_t</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmy__packet__t.html" target="_self">my_packet_t</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfw_1_1_storage.html" target="_self">fw::Storage</a></td><td class="desc">The <a class="el" href="classfw_1_1_storage.html" title="The Storage will handle Firewall rules in EEPROM.">Storage</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules in EEPROM </td></tr>
<tr id="row_5_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfw_1_1_firewall.html" target="_self">fw::Firewall</a></td><td class="desc">The <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> will handle <a class="el" href="classfw_1_1_firewall.html" title="The Firewall will handle Firewall rules as linked list.">Firewall</a> rules as linked list </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

11
doxygen/html/hierarchy.js Normal file
View file

@ -0,0 +1,11 @@
var hierarchy =
[
[ "fw::API", "classfw_1_1_a_p_i.html", null ],
[ "api_endpoint_t", "structapi__endpoint__t.html", null ],
[ "credential_t", "structcredential__t.html", null ],
[ "firewall_rule_t", "structfirewall__rule__t.html", null ],
[ "my_packet_t", "structmy__packet__t.html", null ],
[ "fw::Storage", "classfw_1_1_storage.html", [
[ "fw::Firewall", "classfw_1_1_firewall.html", null ]
] ]
];

112
doxygen/html/index.html Normal file
View file

@ -0,0 +1,112 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ESP32/ESP8266 Firewall: ESP32/ESP8266 Firewall</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>
<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 id="projectrow">
<td id="projectalign">
<div id="projectname">ESP32/ESP8266 Firewall<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">a software firewall for ESP23 or ESP8266</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('index.html',''); initResizable(); });
/* @license-end */
</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><div class="header">
<div class="headertitle"><div class="title">ESP32/ESP8266 Firewall </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p ><a class="anchor" id="md_README"></a> </p>
<h1><a class="anchor" id="autotoc_md1"></a>
Examples</h1>
<ul>
<li><b><a href="https://gitlab.hs-esslingen.de/toheer/iot-security-tools/-/tree/main/esp32example">ESP32 Example</a></b></li>
<li><b><a href="https://gitlab.hs-esslingen.de/toheer/iot-security-tools/-/tree/main/esp8266example">ESP8266 Example</a></b></li>
</ul>
<h1><a class="anchor" id="autotoc_md2"></a>
Maintainer</h1>
<ul>
<li>Student: Florian Hoss (<a href="#" onclick="location.href='mai'+'lto:'+'flh'+'oi'+'t00'+'@h'+'s-e'+'ss'+'lin'+'ge'+'n.d'+'e'; return false;">flhoit00@hs-esslingen.de</a>)</li>
<li>Professor: Prof. Dr. rer. nat. Tobias Heer (<a href="#" onclick="location.href='mai'+'lto:'+'tob'+'ia'+'s.h'+'ee'+'r@h'+'s-'+'ess'+'li'+'nge'+'n.'+'de'; return false;">tobias.heer@hs-esslingen.de</a>) </li>
</ul>
</div></div><!-- PageDoc -->
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
</ul>
</div>
</body>
</html>

35
doxygen/html/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

135
doxygen/html/menu.js Normal file
View file

@ -0,0 +1,135 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
function makeTree(data,relPath) {
var result='';
if ('children' in data) {
result+='<ul>';
for (var i in data.children) {
var url;
var link;
link = data.children[i].url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
} else {
url = relPath+link;
}
result+='<li><a href="'+url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
var searchBox;
if (searchEnabled) {
if (serverSide) {
searchBox='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<div class="left">'+
'<form id="FSearchBox" action="'+relPath+searchPage+
'" method="get"><img id="MSearchSelect" src="'+
relPath+'search/mag.svg" alt=""/>'+
'<input type="text" id="MSearchField" name="query" value="'+search+
'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
' onblur="searchBox.OnSearchFieldFocus(false)">'+
'</form>'+
'</div>'+
'<div class="right"></div>'+
'</div>';
} else {
searchBox='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<span class="left">'+
'<img id="MSearchSelect" src="'+relPath+
'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()"'+
' onmouseout="return searchBox.OnSearchSelectHide()" alt=""/>'+
'<input type="text" id="MSearchField" value="'+search+
'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
'onblur="searchBox.OnSearchFieldFocus(false)" '+
'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
'</span>'+
'<span class="right"><a id="MSearchClose" '+
'href="javascript:searchBox.CloseResultsWindow()">'+
'<img id="MSearchCloseImg" border="0" src="'+relPath+
'search/close.svg" alt=""/></a>'
'</span>'
'</div>';
}
}
$('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
'<label class="main-menu-btn" for="main-menu-state">'+
'<span class="main-menu-btn-icon"></span> '+
'Toggle main menu visibility</label>'+
'<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
'</div>');
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
if (searchBox) {
$('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
}
var $mainMenuState = $('#main-menu-state');
var prevWidth = 0;
if ($mainMenuState.length) {
function initResizableIfExists() {
if (typeof initResizable==='function') initResizable();
}
// animate mobile menu
$mainMenuState.change(function(e) {
var $menu = $('#main-menu');
var options = { duration: 250, step: initResizableIfExists };
if (this.checked) {
options['complete'] = function() { $menu.css('display', 'block') };
$menu.hide().slideDown(options);
} else {
options['complete'] = function() { $menu.css('display', 'none') };
$menu.show().slideUp(options);
}
});
// set default menu visibility
function resetState() {
var $menu = $('#main-menu');
var $mainMenuState = $('#main-menu-state');
var newWidth = $(window).outerWidth();
if (newWidth!=prevWidth) {
if ($(window).outerWidth()<768) {
$mainMenuState.prop('checked',false); $menu.hide();
$('#searchBoxPos1').html(searchBox);
$('#searchBoxPos2').hide();
} else {
$menu.show();
$('#searchBoxPos1').empty();
$('#searchBoxPos2').html(searchBox);
$('#searchBoxPos2').show();
}
prevWidth = newWidth;
}
}
$(window).ready(function() { resetState(); initResizableIfExists(); });
$(window).resize(resetState);
}
$('#main-menu').smartmenus();
}
/* @license-end */

61
doxygen/html/menudata.js Normal file
View file

@ -0,0 +1,61 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"Main Page",url:"index.html"},
{text:"Classes",url:"annotated.html",children:[
{text:"Class List",url:"annotated.html"},
{text:"Class Index",url:"classes.html"},
{text:"Class Hierarchy",url:"hierarchy.html"},
{text:"Class Members",url:"functions.html",children:[
{text:"All",url:"functions.html",children:[
{text:"a",url:"functions.html#index_a"},
{text:"c",url:"functions.html#index_c"},
{text:"d",url:"functions.html#index_d"},
{text:"f",url:"functions.html#index_f"},
{text:"g",url:"functions.html#index_g"},
{text:"i",url:"functions.html#index_i"},
{text:"j",url:"functions.html#index_j"},
{text:"n",url:"functions.html#index_n"},
{text:"p",url:"functions.html#index_p"},
{text:"r",url:"functions.html#index_r"},
{text:"s",url:"functions.html#index_s"},
{text:"u",url:"functions.html#index_u"},
{text:"~",url:"functions.html#index__7E"}]},
{text:"Functions",url:"functions_func.html",children:[
{text:"a",url:"functions_func.html#index_a"},
{text:"c",url:"functions_func.html#index_c"},
{text:"d",url:"functions_func.html#index_d"},
{text:"f",url:"functions_func.html#index_f"},
{text:"g",url:"functions_func.html#index_g"},
{text:"i",url:"functions_func.html#index_i"},
{text:"j",url:"functions_func.html#index_j"},
{text:"n",url:"functions_func.html#index_n"},
{text:"p",url:"functions_func.html#index_p"},
{text:"r",url:"functions_func.html#index_r"},
{text:"s",url:"functions_func.html#index_s"},
{text:"u",url:"functions_func.html#index_u"},
{text:"~",url:"functions_func.html#index__7E"}]}]}]},
{text:"Files",url:"files.html",children:[
{text:"File List",url:"files.html"}]}]}

BIN
doxygen/html/nav_f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

BIN
doxygen/html/nav_g.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

BIN
doxygen/html/nav_h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

147
doxygen/html/navtree.css Normal file
View file

@ -0,0 +1,147 @@
#nav-tree .children_ul {
margin:0;
padding:4px;
}
#nav-tree ul {
list-style:none outside none;
margin:0px;
padding:0px;
}
#nav-tree li {
white-space:nowrap;
margin:0px;
padding:0px;
}
#nav-tree .plus {
margin:0px;
}
#nav-tree .selected {
background-image: url('tab_a.png');
background-repeat:repeat-x;
color: #fff;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
}
#nav-tree img {
margin:0px;
padding:0px;
border:0px;
vertical-align: middle;
}
#nav-tree a {
text-decoration:none;
padding:0px;
margin:0px;
outline:none;
}
#nav-tree .label {
margin:0px;
padding:0px;
font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
}
#nav-tree .label a {
padding:2px;
}
#nav-tree .selected a {
text-decoration:none;
color:#fff;
}
#nav-tree .children_ul {
margin:0px;
padding:0px;
}
#nav-tree .item {
margin:0px;
padding:0px;
}
#nav-tree {
padding: 0px 0px;
background-color: #FAFAFF;
font-size:14px;
overflow:auto;
}
#doc-content {
overflow:auto;
display:block;
padding:0px;
margin:0px;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
#side-nav {
padding:0 6px 0 0;
margin: 0px;
display:block;
position: absolute;
left: 0px;
width: 250px;
overflow : hidden;
}
.ui-resizable .ui-resizable-handle {
display:block;
}
.ui-resizable-e {
background-image:url("splitbar.png");
background-size:100%;
background-repeat:repeat-y;
background-attachment: scroll;
cursor:ew-resize;
height:100%;
right:0;
top:0;
width:6px;
}
.ui-resizable-handle {
display:none;
font-size:0.1px;
position:absolute;
z-index:1;
}
#nav-tree-contents {
margin: 6px 0px 0px 0px;
}
#nav-tree {
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: #F9FAFC;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
#nav-sync {
position:absolute;
top:5px;
right:24px;
z-index:0;
}
#nav-sync img {
opacity:0.3;
}
#nav-sync img:hover {
opacity:0.9;
}
@media print
{
#nav-tree { display: none; }
div.ui-resizable-handle { display: none; position: relative; }
}

549
doxygen/html/navtree.js Normal file
View file

@ -0,0 +1,549 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var navTreeSubIndices = new Array();
var arrowDown = '&#9660;';
var arrowRight = '&#9658;';
function getData(varName)
{
var i = varName.lastIndexOf('/');
var n = i>=0 ? varName.substring(i+1) : varName;
return eval(n.replace(/\-/g,'_'));
}
function stripPath(uri)
{
return uri.substring(uri.lastIndexOf('/')+1);
}
function stripPath2(uri)
{
var i = uri.lastIndexOf('/');
var s = uri.substring(i+1);
var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
return m ? uri.substring(i-6) : s;
}
function hashValue()
{
return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
}
function hashUrl()
{
return '#'+hashValue();
}
function pathName()
{
return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
}
function localStorageSupported()
{
try {
return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
}
catch(e) {
return false;
}
}
function storeLink(link)
{
if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
window.localStorage.setItem('navpath',link);
}
}
function deleteLink()
{
if (localStorageSupported()) {
window.localStorage.setItem('navpath','');
}
}
function cachedLink()
{
if (localStorageSupported()) {
return window.localStorage.getItem('navpath');
} else {
return '';
}
}
function getScript(scriptName,func,show)
{
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.id = scriptName;
script.type = 'text/javascript';
script.onload = func;
script.src = scriptName+'.js';
head.appendChild(script);
}
function createIndent(o,domNode,node,level)
{
var level=-1;
var n = node;
while (n.parentNode) { level++; n=n.parentNode; }
if (node.childrenData) {
var imgNode = document.createElement("span");
imgNode.className = 'arrow';
imgNode.style.paddingLeft=(16*level).toString()+'px';
imgNode.innerHTML=arrowRight;
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast");
node.plus_img.innerHTML=arrowRight;
node.expanded = false;
} else {
expandNode(o, node, false, false);
}
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
} else {
var span = document.createElement("span");
span.className = 'arrow';
span.style.width = 16*(level+1)+'px';
span.innerHTML = '&#160;';
domNode.appendChild(span);
}
}
var animationInProgress = false;
function gotoAnchor(anchor,aname,updateLocation)
{
var pos, docContent = $('#doc-content');
var ancParent = $(anchor.parent());
if (ancParent.hasClass('memItemLeft') ||
ancParent.hasClass('memtitle') ||
ancParent.hasClass('fieldname') ||
ancParent.hasClass('fieldtype') ||
ancParent.is(':header'))
{
pos = ancParent.position().top;
} else if (anchor.position()) {
pos = anchor.position().top;
}
if (pos) {
var dist = Math.abs(Math.min(
pos-docContent.offset().top,
docContent[0].scrollHeight-
docContent.height()-docContent.scrollTop()));
animationInProgress=true;
docContent.animate({
scrollTop: pos + docContent.scrollTop() - docContent.offset().top
},Math.max(50,Math.min(500,dist)),function(){
if (updateLocation) window.location.href=aname;
animationInProgress=false;
});
}
}
function newNode(o, po, text, link, childrenData, lastNode)
{
var node = new Object();
node.children = Array();
node.childrenData = childrenData;
node.depth = po.depth + 1;
node.relpath = po.relpath;
node.isLast = lastNode;
node.li = document.createElement("li");
po.getChildrenUL().appendChild(node.li);
node.parentNode = po;
node.itemDiv = document.createElement("div");
node.itemDiv.className = "item";
node.labelSpan = document.createElement("span");
node.labelSpan.className = "label";
createIndent(o,node.itemDiv,node,0);
node.itemDiv.appendChild(node.labelSpan);
node.li.appendChild(node.itemDiv);
var a = document.createElement("a");
node.labelSpan.appendChild(a);
node.label = document.createTextNode(text);
node.expanded = false;
a.appendChild(node.label);
if (link) {
var url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
link = url;
} else {
url = node.relpath+link;
}
a.className = stripPath(link.replace('#',':'));
if (link.indexOf('#')!=-1) {
var aname = '#'+link.split('#')[1];
var srcPage = stripPath(pathName());
var targetPage = stripPath(link.split('#')[0]);
a.href = srcPage!=targetPage ? url : "javascript:void(0)";
a.onclick = function(){
storeLink(link);
if (!$(a).parent().parent().hasClass('selected'))
{
$('.item').removeClass('selected');
$('.item').removeAttr('id');
$(a).parent().parent().addClass('selected');
$(a).parent().parent().attr('id','selected');
}
var anchor = $(aname);
gotoAnchor(anchor,aname,true);
};
} else {
a.href = url;
a.onclick = function() { storeLink(link); }
}
} else {
if (childrenData != null)
{
a.className = "nolink";
a.href = "javascript:void(0)";
a.onclick = node.expandToggle.onclick;
}
}
node.childrenUL = null;
node.getChildrenUL = function() {
if (!node.childrenUL) {
node.childrenUL = document.createElement("ul");
node.childrenUL.className = "children_ul";
node.childrenUL.style.display = "none";
node.li.appendChild(node.childrenUL);
}
return node.childrenUL;
};
return node;
}
function showRoot()
{
var headerHeight = $("#top").height();
var footerHeight = $("#nav-path").height();
var windowHeight = $(window).height() - headerHeight - footerHeight;
(function (){ // retry until we can scroll to the selected item
try {
var navtree=$('#nav-tree');
navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
} catch (err) {
setTimeout(arguments.callee, 0);
}
})();
}
function expandNode(o, node, imm, showRoot)
{
if (node.childrenData && !node.expanded) {
if (typeof(node.childrenData)==='string') {
var varName = node.childrenData;
getScript(node.relpath+varName,function(){
node.childrenData = getData(varName);
expandNode(o, node, imm, showRoot);
}, showRoot);
} else {
if (!node.childrenVisited) {
getNode(o, node);
}
$(node.getChildrenUL()).slideDown("fast");
node.plus_img.innerHTML = arrowDown;
node.expanded = true;
}
}
}
function glowEffect(n,duration)
{
n.addClass('glow').delay(duration).queue(function(next){
$(this).removeClass('glow');next();
});
}
function highlightAnchor()
{
var aname = hashUrl();
var anchor = $(aname);
if (anchor.parent().attr('class')=='memItemLeft'){
var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
glowEffect(rows.children(),300); // member without details
} else if (anchor.parent().attr('class')=='fieldname'){
glowEffect(anchor.parent().parent(),1000); // enum value
} else if (anchor.parent().attr('class')=='fieldtype'){
glowEffect(anchor.parent().parent(),1000); // struct field
} else if (anchor.parent().is(":header")) {
glowEffect(anchor.parent(),1000); // section header
} else {
glowEffect(anchor.next(),1000); // normal member
}
}
function selectAndHighlight(hash,n)
{
var a;
if (hash) {
var link=stripPath(pathName())+':'+hash.substring(1);
a=$('.item a[class$="'+link+'"]');
}
if (a && a.length) {
a.parent().parent().addClass('selected');
a.parent().parent().attr('id','selected');
highlightAnchor();
} else if (n) {
$(n.itemDiv).addClass('selected');
$(n.itemDiv).attr('id','selected');
}
var topOffset=5;
if (typeof page_layout!=='undefined' && page_layout==1) {
topOffset+=$('#top').outerHeight();
}
if ($('#nav-tree-contents .item:first').hasClass('selected')) {
topOffset+=25;
}
$('#nav-sync').css('top',topOffset+'px');
showRoot();
}
function showNode(o, node, index, hash)
{
if (node && node.childrenData) {
if (typeof(node.childrenData)==='string') {
var varName = node.childrenData;
getScript(node.relpath+varName,function(){
node.childrenData = getData(varName);
showNode(o,node,index,hash);
},true);
} else {
if (!node.childrenVisited) {
getNode(o, node);
}
$(node.getChildrenUL()).css({'display':'block'});
node.plus_img.innerHTML = arrowDown;
node.expanded = true;
var n = node.children[o.breadcrumbs[index]];
if (index+1<o.breadcrumbs.length) {
showNode(o,n,index+1,hash);
} else {
if (typeof(n.childrenData)==='string') {
var varName = n.childrenData;
getScript(n.relpath+varName,function(){
n.childrenData = getData(varName);
node.expanded=false;
showNode(o,node,index,hash); // retry with child node expanded
},true);
} else {
var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
expandNode(o, n, true, true);
}
selectAndHighlight(hash,n);
}
}
}
} else {
selectAndHighlight(hash);
}
}
function removeToInsertLater(element) {
var parentNode = element.parentNode;
var nextSibling = element.nextSibling;
parentNode.removeChild(element);
return function() {
if (nextSibling) {
parentNode.insertBefore(element, nextSibling);
} else {
parentNode.appendChild(element);
}
};
}
function getNode(o, po)
{
var insertFunction = removeToInsertLater(po.li);
po.childrenVisited = true;
var l = po.childrenData.length-1;
for (var i in po.childrenData) {
var nodeData = po.childrenData[i];
po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
i==l);
}
insertFunction();
}
function gotoNode(o,subIndex,root,hash,relpath)
{
var nti = navTreeSubIndices[subIndex][root+hash];
o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
function navTo(o,root,hash,relpath)
{
var link = cachedLink();
if (link) {
var parts = link.split('#');
root = parts[0];
if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
else hash='';
}
if (hash.match(/^#l\d+$/)) {
var anchor=$('a[name='+hash.substring(1)+']');
glowEffect(anchor.parent(),1000); // line number
hash=''; // strip line number anchors
}
var url=root+hash;
var i=-1;
while (NAVTREEINDEX[i+1]<=url) i++;
if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath)
} else {
getScript(relpath+'navtreeindex'+i,function(){
navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath);
}
},true);
}
}
function showSyncOff(n,relpath)
{
n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
}
function showSyncOn(n,relpath)
{
n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
}
function toggleSyncButton(relpath)
{
var navSync = $('#nav-sync');
if (navSync.hasClass('sync')) {
navSync.removeClass('sync');
showSyncOff(navSync,relpath);
storeLink(stripPath2(pathName())+hashUrl());
} else {
navSync.addClass('sync');
showSyncOn(navSync,relpath);
deleteLink();
}
}
var loadTriggered = false;
var readyTriggered = false;
var loadObject,loadToRoot,loadUrl,loadRelPath;
$(window).on('load',function(){
if (readyTriggered) { // ready first
navTo(loadObject,loadToRoot,loadUrl,loadRelPath);
showRoot();
}
loadTriggered=true;
});
function initNavTree(toroot,relpath)
{
var o = new Object();
o.toroot = toroot;
o.node = new Object();
o.node.li = document.getElementById("nav-tree-contents");
o.node.childrenData = NAVTREE;
o.node.children = new Array();
o.node.childrenUL = document.createElement("ul");
o.node.getChildrenUL = function() { return o.node.childrenUL; };
o.node.li.appendChild(o.node.childrenUL);
o.node.depth = 0;
o.node.relpath = relpath;
o.node.expanded = false;
o.node.isLast = true;
o.node.plus_img = document.createElement("span");
o.node.plus_img.className = 'arrow';
o.node.plus_img.innerHTML = arrowRight;
if (localStorageSupported()) {
var navSync = $('#nav-sync');
if (cachedLink()) {
showSyncOff(navSync,relpath);
navSync.removeClass('sync');
} else {
showSyncOn(navSync,relpath);
}
navSync.click(function(){ toggleSyncButton(relpath); });
}
if (loadTriggered) { // load before ready
navTo(o,toroot,hashUrl(),relpath);
showRoot();
} else { // ready before load
loadObject = o;
loadToRoot = toroot;
loadUrl = hashUrl();
loadRelPath = relpath;
readyTriggered=true;
}
$(window).bind('hashchange', function(){
if (window.location.hash && window.location.hash.length>1){
var a;
if ($(location).attr('hash')){
var clslink=stripPath(pathName())+':'+hashValue();
a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
}
if (a==null || !$(a).parent().parent().hasClass('selected')){
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
var link=stripPath2(pathName());
navTo(o,link,hashUrl(),relpath);
} else if (!animationInProgress) {
$('#doc-content').scrollTop(0);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
navTo(o,toroot,hashUrl(),relpath);
}
})
}
/* @license-end */

View file

@ -0,0 +1,51 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var NAVTREE =
[
[ "ESP32/ESP8266 Firewall", "index.html", [
[ "Examples", "index.html#autotoc_md1", null ],
[ "Maintainer", "index.html#autotoc_md2", null ],
[ "Classes", "annotated.html", [
[ "Class List", "annotated.html", "annotated_dup" ],
[ "Class Index", "classes.html", null ],
[ "Class Hierarchy", "hierarchy.html", "hierarchy" ],
[ "Class Members", "functions.html", [
[ "All", "functions.html", null ],
[ "Functions", "functions_func.html", null ]
] ]
] ],
[ "Files", "files.html", [
[ "File List", "files.html", "files_dup" ]
] ]
] ]
];
var NAVTREEINDEX =
[
"_a_p_i_8hpp_source.html"
];
var SYNCONMSG = 'click to disable panel synchronisation';
var SYNCOFFMSG = 'click to enable panel synchronisation';

View file

@ -0,0 +1,67 @@
var NAVTREEINDEX0 =
{
"_a_p_i_8hpp_source.html":[3,0,0,0],
"_firewall_8hpp_source.html":[3,0,0,1],
"_storage_8hpp_source.html":[3,0,0,2],
"_utils_8hpp_source.html":[3,0,0,3],
"annotated.html":[2,0],
"classes.html":[2,1],
"classfw_1_1_a_p_i.html":[2,0,0,0],
"classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca":[2,0,0,0,0],
"classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156":[2,0,0,0,16],
"classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8":[2,0,0,0,5],
"classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802":[2,0,0,0,13],
"classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3":[2,0,0,0,19],
"classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d":[2,0,0,0,22],
"classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb":[2,0,0,0,8],
"classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab":[2,0,0,0,1],
"classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5":[2,0,0,0,6],
"classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15":[2,0,0,0,15],
"classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45":[2,0,0,0,20],
"classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1":[2,0,0,0,9],
"classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20":[2,0,0,0,23],
"classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab":[2,0,0,0,4],
"classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772":[2,0,0,0,2],
"classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8":[2,0,0,0,11],
"classfw_1_1_a_p_i.html#aba378d97c999dda14ef2e4e97a9948f5":[2,0,0,0,17],
"classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50":[2,0,0,0,21],
"classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b":[2,0,0,0,7],
"classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a":[2,0,0,0,10],
"classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5":[2,0,0,0,14],
"classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c":[2,0,0,0,3],
"classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d":[2,0,0,0,18],
"classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07":[2,0,0,0,12],
"classfw_1_1_firewall.html":[2,0,0,1],
"classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1":[2,0,0,1,4],
"classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1":[2,0,0,1,9],
"classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d":[2,0,0,1,1],
"classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42":[2,0,0,1,0],
"classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba":[2,0,0,1,5],
"classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2":[2,0,0,1,6],
"classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d":[2,0,0,1,8],
"classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009":[2,0,0,1,7],
"classfw_1_1_firewall.html#a987ec9a98b7d6ef56cf569e0290b3594":[2,0,0,1,10],
"classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5":[2,0,0,1,2],
"classfw_1_1_firewall.html#af1d9481f13052673c64aaf88d019e01d":[2,0,0,1,3],
"classfw_1_1_storage.html":[2,0,0,2],
"classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1":[2,0,0,2,1],
"classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c":[2,0,0,2,3],
"classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c":[2,0,0,2,4],
"classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96":[2,0,0,2,5],
"classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e":[2,0,0,2,0],
"classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b":[2,0,0,2,6],
"classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394":[2,0,0,2,2],
"dir_68267d1309a1af8e8297ef4c3efbcdba.html":[3,0,0],
"files.html":[3,0],
"functions.html":[2,3,0],
"functions_func.html":[2,3,1],
"hierarchy.html":[2,2],
"index.html":[],
"index.html#autotoc_md1":[0],
"index.html#autotoc_md2":[1],
"pages.html":[],
"structapi__endpoint__t.html":[2,0,1],
"structcredential__t.html":[2,0,2],
"structfirewall__rule__t.html":[2,0,3],
"structmy__packet__t.html":[2,0,4]
};

BIN
doxygen/html/open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

150
doxygen/html/resize.js Normal file
View file

@ -0,0 +1,150 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initResizable()
{
var cookie_namespace = 'doxygen';
var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
function readCookie(cookie)
{
var myCookie = cookie_namespace+"_"+cookie+"=";
if (document.cookie) {
var index = document.cookie.indexOf(myCookie);
if (index != -1) {
var valStart = index + myCookie.length;
var valEnd = document.cookie.indexOf(";", valStart);
if (valEnd == -1) {
valEnd = document.cookie.length;
}
var val = document.cookie.substring(valStart, valEnd);
return val;
}
}
return 0;
}
function writeCookie(cookie, val, expiration)
{
if (val==undefined) return;
if (expiration == null) {
var date = new Date();
date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
expiration = date.toGMTString();
}
document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/";
}
function resizeWidth()
{
var windowWidth = $(window).width() + "px";
var sidenavWidth = $(sidenav).outerWidth();
content.css({marginLeft:parseInt(sidenavWidth)+"px"});
writeCookie('width',sidenavWidth-barWidth, null);
}
function restoreWidth(navWidth)
{
var windowWidth = $(window).width() + "px";
content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
sidenav.css({width:navWidth + "px"});
}
function resizeHeight()
{
var headerHeight = header.outerHeight();
var footerHeight = footer.outerHeight();
var windowHeight = $(window).height();
var contentHeight,navtreeHeight,sideNavHeight;
if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */
contentHeight = windowHeight - headerHeight - footerHeight;
navtreeHeight = contentHeight;
sideNavHeight = contentHeight;
} else if (page_layout==1) { /* DISABLE_INDEX=YES */
contentHeight = windowHeight - footerHeight;
navtreeHeight = windowHeight - headerHeight;
sideNavHeight = windowHeight;
}
content.css({height:contentHeight + "px"});
navtree.css({height:navtreeHeight + "px"});
sidenav.css({height:sideNavHeight + "px"});
var width=$(window).width();
if (width!=collapsedWidth) {
if (width<desktop_vp && collapsedWidth>=desktop_vp) {
if (!collapsed) {
collapseExpand();
}
} else if (width>desktop_vp && collapsedWidth<desktop_vp) {
if (collapsed) {
collapseExpand();
}
}
collapsedWidth=width;
}
if (location.hash.slice(1)) {
(document.getElementById(location.hash.slice(1))||document.body).scrollIntoView();
}
}
function collapseExpand()
{
if (sidenav.width()>0) {
restoreWidth(0);
collapsed=true;
}
else {
var width = readCookie('width');
if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
collapsed=false;
}
}
header = $("#top");
sidenav = $("#side-nav");
content = $("#doc-content");
navtree = $("#nav-tree");
footer = $("#nav-path");
$(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
$(sidenav).resizable({ minWidth: 0 });
$(window).resize(function() { resizeHeight(); });
var device = navigator.userAgent.toLowerCase();
var touch_device = device.match(/(iphone|ipod|ipad|android)/);
if (touch_device) { /* wider split bar for touch only devices */
$(sidenav).css({ paddingRight:'20px' });
$('.ui-resizable-e').css({ width:'20px' });
$('#nav-sync').css({ right:'34px' });
barWidth=20;
}
var width = readCookie('width');
if (width) { restoreWidth(width); } else { resizeWidth(); }
resizeHeight();
var url = location.href;
var i=url.indexOf("#");
if (i>=0) window.location.hash=url.substr(i);
var _preventDefault = function(evt) { evt.preventDefault(); };
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
$(".ui-resizable-handle").dblclick(collapseExpand);
$(window).on('load',resizeHeight);
}
/* @license-end */

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,7 @@
var searchData=
[
['add_5fendpoint_5fto_5flist_0',['add_endpoint_to_list',['../classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772',1,'fw::API']]],
['add_5frule_5fto_5ffirewall_1',['add_rule_to_firewall',['../classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5',1,'fw::Firewall::add_rule_to_firewall(firewall_rule_t *rule_ptr, const bool save_in_eeprom=true)'],['../classfw_1_1_firewall.html#af1d9481f13052673c64aaf88d019e01d',1,'fw::Firewall::add_rule_to_firewall(String *args)']]],
['api_2',['API',['../classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca',1,'fw::API::API()'],['../classfw_1_1_a_p_i.html',1,'fw::API']]],
['api_5fendpoint_5ft_3',['api_endpoint_t',['../structapi__endpoint__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,9 @@
var searchData=
[
['check_5fauth_0',['check_auth',['../classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c',1,'fw::API']]],
['construct_5fjson_5fapi_1',['construct_json_api',['../classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab',1,'fw::API']]],
['construct_5fjson_5fapi_5fendpoint_2',['construct_json_api_endpoint',['../classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8',1,'fw::API']]],
['construct_5fjson_5ffirewall_3',['construct_json_firewall',['../classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5',1,'fw::API']]],
['construct_5fjson_5ffirewall_5frule_4',['construct_json_firewall_rule',['../classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b',1,'fw::API']]],
['credential_5ft_5',['credential_t',['../structcredential__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_2.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var searchData=
[
['delete_5ffirewall_5fhandler_0',['delete_firewall_handler',['../classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb',1,'fw::API']]],
['delete_5frule_5ffrom_5ffirewall_1',['delete_rule_from_firewall',['../classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1',1,'fw::Firewall']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_3.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['esp32_2fesp8266_20firewall_0',['ESP32/ESP8266 Firewall',['../index.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_4.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var searchData=
[
['firewall_0',['Firewall',['../classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42',1,'fw::Firewall::Firewall()'],['../classfw_1_1_firewall.html',1,'fw::Firewall']]],
['firewall_5frule_5ft_1',['firewall_rule_t',['../structfirewall__rule__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_5.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,10 @@
var searchData=
[
['get_5fendpoint_5flist_5fhandler_0',['get_endpoint_list_handler',['../classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1',1,'fw::API']]],
['get_5ffirewall_5frule_5fhandler_1',['get_firewall_rule_handler',['../classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a',1,'fw::API']]],
['get_5ffirewall_5frules_5fhandler_2',['get_firewall_rules_handler',['../classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8',1,'fw::API']]],
['get_5fpacket_5finformation_3',['get_packet_information',['../classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba',1,'fw::Firewall']]],
['get_5frule_5ffrom_5ffirewall_4',['get_rule_from_firewall',['../classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2',1,'fw::Firewall']]],
['get_5frule_5fhead_5',['get_rule_head',['../classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009',1,'fw::Firewall']]],
['get_5furl_5fbase_6',['get_url_base',['../classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07',1,'fw::API']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_6.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['is_5fpacket_5fallowed_0',['is_packet_allowed',['../classfw_1_1_firewall.html#a81eca0d34c28e5c4244b557a1f8e047d',1,'fw::Firewall']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_7.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,7 @@
var searchData=
[
['json_5farray_5fresponse_0',['json_array_response',['../classfw_1_1_a_p_i.html#a1892bc26b882b055853e26ed95d8d802',1,'fw::API']]],
['json_5fgeneric_5fresponse_1',['json_generic_response',['../classfw_1_1_a_p_i.html#acbebab924241292706c0287dca5c3ff5',1,'fw::API']]],
['json_5fmessage_5fresponse_2',['json_message_response',['../classfw_1_1_a_p_i.html#a6b7d4ce75b9cdba0dd39c6c949ef1c15',1,'fw::API']]],
['json_5fnew_5fattribute_3',['json_new_attribute',['../classfw_1_1_a_p_i.html#a0ff5aeb3b916dae9219041dc240d9156',1,'fw::API::json_new_attribute(String key, String value, bool last=false)'],['../classfw_1_1_a_p_i.html#aba378d97c999dda14ef2e4e97a9948f5',1,'fw::API::json_new_attribute(String key, uint32_t value, bool last=false)']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_8.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['my_5fpacket_5ft_0',['my_packet_t',['../structmy__packet__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_9.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['not_5ffound_5fhandler_0',['not_found_handler',['../classfw_1_1_a_p_i.html#aeb74e3b9efc2305c943683b14957ac9d',1,'fw::API']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_a.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var searchData=
[
['post_5ffirewall_5fhandler_0',['post_firewall_handler',['../classfw_1_1_a_p_i.html#a2d78e9dd43abb72da8872cb207db25e3',1,'fw::API']]],
['put_5ffirewall_5fhandler_1',['put_firewall_handler',['../classfw_1_1_a_p_i.html#a6ce4a9dd9afae493f6639b6fb3f6ba45',1,'fw::API']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_b.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,7 @@
var searchData=
[
['request_5fhas_5fall_5ffirewall_5fparameter_0',['request_has_all_firewall_parameter',['../classfw_1_1_a_p_i.html#abab79e90786d14836dcf113077891c50',1,'fw::API']]],
['retrieve_5famount_5fof_5frules_1',['retrieve_amount_of_rules',['../classfw_1_1_storage.html#aba4b010a57e6f5f5255b41d832891394',1,'fw::Storage']]],
['retrieve_5ffirewall_5frule_2',['retrieve_firewall_rule',['../classfw_1_1_storage.html#a20d0089533fea31893b323f7fde8535c',1,'fw::Storage']]],
['rule_5fallows_5fpacket_3',['rule_allows_packet',['../classfw_1_1_firewall.html#a26fea38729777e00e5ee3a8d58f785b1',1,'fw::Firewall']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="all_c.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,9 @@
var searchData=
[
['setup_5fauth_0',['setup_auth',['../classfw_1_1_a_p_i.html#a45dcdd4969f70a7f1a02e49a47b16a1d',1,'fw::API']]],
['setup_5frouting_1',['setup_routing',['../classfw_1_1_a_p_i.html#a90986dc50f303564e6f5af6d3707dd20',1,'fw::API']]],
['storage_2',['Storage',['../classfw_1_1_storage.html',1,'fw::Storage'],['../classfw_1_1_storage.html#a9b9fcc0e523d4b14a77e33a5806a348e',1,'fw::Storage::Storage()']]],
['store_5fall_5ffirewall_5frules_3',['store_all_firewall_rules',['../classfw_1_1_storage.html#a7747d174b1b3dd6bb417c1c5a8ac259c',1,'fw::Storage']]],
['store_5famount_5fof_5frules_4',['store_amount_of_rules',['../classfw_1_1_storage.html#a79d1951d339a19edab7fd22aaa68cc96',1,'fw::Storage']]],
['store_5ffirewall_5frule_5',['store_firewall_rule',['../classfw_1_1_storage.html#a9c1d226dbad072a6d0bf7e3507b7863b',1,'fw::Storage']]]
];

View file

@ -1,5 +1,6 @@
var searchData= var searchData=
[ [
['_7eapi_0',['~API',['../classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab',1,'fw::API']]], ['_7eapi_0',['~API',['../classfw_1_1_a_p_i.html#a66ac0bd592bb08d069aea199668670ab',1,'fw::API']]],
['_7efirewall_1',['~Firewall',['../classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d',1,'fw::Firewall']]] ['_7efirewall_1',['~Firewall',['../classfw_1_1_firewall.html#a2c7c043d66b645ecc15e71561132057d',1,'fw::Firewall']]],
['_7estorage_2',['~Storage',['../classfw_1_1_storage.html#a11b6f2d893abc79879418853d4f840e1',1,'fw::Storage']]]
]; ];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="classes_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var searchData=
[
['api_0',['API',['../classfw_1_1_a_p_i.html',1,'fw']]],
['api_5fendpoint_5ft_1',['api_endpoint_t',['../structapi__endpoint__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="classes_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['credential_5ft_0',['credential_t',['../structcredential__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="classes_2.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var searchData=
[
['firewall_0',['Firewall',['../classfw_1_1_firewall.html',1,'fw']]],
['firewall_5frule_5ft_1',['firewall_rule_t',['../structfirewall__rule__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="classes_3.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['my_5fpacket_5ft_0',['my_packet_t',['../structmy__packet__t.html',1,'']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="classes_4.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['storage_0',['Storage',['../classfw_1_1_storage.html',1,'fw']]]
];

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 11 11"
height="11"
width="11"
id="svg2"
version="1.1">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<path
id="path12"
d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_0.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,6 @@
var searchData=
[
['add_5fendpoint_5fto_5flist_0',['add_endpoint_to_list',['../classfw_1_1_a_p_i.html#aad90a1bfa8e00c4e25a091e5e9a61772',1,'fw::API']]],
['add_5frule_5fto_5ffirewall_1',['add_rule_to_firewall',['../classfw_1_1_firewall.html#aae2a4a36257033c91f8f183b11de82c5',1,'fw::Firewall::add_rule_to_firewall(firewall_rule_t *rule_ptr, const bool save_in_eeprom=true)'],['../classfw_1_1_firewall.html#af1d9481f13052673c64aaf88d019e01d',1,'fw::Firewall::add_rule_to_firewall(String *args)']]],
['api_2',['API',['../classfw_1_1_a_p_i.html#a033d5efd077dfad456cb6e6e7dd2baca',1,'fw::API']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_1.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,8 @@
var searchData=
[
['check_5fauth_0',['check_auth',['../classfw_1_1_a_p_i.html#adc9523a1b6e6a6e8f57a514a25c35b8c',1,'fw::API']]],
['construct_5fjson_5fapi_1',['construct_json_api',['../classfw_1_1_a_p_i.html#aa541a477e14a992b55e3f75351887cab',1,'fw::API']]],
['construct_5fjson_5fapi_5fendpoint_2',['construct_json_api_endpoint',['../classfw_1_1_a_p_i.html#a175d139d29530e2946f67789c9652da8',1,'fw::API']]],
['construct_5fjson_5ffirewall_3',['construct_json_firewall',['../classfw_1_1_a_p_i.html#a682ec7e09a230507c39cbc7d7c7427d5',1,'fw::API']]],
['construct_5fjson_5ffirewall_5frule_4',['construct_json_firewall_rule',['../classfw_1_1_a_p_i.html#ac249b6e7533414d0296bde477cecac1b',1,'fw::API']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_2.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,5 @@
var searchData=
[
['delete_5ffirewall_5fhandler_0',['delete_firewall_handler',['../classfw_1_1_a_p_i.html#a592c2aa501ff920ebcc125f8d5635deb',1,'fw::API']]],
['delete_5frule_5ffrom_5ffirewall_1',['delete_rule_from_firewall',['../classfw_1_1_firewall.html#a25fac8da12651a927c8285aa75e213d1',1,'fw::Firewall']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_3.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
var searchData=
[
['firewall_0',['Firewall',['../classfw_1_1_firewall.html#a2cc2717bd5999bc9a2f24ae33e4abd42',1,'fw::Firewall']]]
];

View file

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="functions_4.js"></script>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div id="SRResults"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
createResults();
/* @license-end */
</script>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
window.addEventListener("message", function(event) {
if (event.data == "take_focus") {
var elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
});
/* @license-end */
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,10 @@
var searchData=
[
['get_5fendpoint_5flist_5fhandler_0',['get_endpoint_list_handler',['../classfw_1_1_a_p_i.html#a734cbd9da536fb297da87b4310f20ba1',1,'fw::API']]],
['get_5ffirewall_5frule_5fhandler_1',['get_firewall_rule_handler',['../classfw_1_1_a_p_i.html#ac76f5a6c9c28d71772b238a51b122e4a',1,'fw::API']]],
['get_5ffirewall_5frules_5fhandler_2',['get_firewall_rules_handler',['../classfw_1_1_a_p_i.html#ab904f77fa777a1c8c19deb8e39cf89e8',1,'fw::API']]],
['get_5fpacket_5finformation_3',['get_packet_information',['../classfw_1_1_firewall.html#a6815085477349f902e77cc5564b1b5ba',1,'fw::Firewall']]],
['get_5frule_5ffrom_5ffirewall_4',['get_rule_from_firewall',['../classfw_1_1_firewall.html#a7aa017cfb1ae6d6748d3f8c48e18dcf2',1,'fw::Firewall']]],
['get_5frule_5fhead_5',['get_rule_head',['../classfw_1_1_firewall.html#a86f7d6ef56888f673fa46c4bc9ad3009',1,'fw::Firewall']]],
['get_5furl_5fbase_6',['get_url_base',['../classfw_1_1_a_p_i.html#af5dc938ae5a274e3599d637e672b8d07',1,'fw::API']]]
];

Some files were not shown because too many files have changed in this diff Show more