Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ETSI STF525 / Internal Testing test suite: /home/vagrant/TriesAndDelete/etsi_its/framework/include/Abstract_Socket.hh 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 style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">ETSI STF525 / Internal Testing test suite
</div>
<div id="projectbrief">This project provides an internal testing test suite and its associated Test Adapter/Codec</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- 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_644e041c3a6521da7b27eba0e4eb2b95.html">framework</a></li><li class="navelem"><a class="el" href="dir_dd40116cd1cfebdc77a7c7114b29912e.html">include</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Abstract_Socket.hh</div> </div>
</div><!--header-->
<div class="contents">
<a href="Abstract__Socket_8hh.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/******************************************************************************</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">* Copyright (c) 2004, 2014 Ericsson AB</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">* All rights reserved. This program and the accompanying materials</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">* are made available under the terms of the Eclipse Public License v1.0</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">* which accompanies this distribution, and is available at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">* http://www.eclipse.org/legal/epl-v10.html</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">* Contributors:</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">* Zoltan Bibo - initial implementation and initial documentation</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">* Gergely Futo</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">* Oliver Ferenc Czerman</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">* Balasko Jeno</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">* Zoltan Bibo</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">* Eduard Czimbalmos</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">* Kulcsr Endre</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">* Gabor Szalai</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">* Jozsef Gyurusi</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">* Csndes Tibor</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">* Zoltan Jasz</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">******************************************************************************/</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// File: Abstract_Socket.hh</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// Description: Abstract_Socket header file</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// Rev: R9B</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// Prodnr: CNL 113 384</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">//</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifndef Abstract_Socket_HH</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#define Abstract_Socket_HH</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#ifdef AS_USE_SSL</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <openssl/ssl.h></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <openssl/rand.h></span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <openssl/err.h></span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <sys/socket.h></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <netinet/in.h></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <TTCN3.hh></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">// to support systems not supporting IPv6 define AF_INET6 to some dummy value:</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#ifndef AF_INET6</span></div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="Abstract__Socket_8hh.html#aa03706b2738b9a58d4985dfbe99e1bac"> 44</a></span> <span class="preprocessor">#define AF_INET6 (-255)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html"> 47</a></span> <span class="keyword">class </span><a class="code" href="classPacketHeaderDescr.html">PacketHeaderDescr</a> {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="comment">// Byte order in the header</span></div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511c"> 50</a></span>  <span class="keyword">enum</span> <a class="code" href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511c">HeaderByteOrder</a>{ <a class="code" href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511ca7d94f5d6d106289d97d24ef8d1e6659d">Header_MSB</a>, <a class="code" href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511ca3b495404b59b0b338c30121c5f4e9633">Header_LSB</a> };</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#a31a9c71eb97c6d16bc1e58689af23b6c"> 52</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classPacketHeaderDescr.html#a31a9c71eb97c6d16bc1e58689af23b6c">length_offset</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#af9708dbfbaa1b8a6e7d1b7e99649f86a"> 53</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classPacketHeaderDescr.html#af9708dbfbaa1b8a6e7d1b7e99649f86a">nr_bytes_in_length</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#acb12ebdfdadaee8dfc85097c07048a97"> 54</a></span>  <a class="code" href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511c">HeaderByteOrder</a> <a class="code" href="classPacketHeaderDescr.html#acb12ebdfdadaee8dfc85097c07048a97">byte_order</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#a34d593784778692db9e0da0ebed217f1"> 55</a></span>  <span class="keywordtype">long</span> <a class="code" href="classPacketHeaderDescr.html#a34d593784778692db9e0da0ebed217f1">value_offset</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#a31f6ade6c6389111fbd67220105c4dc7"> 56</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classPacketHeaderDescr.html#a31f6ade6c6389111fbd67220105c4dc7">length_multiplier</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#aa6b1ba6ce95fd3cd07e7fd2493d026a0"> 58</a></span>  <a class="code" href="classPacketHeaderDescr.html#aa6b1ba6ce95fd3cd07e7fd2493d026a0">PacketHeaderDescr</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> p_length_offset,</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> p_nr_bytes_in_length, <a class="code" href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511c">HeaderByteOrder</a> p_byte_order,</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordtype">long</span> p_value_offset = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> p_length_multiplier = 1)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  : length_offset(p_length_offset), nr_bytes_in_length(p_nr_bytes_in_length),</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  byte_order(p_byte_order), value_offset(p_value_offset),</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  length_multiplier(p_length_multiplier) { }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">// returns the message length</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classPacketHeaderDescr.html#a790158096571af23a03edd2206aa7258">Get_Message_Length</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* buffer_pointer) <span class="keyword">const</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="comment">// returns the number of bytes needed to have a valid message length</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classPacketHeaderDescr.html#aa6a823cefbeda5a2b053f8605edd3d9a"> 68</a></span>  <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classPacketHeaderDescr.html#aa6a823cefbeda5a2b053f8605edd3d9a">Get_Valid_Header_Length</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> length_offset + <a class="code" href="classPacketHeaderDescr.html#af9708dbfbaa1b8a6e7d1b7e99649f86a">nr_bytes_in_length</a>; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> };</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html"> 72</a></span> <span class="keyword">class </span><a class="code" href="classAbstract__Socket.html">Abstract_Socket</a></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ab50213fa1c8f4507fc882012cc5091f5"> 75</a></span>  <span class="keyword">enum</span> <a class="code" href="classAbstract__Socket.html#ab50213fa1c8f4507fc882012cc5091f5">TCP_STATES</a> {CLOSED, LISTEN, ESTABLISHED, CLOSE_WAIT, FIN_WAIT};</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a86474b2baeeea777d25a2fd51945f09baea14b082b58c6eebe9fb2e8d66df98b1"> 76</a></span>  <span class="keyword">enum</span> <a class="code" href="classAbstract__Socket.html#a86474b2baeeea777d25a2fd51945f09b">READING_STATES</a> {STATE_DONT_RECEIVE, <a class="code" href="classAbstract__Socket.html#a86474b2baeeea777d25a2fd51945f09baea14b082b58c6eebe9fb2e8d66df98b1">STATE_WAIT_FOR_RECEIVE_CALLBACK</a>, STATE_BLOCK_FOR_SENDING, STATE_DONT_CLOSE, STATE_NORMAL};</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">// client data</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="structAbstract__Socket_1_1as__client__struct.html"> 78</a></span>  <span class="keyword">struct </span><a class="code" href="structAbstract__Socket_1_1as__client__struct.html">as_client_struct</a> {</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structAbstract__Socket_1_1as__client__struct.html#af7705037bc13f1837e51c46e6c03b183"> 79</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structAbstract__Socket_1_1as__client__struct.html#af7705037bc13f1837e51c46e6c03b183">user_data</a>; <span class="comment">// pointer to any additional data needed by the user</span></div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="structAbstract__Socket_1_1as__client__struct.html#ac9ac524322d048a0e68423c47a887897"> 80</a></span>  TTCN_Buffer *<a class="code" href="structAbstract__Socket_1_1as__client__struct.html#ac9ac524322d048a0e68423c47a887897">fd_buff</a>; <span class="comment">// pointer to the data buffer</span></div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structAbstract__Socket_1_1as__client__struct.html#a0aa73cb6cd6bacedfdb5014b30853634"> 81</a></span>  <span class="keyword">struct </span>sockaddr_storage clientAddr;<span class="comment">// client address</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#if defined LINUX || defined FREEBSD || defined SOLARIS8</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  socklen_t</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor">#else </span><span class="comment">/* SOLARIS or WIN32 */</span><span class="preprocessor"></span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordtype">int</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structAbstract__Socket_1_1as__client__struct.html#a3a678ca1a16b2b443eb2451e981f1809"> 87</a></span>  <a class="code" href="structAbstract__Socket_1_1as__client__struct.html#a3a678ca1a16b2b443eb2451e981f1809">clientAddrlen</a>;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structAbstract__Socket_1_1as__client__struct.html#a326204464e6f18aa1d7f1c4f3ead8ab5"> 88</a></span>  <a class="code" href="classAbstract__Socket.html#ab50213fa1c8f4507fc882012cc5091f5">TCP_STATES</a> <a class="code" href="structAbstract__Socket_1_1as__client__struct.html#a326204464e6f18aa1d7f1c4f3ead8ab5">tcp_state</a>; <span class="comment">// TCP state</span></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="structAbstract__Socket_1_1as__client__struct.html#aa805301c3798dc5f39dc709cebb0e4ae"> 89</a></span>  <a class="code" href="classAbstract__Socket.html#a86474b2baeeea777d25a2fd51945f09b">READING_STATES</a> <a class="code" href="structAbstract__Socket_1_1as__client__struct.html#aa805301c3798dc5f39dc709cebb0e4ae">reading_state</a>; <span class="comment">//used when SSL_write returns SSL_ERROR_WANT_READ an we are using non-blocking socket</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  };</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="classAbstract__Socket.html">Abstract_Socket</a>();</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classAbstract__Socket.html">Abstract_Socket</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *testport_type, <span class="keyword">const</span> <span class="keywordtype">char</span> *testport_name);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">virtual</span> ~<a class="code" href="classAbstract__Socket.html">Abstract_Socket</a>();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="comment">// Shall be called from set_parameter()</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordtype">bool</span> parameter_set(<span class="keyword">const</span> <span class="keywordtype">char</span> *parameter_name, <span class="keyword">const</span> <span class="keywordtype">char</span> *parameter_value);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Shall be called from user_map()</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordtype">void</span> map_user();</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// Shall be called from user_unmap()</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">void</span> unmap_user();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// puts the IP address in the addr</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordtype">void</span> get_host_id(<span class="keyword">const</span> <span class="keywordtype">char</span>* hostName, <span class="keyword">struct</span> sockaddr_in *addr); <span class="comment">/* This function should not be used! Use getaddrinfo instead! */</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="comment">// Closes the current listening port and opens the specified one</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">int</span> open_listen_port(<span class="keyword">const</span> <span class="keyword">struct</span> sockaddr_in & localAddr); <span class="comment">/* This function should be removed! Deprecated by: */</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordtype">int</span> open_listen_port(<span class="keyword">const</span> <span class="keywordtype">char</span>* localHostname, <span class="keyword">const</span> <span class="keywordtype">char</span>* localServicename);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// Closes the current listening port</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">void</span> close_listen_port();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> listen_port_opened(<span class="keywordtype">int</span> port_number);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Opens a new client connection</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">int</span> open_client_connection(<span class="keyword">const</span> <span class="keyword">struct</span> sockaddr_in & new_remote_addr, <span class="keyword">const</span> <span class="keyword">struct</span> sockaddr_in & new_local_addr); <span class="comment">/* This function should be removed! Deprecated by: */</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordtype">int</span> open_client_connection(<span class="keyword">const</span> <span class="keywordtype">char</span>* remoteHostname, <span class="keyword">const</span> <span class="keywordtype">char</span>* remoteService, <span class="keyword">const</span> <span class="keywordtype">char</span>* localHostname, <span class="keyword">const</span> <span class="keywordtype">char</span>* localService);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> client_connection_opened(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// Shall be called from Handle_Fd_Event()</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordtype">void</span> Handle_Socket_Event(<span class="keywordtype">int</span> fd, <span class="keywordtype">boolean</span> is_readable, <span class="keywordtype">boolean</span> is_writable, <span class="keywordtype">boolean</span> is_error);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="comment">// Shall be called from Handle_Timeout() - for possible future development</span></div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a12e33b1f8f4221cf780ad8a79d15c2a5"> 123</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#a12e33b1f8f4221cf780ad8a79d15c2a5">Handle_Timeout_Event</a>(<span class="keywordtype">double</span> <span class="comment">/*time_since_last_call*/</span>) {};</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="comment">// Shall be called from outgoing_send()</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordtype">void</span> send_outgoing(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* message_buffer, <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> client_id = -1);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordtype">void</span> send_shutdown(<span class="keywordtype">int</span> client_id = -1);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="comment">// Access to private variables</span></div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a07394d215d11156b9b620552707f3f29"> 130</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a07394d215d11156b9b620552707f3f29">get_nagling</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> nagling;}</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a8da7869330a5a6e539c65b7c467c8f55"> 131</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a8da7869330a5a6e539c65b7c467c8f55">get_use_non_blocking_socket</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> use_non_blocking_socket;};</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#abcdc1c684f4b6f6a1a1e489a3c892f57"> 132</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#abcdc1c684f4b6f6a1a1e489a3c892f57">get_server_mode</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> server_mode;}</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a50cfdd3381ba23275060fb2a2fd89b1b"> 133</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a50cfdd3381ba23275060fb2a2fd89b1b">get_socket_debugging</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> socket_debugging;}</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#aa330e54654ce08181bcf61765d3591b0"> 134</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#aa330e54654ce08181bcf61765d3591b0">get_halt_on_connection_reset</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> halt_on_connection_reset;}</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a9ef2b661e76f02afa66076c4dcd0a370"> 135</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a9ef2b661e76f02afa66076c4dcd0a370">get_use_connection_ASPs</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> use_connection_ASPs;}</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a155d27550c953ef081c40173dca9ddbd"> 136</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a155d27550c953ef081c40173dca9ddbd">get_handle_half_close</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> handle_half_close;}</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">int</span> get_socket_fd() <span class="keyword">const</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a19a31c859f630c0ced9eddcd5dae9e0f"> 138</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a19a31c859f630c0ced9eddcd5dae9e0f">get_listen_fd</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> listen_fd;}</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">//set non-blocking mode</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordtype">int</span> set_non_block_mode(<span class="keywordtype">int</span> fd, <span class="keywordtype">bool</span> enable_nonblock);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">//increase buffer size</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordtype">bool</span> increase_send_buffer(<span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> &old_size, <span class="keywordtype">int</span>& new_size);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a76c0ddfc941aba36e63ab828a83faf51"> 146</a></span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classAbstract__Socket.html#a76c0ddfc941aba36e63ab828a83faf51">get_local_host_name</a>(){<span class="keywordflow">return</span> local_host_name; };</div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a4c986496652a5ec20ebff807816b46d8"> 147</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a4c986496652a5ec20ebff807816b46d8">get_local_port_number</a>(){<span class="keywordflow">return</span> local_port_number; };</div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a6b930cbb8e2c3d4a07647defcd1c3887"> 148</a></span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classAbstract__Socket.html#a6b930cbb8e2c3d4a07647defcd1c3887">get_remote_host_name</a>(){<span class="keywordflow">return</span> remote_host_name; };</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ad61937c8c3b8e9afdf9fb29c09655834"> 149</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#ad61937c8c3b8e9afdf9fb29c09655834">get_remote_port_number</a>(){<span class="keywordflow">return</span> remote_port_number; };</div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a0b1568c89695f986aa3db4c42cbc8582"> 150</a></span>  <span class="keyword">const</span> <span class="keyword">struct </span>sockaddr_in & <a class="code" href="classAbstract__Socket.html#a0b1568c89695f986aa3db4c42cbc8582">get_remote_addr</a>() {<span class="keywordflow">return</span> remoteAddr; }; <span class="comment">/* FIXME: This function is deprecated and should be removed! */</span></div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a2d0648542b069850b1952ddf894dcf5c"> 151</a></span>  <span class="keyword">const</span> <span class="keyword">struct </span>sockaddr_in & <a class="code" href="classAbstract__Socket.html#a2d0648542b069850b1952ddf894dcf5c">get_local_addr</a>() {<span class="keywordflow">return</span> localAddr; }; <span class="comment">/* FIXME: This function is deprecated and should be removed! */</span></div><div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a0a782ab21447e1547955f4d34ae1e426"> 152</a></span>  <span class="keyword">const</span> <span class="keywordtype">int</span>& <a class="code" href="classAbstract__Socket.html#a0a782ab21447e1547955f4d34ae1e426">get_ai_family</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ai_family;}</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a3d86f16b4fb63160ae5574bd63ac6af7"> 153</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#a3d86f16b4fb63160ae5574bd63ac6af7">set_ai_family</a>(<span class="keywordtype">int</span> parameter_value) {ai_family=parameter_value;}</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ac744393ebcf7914838b1abc8d873f579"> 154</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#ac744393ebcf7914838b1abc8d873f579">get_ttcn_buffer_usercontrol</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ttcn_buffer_usercontrol; }</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a2a9b86f657caf661b2d428f8ca5e6a54"> 155</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#a2a9b86f657caf661b2d428f8ca5e6a54">set_nagling</a>(<span class="keywordtype">bool</span> parameter_value) {nagling=parameter_value;}</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ada8829169c7752b8c630d825c6fecb2e"> 156</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#ada8829169c7752b8c630d825c6fecb2e">set_server_mode</a>(<span class="keywordtype">bool</span> parameter_value) {server_mode=parameter_value;}</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a5ae3f266862fab22f22c82a2fba04f4d"> 157</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#a5ae3f266862fab22f22c82a2fba04f4d">set_handle_half_close</a>(<span class="keywordtype">bool</span> parameter_value) {handle_half_close=parameter_value;}</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a8f53a111b5d66e2c4060ffd6500a27ee"> 158</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#a8f53a111b5d66e2c4060ffd6500a27ee">set_socket_debugging</a>(<span class="keywordtype">bool</span> parameter_value) {socket_debugging=parameter_value;}</div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a5aac70a791ebd5733dd533c693521fde"> 159</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#a5aac70a791ebd5733dd533c693521fde">set_halt_on_connection_reset</a>(<span class="keywordtype">bool</span> parameter_value) {halt_on_connection_reset=parameter_value;}</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ae2e59ca0f47d24267dfbb7ccd2a41115"> 160</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#ae2e59ca0f47d24267dfbb7ccd2a41115">set_ttcn_buffer_usercontrol</a>(<span class="keywordtype">bool</span> parameter_value) {ttcn_buffer_usercontrol=parameter_value;}</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a1cc7f81a1681e3ae1efe6a9fed3f17d5"> 161</a></span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classAbstract__Socket.html#a1cc7f81a1681e3ae1efe6a9fed3f17d5">test_port_type</a>;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a4d39e3faf6a6dc3ce9c01aa5f9ce7c53"> 162</a></span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classAbstract__Socket.html#a4d39e3faf6a6dc3ce9c01aa5f9ce7c53">test_port_name</a>;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="comment">// Called when a message is received</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> message_incoming(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* message_buffer, <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> client_id = -1) = 0;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Add_Fd_Read_Handler(<span class="keywordtype">int</span> fd) = 0;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Add_Fd_Write_Handler(<span class="keywordtype">int</span> fd) = 0;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Remove_Fd_Read_Handler(<span class="keywordtype">int</span> fd) = 0;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Remove_Fd_Write_Handler(<span class="keywordtype">int</span> fd) = 0;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Remove_Fd_All_Handlers(<span class="keywordtype">int</span> fd) = 0;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Handler_Uninstall() = 0;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Timer_Set_Handler(<span class="keywordtype">double</span> call_interval, <span class="keywordtype">boolean</span> is_timeout = TRUE,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordtype">boolean</span> call_anyway = TRUE, <span class="keywordtype">boolean</span> is_periodic = TRUE) = 0; <span class="comment">// unused - for possible future development</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classPacketHeaderDescr.html">PacketHeaderDescr</a>* Get_Header_Descriptor() <span class="keyword">const</span>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">// Logging functions</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordtype">void</span> log_debug(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...) const</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  __attribute__ ((__format__ (__printf__, 2, 3)));</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordtype">void</span> log_warning(const <span class="keywordtype">char</span> *fmt, ...) const</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  __attribute__ ((__format__ (__printf__, 2, 3)));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordtype">void</span> log_error(const <span class="keywordtype">char</span> *fmt, ...) const</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a666904b231470e87638791bf2de029fa"> 183</a></span>  __attribute__ ((__format__ (__printf__, 2, 3), __noreturn__));</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordtype">void</span> log_hex(const <span class="keywordtype">char</span> *prompt, const <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *msg, <span class="keywordtype">size_t</span> length) const;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// Called when a message is to be received (an event detected)</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  virtual <span class="keywordtype">int</span> receive_message_on_fd(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="comment">// Called when a message is to be sent</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  virtual <span class="keywordtype">int</span> send_message_on_fd(<span class="keywordtype">int</span> client_id, const <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* message_buffer, <span class="keywordtype">int</span> message_length);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  virtual <span class="keywordtype">int</span> send_message_on_nonblocking_fd(<span class="keywordtype">int</span> client_id, const <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *message_buffer, <span class="keywordtype">int</span> message_length);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// Called after a peer is connected</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  virtual <span class="keywordtype">void</span> peer_connected(<span class="keywordtype">int</span> client_id, sockaddr_in& remote_addr); <span class="comment">/* This function should be removed! deprecated by: */</span></div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a74b339c38e90ea49973f20fa9ee17af5"> 193</a></span>  virtual <span class="keywordtype">void</span> peer_connected(<span class="keywordtype">int</span> <span class="comment">/*client_id*/</span>, const <span class="keywordtype">char</span> * <span class="comment">/*host*/</span>, const <span class="keywordtype">int</span> <span class="comment">/*port*/</span>) {};</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="comment">// Called after a peer is disconnected</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> peer_disconnected(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// Called when a peer shut down its fd for writing</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> peer_half_closed(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="comment">// Called after a send error</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> report_error(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> msg_length, <span class="keywordtype">int</span> sent_length, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* msg, <span class="keyword">const</span> <span class="keywordtype">char</span>* error_text);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="comment">// Called after a unsent message</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> report_unsent(<span class="keywordtype">int</span> client_id, <span class="keywordtype">int</span> msg_length, <span class="keywordtype">int</span> sent_length, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* msg, <span class="keyword">const</span> <span class="keywordtype">char</span>* error_text);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="comment">// Test port parameters</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* local_port_name();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* remote_address_name();</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* local_address_name();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* remote_port_name();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ai_family_name();</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* use_connection_ASPs_name();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* halt_on_connection_reset_name();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* client_TCP_reconnect_name();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* TCP_reconnect_attempts_name();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* TCP_reconnect_delay_name();</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* server_mode_name();</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* socket_debugging_name();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* nagling_name();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* use_non_blocking_socket_name();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* server_backlog_name();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="comment">// Fetch/Set user data pointer</span></div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#adde658b4a1ae1598c997fe5e59ae9326"> 221</a></span>  <span class="keywordtype">void</span>* <a class="code" href="classAbstract__Socket.html#adde658b4a1ae1598c997fe5e59ae9326">get_user_data</a>(<span class="keywordtype">int</span> client_id) {<span class="keywordflow">return</span> get_peer(client_id)->user_data;}</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a057f90227cd41b8051fe8177d627a89f"> 222</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAbstract__Socket.html#a057f90227cd41b8051fe8177d627a89f">set_user_data</a>(<span class="keywordtype">int</span> client_id, <span class="keywordtype">void</span> *uptr) {get_peer(client_id)->user_data = uptr;}</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// Called after a TCP connection is established</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> add_user_data(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// Called before the TCP connection is drop down</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> remove_user_data(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="comment">// Called when a client shall be removed</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> remove_client(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// Called when all clients shall be removed</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> remove_all_clients();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="comment">// Called at the beginning of map() to check mandatory parameter presence</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> user_all_mandatory_configparameters_present();</div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ad40a04b722a156859dccfc580ffd1e6a"> 233</a></span>  TTCN_Buffer *<a class="code" href="classAbstract__Socket.html#ad40a04b722a156859dccfc580ffd1e6a">get_buffer</a>(<span class="keywordtype">int</span> client_id) {<span class="keywordflow">return</span> get_peer(client_id)->fd_buff; }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="comment">// Client data management functions</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="comment">// add peer to the list</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="structAbstract__Socket_1_1as__client__struct.html">as_client_struct</a> *peer_list_add_peer(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">// remove peer from list</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordtype">void</span> peer_list_remove_peer(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// remove all peers from list</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordtype">void</span> peer_list_reset_peer();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// returns back the structure of the peer</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="structAbstract__Socket_1_1as__client__struct.html">as_client_struct</a> *get_peer(<span class="keywordtype">int</span> client_id, <span class="keywordtype">bool</span> no_error=<span class="keyword">false</span>) <span class="keyword">const</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// length of the list</span></div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ac472bbcf15ed07126a94afd93c3c1d0f"> 245</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#ac472bbcf15ed07126a94afd93c3c1d0f">peer_list_get_length</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> peer_list_length; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="comment">// number of peers in the list</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordtype">int</span> peer_list_get_nr_of_peers() <span class="keyword">const</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// fd of the last peer in the list</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordtype">int</span> peer_list_get_last_peer() <span class="keyword">const</span>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="comment">// fd of the first peer in the list</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordtype">int</span> peer_list_get_first_peer() <span class="keyword">const</span>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordtype">void</span> handle_message(<span class="keywordtype">int</span> client_id = -1);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordtype">void</span> all_mandatory_configparameters_present();</div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ad53ba849093c0661f5e2f42e8cda70b6"> 257</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#ad53ba849093c0661f5e2f42e8cda70b6">halt_on_connection_reset_set</a>;</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#af4254ceebc19c43a6635d3e139f348b7"> 258</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#af4254ceebc19c43a6635d3e139f348b7">halt_on_connection_reset</a>;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a39e3bc71adac1bb31bb673c4024c6f31"> 259</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a39e3bc71adac1bb31bb673c4024c6f31">client_TCP_reconnect</a>;</div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a545fa901a696a67ad2920072f026050e"> 260</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a545fa901a696a67ad2920072f026050e">TCP_reconnect_attempts</a>;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a62c2dcf1acf87f0fdd4f7889eaae038b"> 261</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a62c2dcf1acf87f0fdd4f7889eaae038b">TCP_reconnect_delay</a>;</div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a36b8b40e5b975e64948684c4bf6ed30d"> 262</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a36b8b40e5b975e64948684c4bf6ed30d">server_mode</a>;</div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a48d3b279226b05457de9e22556d5f723"> 263</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a48d3b279226b05457de9e22556d5f723">use_connection_ASPs</a>;</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a4c9de1a737a9c44f122e530f043b61c8"> 264</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a4c9de1a737a9c44f122e530f043b61c8">handle_half_close</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a5c655127fb3f0f260241243b330b9e5e"> 265</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a5c655127fb3f0f260241243b330b9e5e">socket_debugging</a>;</div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a6570770c8bdad3a3eafda1398e6942f9"> 266</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a6570770c8bdad3a3eafda1398e6942f9">nagling</a>;</div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a19295b0bc630d8ef946a87efb865a7e7"> 267</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#a19295b0bc630d8ef946a87efb865a7e7">use_non_blocking_socket</a>;</div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ac9495f89707b2daa499e32ad67dc9fdc"> 268</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAbstract__Socket.html#ac9495f89707b2daa499e32ad67dc9fdc">ttcn_buffer_usercontrol</a>;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a41743edcd0c54eb62400ab450c0f76bf"> 269</a></span>  <span class="keywordtype">char</span>* <a class="code" href="classAbstract__Socket.html#a41743edcd0c54eb62400ab450c0f76bf">local_host_name</a>;</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a397ed02791123dca85cef68c415755b9"> 270</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a397ed02791123dca85cef68c415755b9">local_port_number</a>;</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ad8923fcff726ab557cc806f2a332d53a"> 271</a></span>  <span class="keywordtype">char</span>* <a class="code" href="classAbstract__Socket.html#ad8923fcff726ab557cc806f2a332d53a">remote_host_name</a>;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a608701ab03ac0be00f474e0c62c1043b"> 272</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a608701ab03ac0be00f474e0c62c1043b">remote_port_number</a>;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ae83abeda0f998a18a5d9dfc75d5af831"> 273</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#ae83abeda0f998a18a5d9dfc75d5af831">ai_family</a>; <span class="comment">// address family to use</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">// remoteAddr and localAddr is filled when map_user is called</span></div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#af1c8e02b12c6b60e6cdbb1fb3b7acfe1"> 275</a></span>  <span class="keyword">struct </span>sockaddr_in remoteAddr; <span class="comment">/* FIXME: not used! should be removed */</span></div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a6d18f89932dbb41018bb1afb5809b2df"> 276</a></span>  <span class="keyword">struct </span>sockaddr_in localAddr; <span class="comment">/* FIXME: not used! should be removed */</span></div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a1396b5897a4d63b3c70f6ae4b44f45ea"> 277</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a1396b5897a4d63b3c70f6ae4b44f45ea">server_backlog</a>;</div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a8f3ffbed8d0750fef4d7115dffd5e34c"> 278</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a8f3ffbed8d0750fef4d7115dffd5e34c">deadlock_counter</a>;</div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a33744700043188a45dbe40bded183acf"> 279</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#a33744700043188a45dbe40bded183acf">listen_fd</a>;</div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#ab810b9b1683f1d721db344d4d927a07c"> 280</a></span>  <span class="keywordtype">int</span> <a class="code" href="classAbstract__Socket.html#ab810b9b1683f1d721db344d4d927a07c">peer_list_length</a>;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// Client data management functions</span></div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classAbstract__Socket.html#a8b84f58aeb0192b8973c7280d1f5cd84"> 283</a></span>  <a class="code" href="structAbstract__Socket_1_1as__client__struct.html">as_client_struct</a> **<a class="code" href="classAbstract__Socket.html#a8b84f58aeb0192b8973c7280d1f5cd84">peer_list_root</a>;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordtype">void</span> peer_list_resize_list(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> };</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor">#ifdef AS_USE_SSL</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keyword">class </span>SSL_Socket: <span class="keyword">public</span> <a class="code" href="classAbstract__Socket.html">Abstract_Socket</a></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  SSL_Socket();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  SSL_Socket(<span class="keyword">const</span> <span class="keywordtype">char</span> *tp_type, <span class="keyword">const</span> <span class="keywordtype">char</span> *tp_name);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keyword">virtual</span> ~SSL_Socket();</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordtype">bool</span> parameter_set(<span class="keyword">const</span> <span class="keywordtype">char</span> * parameter_name, <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter_value);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// Called after a TCP connection is established (client side or server accepted a connection).</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">// It will create a new SSL conenction on the top of the TCP connection.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> add_user_data(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">// Called after a TCP connection is closed.</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="comment">// It will delete the SSL conenction.</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> remove_user_data(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="comment">// Called from all_mandatory_configparameters_present() function</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="comment">// during map() operation to check mandatory parameter presents.</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> user_all_mandatory_configparameters_present();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="comment">// Called after an SSL connection is established (handshake finished) for further</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">// authentication. Shall return 'true' if verification</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="comment">// is OK, otherwise 'false'. If return value was 'true', the connection is kept, otherwise</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="comment">// the connection will be shutted down.</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> ssl_verify_certificates();</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="comment">// Call during SSL handshake (and rehandshake as well) by OpenSSL</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="comment">// Return values:</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">// ==1: user authentication is passed, go on with handshake</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="comment">// ==0: user authentication failed, refuse the connection to the other peer</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="comment">// <0 : user don't care, go on with default basic checks</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">virtual</span> <span class="keywordtype">int</span> ssl_verify_certificates_at_handshake(<span class="keywordtype">int</span> preverify_ok, X509_STORE_CTX *ssl_ctx);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="comment">// Called to receive from the socket if data is available (select()).</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="comment">// Shall return with 0 if the peer is disconnected or with the number of bytes read.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="comment">// If error occured, execution shall stop in the function by calling log_error()</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">virtual</span> <span class="keywordtype">int</span> receive_message_on_fd(<span class="keywordtype">int</span> client_id);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="comment">// Called to send a message on the socket.</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="comment">// Shall return with 0 if the peer is disconnected or with the number of bytes written.</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="comment">// If error occured, execution shall stop in the function by calling log_error()</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keyword">virtual</span> <span class="keywordtype">int</span> send_message_on_fd(<span class="keywordtype">int</span> client_id, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * message_buffer, <span class="keywordtype">int</span> length_of_message);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keyword">virtual</span> <span class="keywordtype">int</span> send_message_on_nonblocking_fd(<span class="keywordtype">int</span> client_id, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * message_buffer, <span class="keywordtype">int</span> length_of_message);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="comment">// The following members can be called to fetch the current values</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordtype">bool</span> get_ssl_use_ssl()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_use_ssl;}</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordtype">bool</span> get_ssl_verifycertificate()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_verify_certificate;}</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordtype">bool</span> get_ssl_use_session_resumption()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_use_session_resumption;}</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordtype">bool</span> get_ssl_initialized()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_initialized;}</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordtype">char</span> * get_ssl_key_file()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_key_file;}</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordtype">char</span> * get_ssl_certificate_file()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_certificate_file;}</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordtype">char</span> * get_ssl_trustedCAlist_file()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_trustedCAlist_file;}</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordtype">char</span> * get_ssl_cipher_list()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_cipher_list;}</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordtype">char</span> * get_ssl_password() <span class="keyword">const</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * get_ssl_server_auth_session_id_context()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_server_auth_session_id_context;}</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">// const SSL_METHOD * get_current_ssl_method() const {return ssl_method;}</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment">// const SSL_CIPHER * get_current_ssl_cipher() const {return ssl_cipher;}</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  SSL_SESSION* get_current_ssl_session()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_session;}</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  SSL_CTX * get_current_ssl_ctx()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_ctx;}</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  SSL * get_current_ssl()<span class="keyword"> const </span>{<span class="keywordflow">return</span> ssl_current_ssl;}</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// The following members can be called to set the current values</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="comment">// NOTE that in case the parameter_value is a char *pointer, the old character</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="comment">// array is deleted by these functions automatically.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordtype">void</span> set_ssl_use_ssl(<span class="keywordtype">bool</span> parameter_value);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordtype">void</span> set_ssl_verifycertificate(<span class="keywordtype">bool</span> parameter_value);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordtype">void</span> set_ssl_use_session_resumption(<span class="keywordtype">bool</span> parameter_value);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordtype">void</span> set_ssl_key_file(<span class="keywordtype">char</span> * parameter_value);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordtype">void</span> set_ssl_certificate_file(<span class="keywordtype">char</span> * parameter_value);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordtype">void</span> set_ssl_trustedCAlist_file(<span class="keywordtype">char</span> * parameter_value);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordtype">void</span> set_ssl_cipher_list(<span class="keywordtype">char</span> * parameter_value);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordtype">void</span> set_ssl_server_auth_session_id_context(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * parameter_value);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="comment">// The following members can be called to fetch the default test port parameter names</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_use_ssl_name();</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_use_session_resumption_name();</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_private_key_file_name();</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_trustedCAlist_file_name();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_certificate_file_name();</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_password_name();</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_cipher_list_name();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_verifycertificate_name();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_disable_SSLv2();</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_disable_SSLv3();</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_disable_TLSv1();</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_disable_TLSv1_1();</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* ssl_disable_TLSv1_2();</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordtype">bool</span> ssl_verify_certificate; <span class="comment">// verify other part's certificate or not</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordtype">bool</span> ssl_use_ssl; <span class="comment">// whether to use SSL</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordtype">bool</span> ssl_initialized; <span class="comment">// whether SSL already initialized or not</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordtype">bool</span> ssl_use_session_resumption; <span class="comment">// use SSL sessions or not</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordtype">bool</span> SSLv2;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordtype">bool</span> SSLv3;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordtype">bool</span> TLSv1;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordtype">bool</span> TLSv1_1;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordtype">bool</span> TLSv1_2;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordtype">char</span> *ssl_key_file; <span class="comment">// private key file</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordtype">char</span> *ssl_certificate_file; <span class="comment">// own certificate file</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordtype">char</span> *ssl_trustedCAlist_file; <span class="comment">// trusted CA list file</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordtype">char</span> *ssl_cipher_list; <span class="comment">// ssl_cipher list restriction to apply</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordtype">char</span> *ssl_password; <span class="comment">// password to decode the private key</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * ssl_server_auth_session_id_context;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment">// const SSL_METHOD *ssl_method; // SSL context method</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  SSL_CTX *ssl_ctx; <span class="comment">// SSL context</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">// const SSL_CIPHER *ssl_cipher; // used SSL ssl_cipher</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  SSL_SESSION *ssl_session; <span class="comment">// SSL ssl_session</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  SSL *ssl_current_ssl; <span class="comment">// currently used SSL object</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> *ssl_current_client; <span class="comment">// current SSL object, used only during authentication</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordtype">void</span> ssl_actions_to_seed_PRNG(); <span class="comment">// Seed the PRNG with enough random data</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordtype">void</span> ssl_init_SSL(); <span class="comment">// Initialize SSL libraries and create the SSL context</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordtype">void</span> ssl_log_SSL_info(); <span class="comment">// Log the currently used SSL setting (debug)</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordtype">int</span> ssl_getresult(<span class="keywordtype">int</span> result_code); <span class="comment">// Fetch and log the SSL error code from I/O operation result codes</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="comment">// Callback function to pass the password to OpenSSL. Called by OpenSSL</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="comment">// during SSL handshake.</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keyword">static</span> <span class="keywordtype">int</span> ssl_password_cb(<span class="keywordtype">char</span> * password_buffer, <span class="keywordtype">int</span> length_of_password, <span class="keywordtype">int</span> rw_flag, <span class="keywordtype">void</span> * user_data);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="comment">// Callback function to perform authentication during SSL handshake. Called by OpenSSL.</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="comment">// NOTE: for further authentication, use ssl_verify_certificates().</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">static</span> <span class="keywordtype">int</span> ssl_verify_callback(<span class="keywordtype">int</span> preverify_status, X509_STORE_CTX * ssl_context);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> };</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="classAbstract__Socket_html_ae2e59ca0f47d24267dfbb7ccd2a41115"><div class="ttname"><a href="classAbstract__Socket.html#ae2e59ca0f47d24267dfbb7ccd2a41115">Abstract_Socket::set_ttcn_buffer_usercontrol</a></div><div class="ttdeci">void set_ttcn_buffer_usercontrol(bool parameter_value)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:160</div></div>
<div class="ttc" id="classAbstract__Socket_html_af4254ceebc19c43a6635d3e139f348b7"><div class="ttname"><a href="classAbstract__Socket.html#af4254ceebc19c43a6635d3e139f348b7">Abstract_Socket::halt_on_connection_reset</a></div><div class="ttdeci">bool halt_on_connection_reset</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:258</div></div>
<div class="ttc" id="classAbstract__Socket_html_ac744393ebcf7914838b1abc8d873f579"><div class="ttname"><a href="classAbstract__Socket.html#ac744393ebcf7914838b1abc8d873f579">Abstract_Socket::get_ttcn_buffer_usercontrol</a></div><div class="ttdeci">bool get_ttcn_buffer_usercontrol() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:154</div></div>
<div class="ttc" id="classAbstract__Socket_html_ad61937c8c3b8e9afdf9fb29c09655834"><div class="ttname"><a href="classAbstract__Socket.html#ad61937c8c3b8e9afdf9fb29c09655834">Abstract_Socket::get_remote_port_number</a></div><div class="ttdeci">unsigned int get_remote_port_number()</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:149</div></div>
<div class="ttc" id="classAbstract__Socket_html_a86474b2baeeea777d25a2fd51945f09baea14b082b58c6eebe9fb2e8d66df98b1"><div class="ttname"><a href="classAbstract__Socket.html#a86474b2baeeea777d25a2fd51945f09baea14b082b58c6eebe9fb2e8d66df98b1">Abstract_Socket::STATE_WAIT_FOR_RECEIVE_CALLBACK</a></div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:76</div></div>
<div class="ttc" id="classPacketHeaderDescr_html"><div class="ttname"><a href="classPacketHeaderDescr.html">PacketHeaderDescr</a></div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:47</div></div>
<div class="ttc" id="classAbstract__Socket_html_a8f53a111b5d66e2c4060ffd6500a27ee"><div class="ttname"><a href="classAbstract__Socket.html#a8f53a111b5d66e2c4060ffd6500a27ee">Abstract_Socket::set_socket_debugging</a></div><div class="ttdeci">void set_socket_debugging(bool parameter_value)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:158</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_aa6a823cefbeda5a2b053f8605edd3d9a"><div class="ttname"><a href="classPacketHeaderDescr.html#aa6a823cefbeda5a2b053f8605edd3d9a">PacketHeaderDescr::Get_Valid_Header_Length</a></div><div class="ttdeci">unsigned long Get_Valid_Header_Length() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:68</div></div>
<div class="ttc" id="classAbstract__Socket_html_a19295b0bc630d8ef946a87efb865a7e7"><div class="ttname"><a href="classAbstract__Socket.html#a19295b0bc630d8ef946a87efb865a7e7">Abstract_Socket::use_non_blocking_socket</a></div><div class="ttdeci">bool use_non_blocking_socket</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:267</div></div>
<div class="ttc" id="classAbstract__Socket_html_abcdc1c684f4b6f6a1a1e489a3c892f57"><div class="ttname"><a href="classAbstract__Socket.html#abcdc1c684f4b6f6a1a1e489a3c892f57">Abstract_Socket::get_server_mode</a></div><div class="ttdeci">bool get_server_mode() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:132</div></div>
<div class="ttc" id="classAbstract__Socket_html_a3d86f16b4fb63160ae5574bd63ac6af7"><div class="ttname"><a href="classAbstract__Socket.html#a3d86f16b4fb63160ae5574bd63ac6af7">Abstract_Socket::set_ai_family</a></div><div class="ttdeci">void set_ai_family(int parameter_value)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:153</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_a31a9c71eb97c6d16bc1e58689af23b6c"><div class="ttname"><a href="classPacketHeaderDescr.html#a31a9c71eb97c6d16bc1e58689af23b6c">PacketHeaderDescr::length_offset</a></div><div class="ttdeci">unsigned long length_offset</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:52</div></div>
<div class="ttc" id="classAbstract__Socket_html_a397ed02791123dca85cef68c415755b9"><div class="ttname"><a href="classAbstract__Socket.html#a397ed02791123dca85cef68c415755b9">Abstract_Socket::local_port_number</a></div><div class="ttdeci">unsigned int local_port_number</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:270</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_a34d593784778692db9e0da0ebed217f1"><div class="ttname"><a href="classPacketHeaderDescr.html#a34d593784778692db9e0da0ebed217f1">PacketHeaderDescr::value_offset</a></div><div class="ttdeci">long value_offset</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:55</div></div>
<div class="ttc" id="classAbstract__Socket_html_adde658b4a1ae1598c997fe5e59ae9326"><div class="ttname"><a href="classAbstract__Socket.html#adde658b4a1ae1598c997fe5e59ae9326">Abstract_Socket::get_user_data</a></div><div class="ttdeci">void * get_user_data(int client_id)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:221</div></div>
<div class="ttc" id="classAbstract__Socket_html_a4c9de1a737a9c44f122e530f043b61c8"><div class="ttname"><a href="classAbstract__Socket.html#a4c9de1a737a9c44f122e530f043b61c8">Abstract_Socket::handle_half_close</a></div><div class="ttdeci">bool handle_half_close</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:264</div></div>
<div class="ttc" id="classAbstract__Socket_html_a155d27550c953ef081c40173dca9ddbd"><div class="ttname"><a href="classAbstract__Socket.html#a155d27550c953ef081c40173dca9ddbd">Abstract_Socket::get_handle_half_close</a></div><div class="ttdeci">bool get_handle_half_close() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:136</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_af9708dbfbaa1b8a6e7d1b7e99649f86a"><div class="ttname"><a href="classPacketHeaderDescr.html#af9708dbfbaa1b8a6e7d1b7e99649f86a">PacketHeaderDescr::nr_bytes_in_length</a></div><div class="ttdeci">unsigned long nr_bytes_in_length</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:53</div></div>
<div class="ttc" id="structAbstract__Socket_1_1as__client__struct_html_af7705037bc13f1837e51c46e6c03b183"><div class="ttname"><a href="structAbstract__Socket_1_1as__client__struct.html#af7705037bc13f1837e51c46e6c03b183">Abstract_Socket::as_client_struct::user_data</a></div><div class="ttdeci">void * user_data</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:79</div></div>
<div class="ttc" id="classAbstract__Socket_html_a0b1568c89695f986aa3db4c42cbc8582"><div class="ttname"><a href="classAbstract__Socket.html#a0b1568c89695f986aa3db4c42cbc8582">Abstract_Socket::get_remote_addr</a></div><div class="ttdeci">const struct sockaddr_in & get_remote_addr()</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:150</div></div>
<div class="ttc" id="structAbstract__Socket_1_1as__client__struct_html"><div class="ttname"><a href="structAbstract__Socket_1_1as__client__struct.html">Abstract_Socket::as_client_struct</a></div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:78</div></div>
<div class="ttc" id="classAbstract__Socket_html_a1cc7f81a1681e3ae1efe6a9fed3f17d5"><div class="ttname"><a href="classAbstract__Socket.html#a1cc7f81a1681e3ae1efe6a9fed3f17d5">Abstract_Socket::test_port_type</a></div><div class="ttdeci">const char * test_port_type</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:161</div></div>
<div class="ttc" id="classAbstract__Socket_html_a41743edcd0c54eb62400ab450c0f76bf"><div class="ttname"><a href="classAbstract__Socket.html#a41743edcd0c54eb62400ab450c0f76bf">Abstract_Socket::local_host_name</a></div><div class="ttdeci">char * local_host_name</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:269</div></div>
<div class="ttc" id="classAbstract__Socket_html_a5c655127fb3f0f260241243b330b9e5e"><div class="ttname"><a href="classAbstract__Socket.html#a5c655127fb3f0f260241243b330b9e5e">Abstract_Socket::socket_debugging</a></div><div class="ttdeci">bool socket_debugging</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:265</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_a22d349456872f0919bfcd59bdcfb511ca7d94f5d6d106289d97d24ef8d1e6659d"><div class="ttname"><a href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511ca7d94f5d6d106289d97d24ef8d1e6659d">PacketHeaderDescr::Header_MSB</a></div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:50</div></div>
<div class="ttc" id="classAbstract__Socket_html_ad40a04b722a156859dccfc580ffd1e6a"><div class="ttname"><a href="classAbstract__Socket.html#ad40a04b722a156859dccfc580ffd1e6a">Abstract_Socket::get_buffer</a></div><div class="ttdeci">TTCN_Buffer * get_buffer(int client_id)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:233</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_a22d349456872f0919bfcd59bdcfb511ca3b495404b59b0b338c30121c5f4e9633"><div class="ttname"><a href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511ca3b495404b59b0b338c30121c5f4e9633">PacketHeaderDescr::Header_LSB</a></div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:50</div></div>
<div class="ttc" id="classAbstract__Socket_html_a86474b2baeeea777d25a2fd51945f09b"><div class="ttname"><a href="classAbstract__Socket.html#a86474b2baeeea777d25a2fd51945f09b">Abstract_Socket::READING_STATES</a></div><div class="ttdeci">READING_STATES</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:76</div></div>
<div class="ttc" id="classAbstract__Socket_html_ada8829169c7752b8c630d825c6fecb2e"><div class="ttname"><a href="classAbstract__Socket.html#ada8829169c7752b8c630d825c6fecb2e">Abstract_Socket::set_server_mode</a></div><div class="ttdeci">void set_server_mode(bool parameter_value)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:156</div></div>
<div class="ttc" id="classAbstract__Socket_html_a33744700043188a45dbe40bded183acf"><div class="ttname"><a href="classAbstract__Socket.html#a33744700043188a45dbe40bded183acf">Abstract_Socket::listen_fd</a></div><div class="ttdeci">int listen_fd</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:279</div></div>
<div class="ttc" id="classAbstract__Socket_html_a07394d215d11156b9b620552707f3f29"><div class="ttname"><a href="classAbstract__Socket.html#a07394d215d11156b9b620552707f3f29">Abstract_Socket::get_nagling</a></div><div class="ttdeci">bool get_nagling() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:130</div></div>
<div class="ttc" id="classAbstract__Socket_html_a12e33b1f8f4221cf780ad8a79d15c2a5"><div class="ttname"><a href="classAbstract__Socket.html#a12e33b1f8f4221cf780ad8a79d15c2a5">Abstract_Socket::Handle_Timeout_Event</a></div><div class="ttdeci">void Handle_Timeout_Event(double)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:123</div></div>
<div class="ttc" id="classAbstract__Socket_html_a4c986496652a5ec20ebff807816b46d8"><div class="ttname"><a href="classAbstract__Socket.html#a4c986496652a5ec20ebff807816b46d8">Abstract_Socket::get_local_port_number</a></div><div class="ttdeci">unsigned int get_local_port_number()</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:147</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_aa6b1ba6ce95fd3cd07e7fd2493d026a0"><div class="ttname"><a href="classPacketHeaderDescr.html#aa6b1ba6ce95fd3cd07e7fd2493d026a0">PacketHeaderDescr::PacketHeaderDescr</a></div><div class="ttdeci">PacketHeaderDescr(unsigned long p_length_offset, unsigned long p_nr_bytes_in_length, HeaderByteOrder p_byte_order, long p_value_offset=0, unsigned long p_length_multiplier=1)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:58</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_a790158096571af23a03edd2206aa7258"><div class="ttname"><a href="classPacketHeaderDescr.html#a790158096571af23a03edd2206aa7258">PacketHeaderDescr::Get_Message_Length</a></div><div class="ttdeci">unsigned long Get_Message_Length(const unsigned char *buffer_pointer) const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.cc:68</div></div>
<div class="ttc" id="classAbstract__Socket_html_a5aac70a791ebd5733dd533c693521fde"><div class="ttname"><a href="classAbstract__Socket.html#a5aac70a791ebd5733dd533c693521fde">Abstract_Socket::set_halt_on_connection_reset</a></div><div class="ttdeci">void set_halt_on_connection_reset(bool parameter_value)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:159</div></div>
<div class="ttc" id="classAbstract__Socket_html_a057f90227cd41b8051fe8177d627a89f"><div class="ttname"><a href="classAbstract__Socket.html#a057f90227cd41b8051fe8177d627a89f">Abstract_Socket::set_user_data</a></div><div class="ttdeci">void set_user_data(int client_id, void *uptr)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:222</div></div>
<div class="ttc" id="classAbstract__Socket_html_a608701ab03ac0be00f474e0c62c1043b"><div class="ttname"><a href="classAbstract__Socket.html#a608701ab03ac0be00f474e0c62c1043b">Abstract_Socket::remote_port_number</a></div><div class="ttdeci">unsigned int remote_port_number</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:272</div></div>
<div class="ttc" id="structAbstract__Socket_1_1as__client__struct_html_a326204464e6f18aa1d7f1c4f3ead8ab5"><div class="ttname"><a href="structAbstract__Socket_1_1as__client__struct.html#a326204464e6f18aa1d7f1c4f3ead8ab5">Abstract_Socket::as_client_struct::tcp_state</a></div><div class="ttdeci">TCP_STATES tcp_state</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:88</div></div>
<div class="ttc" id="classAbstract__Socket_html_ae83abeda0f998a18a5d9dfc75d5af831"><div class="ttname"><a href="classAbstract__Socket.html#ae83abeda0f998a18a5d9dfc75d5af831">Abstract_Socket::ai_family</a></div><div class="ttdeci">int ai_family</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:273</div></div>
<div class="ttc" id="classAbstract__Socket_html_aa330e54654ce08181bcf61765d3591b0"><div class="ttname"><a href="classAbstract__Socket.html#aa330e54654ce08181bcf61765d3591b0">Abstract_Socket::get_halt_on_connection_reset</a></div><div class="ttdeci">bool get_halt_on_connection_reset() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:134</div></div>
<div class="ttc" id="structAbstract__Socket_1_1as__client__struct_html_aa805301c3798dc5f39dc709cebb0e4ae"><div class="ttname"><a href="structAbstract__Socket_1_1as__client__struct.html#aa805301c3798dc5f39dc709cebb0e4ae">Abstract_Socket::as_client_struct::reading_state</a></div><div class="ttdeci">READING_STATES reading_state</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:89</div></div>
<div class="ttc" id="classAbstract__Socket_html_a5ae3f266862fab22f22c82a2fba04f4d"><div class="ttname"><a href="classAbstract__Socket.html#a5ae3f266862fab22f22c82a2fba04f4d">Abstract_Socket::set_handle_half_close</a></div><div class="ttdeci">void set_handle_half_close(bool parameter_value)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:157</div></div>
<div class="ttc" id="classAbstract__Socket_html"><div class="ttname"><a href="classAbstract__Socket.html">Abstract_Socket</a></div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:72</div></div>
<div class="ttc" id="classAbstract__Socket_html_ac472bbcf15ed07126a94afd93c3c1d0f"><div class="ttname"><a href="classAbstract__Socket.html#ac472bbcf15ed07126a94afd93c3c1d0f">Abstract_Socket::peer_list_get_length</a></div><div class="ttdeci">int peer_list_get_length() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:245</div></div>
<div class="ttc" id="classAbstract__Socket_html_a48d3b279226b05457de9e22556d5f723"><div class="ttname"><a href="classAbstract__Socket.html#a48d3b279226b05457de9e22556d5f723">Abstract_Socket::use_connection_ASPs</a></div><div class="ttdeci">bool use_connection_ASPs</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:263</div></div>
<div class="ttc" id="classAbstract__Socket_html_ad8923fcff726ab557cc806f2a332d53a"><div class="ttname"><a href="classAbstract__Socket.html#ad8923fcff726ab557cc806f2a332d53a">Abstract_Socket::remote_host_name</a></div><div class="ttdeci">char * remote_host_name</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:271</div></div>
<div class="ttc" id="classAbstract__Socket_html_ac9495f89707b2daa499e32ad67dc9fdc"><div class="ttname"><a href="classAbstract__Socket.html#ac9495f89707b2daa499e32ad67dc9fdc">Abstract_Socket::ttcn_buffer_usercontrol</a></div><div class="ttdeci">bool ttcn_buffer_usercontrol</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:268</div></div>
<div class="ttc" id="structAbstract__Socket_1_1as__client__struct_html_ac9ac524322d048a0e68423c47a887897"><div class="ttname"><a href="structAbstract__Socket_1_1as__client__struct.html#ac9ac524322d048a0e68423c47a887897">Abstract_Socket::as_client_struct::fd_buff</a></div><div class="ttdeci">TTCN_Buffer * fd_buff</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:80</div></div>
<div class="ttc" id="classAbstract__Socket_html_ab50213fa1c8f4507fc882012cc5091f5"><div class="ttname"><a href="classAbstract__Socket.html#ab50213fa1c8f4507fc882012cc5091f5">Abstract_Socket::TCP_STATES</a></div><div class="ttdeci">TCP_STATES</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:75</div></div>
<div class="ttc" id="classAbstract__Socket_html_a36b8b40e5b975e64948684c4bf6ed30d"><div class="ttname"><a href="classAbstract__Socket.html#a36b8b40e5b975e64948684c4bf6ed30d">Abstract_Socket::server_mode</a></div><div class="ttdeci">bool server_mode</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:262</div></div>
<div class="ttc" id="classAbstract__Socket_html_a6b930cbb8e2c3d4a07647defcd1c3887"><div class="ttname"><a href="classAbstract__Socket.html#a6b930cbb8e2c3d4a07647defcd1c3887">Abstract_Socket::get_remote_host_name</a></div><div class="ttdeci">const char * get_remote_host_name()</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:148</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_a31f6ade6c6389111fbd67220105c4dc7"><div class="ttname"><a href="classPacketHeaderDescr.html#a31f6ade6c6389111fbd67220105c4dc7">PacketHeaderDescr::length_multiplier</a></div><div class="ttdeci">unsigned long length_multiplier</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:56</div></div>
<div class="ttc" id="classAbstract__Socket_html_a2a9b86f657caf661b2d428f8ca5e6a54"><div class="ttname"><a href="classAbstract__Socket.html#a2a9b86f657caf661b2d428f8ca5e6a54">Abstract_Socket::set_nagling</a></div><div class="ttdeci">void set_nagling(bool parameter_value)</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:155</div></div>
<div class="ttc" id="structAbstract__Socket_1_1as__client__struct_html_a3a678ca1a16b2b443eb2451e981f1809"><div class="ttname"><a href="structAbstract__Socket_1_1as__client__struct.html#a3a678ca1a16b2b443eb2451e981f1809">Abstract_Socket::as_client_struct::clientAddrlen</a></div><div class="ttdeci">int clientAddrlen</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:87</div></div>
<div class="ttc" id="classAbstract__Socket_html_ad53ba849093c0661f5e2f42e8cda70b6"><div class="ttname"><a href="classAbstract__Socket.html#ad53ba849093c0661f5e2f42e8cda70b6">Abstract_Socket::halt_on_connection_reset_set</a></div><div class="ttdeci">bool halt_on_connection_reset_set</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:257</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_a22d349456872f0919bfcd59bdcfb511c"><div class="ttname"><a href="classPacketHeaderDescr.html#a22d349456872f0919bfcd59bdcfb511c">PacketHeaderDescr::HeaderByteOrder</a></div><div class="ttdeci">HeaderByteOrder</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:50</div></div>
<div class="ttc" id="classAbstract__Socket_html_a545fa901a696a67ad2920072f026050e"><div class="ttname"><a href="classAbstract__Socket.html#a545fa901a696a67ad2920072f026050e">Abstract_Socket::TCP_reconnect_attempts</a></div><div class="ttdeci">int TCP_reconnect_attempts</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:260</div></div>
<div class="ttc" id="classAbstract__Socket_html_a8f3ffbed8d0750fef4d7115dffd5e34c"><div class="ttname"><a href="classAbstract__Socket.html#a8f3ffbed8d0750fef4d7115dffd5e34c">Abstract_Socket::deadlock_counter</a></div><div class="ttdeci">int deadlock_counter</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:278</div></div>
<div class="ttc" id="classAbstract__Socket_html_a6570770c8bdad3a3eafda1398e6942f9"><div class="ttname"><a href="classAbstract__Socket.html#a6570770c8bdad3a3eafda1398e6942f9">Abstract_Socket::nagling</a></div><div class="ttdeci">bool nagling</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:266</div></div>
<div class="ttc" id="classAbstract__Socket_html_a50cfdd3381ba23275060fb2a2fd89b1b"><div class="ttname"><a href="classAbstract__Socket.html#a50cfdd3381ba23275060fb2a2fd89b1b">Abstract_Socket::get_socket_debugging</a></div><div class="ttdeci">bool get_socket_debugging() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:133</div></div>
<div class="ttc" id="classAbstract__Socket_html_a8da7869330a5a6e539c65b7c467c8f55"><div class="ttname"><a href="classAbstract__Socket.html#a8da7869330a5a6e539c65b7c467c8f55">Abstract_Socket::get_use_non_blocking_socket</a></div><div class="ttdeci">bool get_use_non_blocking_socket() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:131</div></div>
<div class="ttc" id="classAbstract__Socket_html_a62c2dcf1acf87f0fdd4f7889eaae038b"><div class="ttname"><a href="classAbstract__Socket.html#a62c2dcf1acf87f0fdd4f7889eaae038b">Abstract_Socket::TCP_reconnect_delay</a></div><div class="ttdeci">int TCP_reconnect_delay</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:261</div></div>
<div class="ttc" id="classAbstract__Socket_html_a19a31c859f630c0ced9eddcd5dae9e0f"><div class="ttname"><a href="classAbstract__Socket.html#a19a31c859f630c0ced9eddcd5dae9e0f">Abstract_Socket::get_listen_fd</a></div><div class="ttdeci">int get_listen_fd() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:138</div></div>
<div class="ttc" id="classAbstract__Socket_html_a39e3bc71adac1bb31bb673c4024c6f31"><div class="ttname"><a href="classAbstract__Socket.html#a39e3bc71adac1bb31bb673c4024c6f31">Abstract_Socket::client_TCP_reconnect</a></div><div class="ttdeci">bool client_TCP_reconnect</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:259</div></div>
<div class="ttc" id="classAbstract__Socket_html_a4d39e3faf6a6dc3ce9c01aa5f9ce7c53"><div class="ttname"><a href="classAbstract__Socket.html#a4d39e3faf6a6dc3ce9c01aa5f9ce7c53">Abstract_Socket::test_port_name</a></div><div class="ttdeci">const char * test_port_name</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:162</div></div>
<div class="ttc" id="classAbstract__Socket_html_ab810b9b1683f1d721db344d4d927a07c"><div class="ttname"><a href="classAbstract__Socket.html#ab810b9b1683f1d721db344d4d927a07c">Abstract_Socket::peer_list_length</a></div><div class="ttdeci">int peer_list_length</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:280</div></div>
<div class="ttc" id="classAbstract__Socket_html_a1396b5897a4d63b3c70f6ae4b44f45ea"><div class="ttname"><a href="classAbstract__Socket.html#a1396b5897a4d63b3c70f6ae4b44f45ea">Abstract_Socket::server_backlog</a></div><div class="ttdeci">int server_backlog</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:277</div></div>
<div class="ttc" id="classAbstract__Socket_html_a76c0ddfc941aba36e63ab828a83faf51"><div class="ttname"><a href="classAbstract__Socket.html#a76c0ddfc941aba36e63ab828a83faf51">Abstract_Socket::get_local_host_name</a></div><div class="ttdeci">const char * get_local_host_name()</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:146</div></div>
<div class="ttc" id="classAbstract__Socket_html_a0a782ab21447e1547955f4d34ae1e426"><div class="ttname"><a href="classAbstract__Socket.html#a0a782ab21447e1547955f4d34ae1e426">Abstract_Socket::get_ai_family</a></div><div class="ttdeci">const int & get_ai_family() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:152</div></div>
<div class="ttc" id="classPacketHeaderDescr_html_acb12ebdfdadaee8dfc85097c07048a97"><div class="ttname"><a href="classPacketHeaderDescr.html#acb12ebdfdadaee8dfc85097c07048a97">PacketHeaderDescr::byte_order</a></div><div class="ttdeci">HeaderByteOrder byte_order</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:54</div></div>
<div class="ttc" id="classAbstract__Socket_html_a2d0648542b069850b1952ddf894dcf5c"><div class="ttname"><a href="classAbstract__Socket.html#a2d0648542b069850b1952ddf894dcf5c">Abstract_Socket::get_local_addr</a></div><div class="ttdeci">const struct sockaddr_in & get_local_addr()</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:151</div></div>
<div class="ttc" id="classAbstract__Socket_html_a9ef2b661e76f02afa66076c4dcd0a370"><div class="ttname"><a href="classAbstract__Socket.html#a9ef2b661e76f02afa66076c4dcd0a370">Abstract_Socket::get_use_connection_ASPs</a></div><div class="ttdeci">bool get_use_connection_ASPs() const</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:135</div></div>
<div class="ttc" id="classAbstract__Socket_html_a8b84f58aeb0192b8973c7280d1f5cd84"><div class="ttname"><a href="classAbstract__Socket.html#a8b84f58aeb0192b8973c7280d1f5cd84">Abstract_Socket::peer_list_root</a></div><div class="ttdeci">as_client_struct ** peer_list_root</div><div class="ttdef"><b>Definition:</b> Abstract_Socket.hh:283</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Apr 4 2018 14:16:23 for ETSI STF525 / Internal Testing test suite by  <a href="http://www.doxygen.org/index.html">