Welcome to mirror list, hosted at ThFree Co, Russian Federation.

nx__session_8c_source.html « public - gitlab.com/Remmina/remminadoc.gitlab.io.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d5c9dcee9bd537082dec2719bac48b4fa140c63e (plain)
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<!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>Remmina - The GTK+ Remote Desktop Client: nx_session.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="org.remmina.Remmina.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Remmina - The GTK+ Remote Desktop Client
   &#160;<span id="projectnumber">v1.4.19</span>
   </div>
   <div id="projectbrief">Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('nx__session_8c_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">nx_session.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="nx__session_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright (C) 2010 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright (C) 2016-2021 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * Boston, MA  02110-1301, USA.</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *  permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  for all of the code used other than OpenSSL. *  If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  version of the file(s), but you are not obligated to do so. *  If you</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *  version. *  If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *  files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &lt;pthread.h&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__plugin_8h.html">common/remmina_plugin.h</a>&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;glib/gstdio.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#define LIBSSH_STATIC 1</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &lt;libssh/libssh.h&gt;</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="nx__session_8h.html">nx_session.h</a>&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">/* Some missing stuff in libssh */</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#define REMMINA_SSH_TYPE_DSS 1</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#define REMMINA_SSH_TYPE_RSA 2</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="nx__session_8c.html#ad3ab1f08fffd57b68fa36360c7ef8135">   49</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="nx__session_8c.html#ad3ab1f08fffd57b68fa36360c7ef8135">remmina_get_keytype</a>(<span class="keyword">const</span> gchar *private_key_file, gint *keytype, gboolean *encrypted)</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    FILE *fp;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    gchar buf1[100], buf2[100];</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keywordflow">if</span> ((fp = g_fopen(private_key_file, <span class="stringliteral">&quot;r&quot;</span>)) == NULL) {</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    }</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordflow">if</span> (!fgets(buf1, <span class="keyword">sizeof</span>(buf1), fp) || !fgets(buf2, <span class="keyword">sizeof</span>(buf2), fp)) {</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        fclose(fp);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    }</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    fclose(fp);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">if</span> (strstr(buf1, <span class="stringliteral">&quot;BEGIN RSA&quot;</span>))</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        *keytype = REMMINA_SSH_TYPE_RSA;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strstr(buf1, <span class="stringliteral">&quot;BEGIN DSA&quot;</span>))</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        *keytype = REMMINA_SSH_TYPE_DSS;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    *encrypted = (strstr(buf2, <span class="stringliteral">&quot;ENCRYPTED&quot;</span>) ? TRUE : FALSE);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;}</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment">/*****/</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a2dc3db8078c966530a0790f208c9148c">   78</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar <a class="code" href="nx__session_8c.html#a2dc3db8078c966530a0790f208c9148c">nx_default_private_key</a>[] = <span class="stringliteral">&quot;-----BEGIN DSA PRIVATE KEY-----\n&quot;</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;                          <span class="stringliteral">&quot;MIIBuwIBAAKBgQCXv9AzQXjxvXWC1qu3CdEqskX9YomTfyG865gb4D02ZwWuRU/9\n&quot;</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;                          <span class="stringliteral">&quot;C3I9/bEWLdaWgJYXIcFJsMCIkmWjjeSZyTmeoypI1iLifTHUxn3b7WNWi8AzKcVF\n&quot;</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;                          <span class="stringliteral">&quot;aBsBGiljsop9NiD1mEpA0G+nHHrhvTXz7pUvYrsrXcdMyM6rxqn77nbbnwIVALCi\n&quot;</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;                          <span class="stringliteral">&quot;xFdHZADw5KAVZI7r6QatEkqLAoGBAI4L1TQGFkq5xQ/nIIciW8setAAIyrcWdK/z\n&quot;</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;                          <span class="stringliteral">&quot;5/ZPeELdq70KDJxoLf81NL/8uIc4PoNyTRJjtT3R4f8Az1TsZWeh2+ReCEJxDWgG\n&quot;</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                          <span class="stringliteral">&quot;fbk2YhRqoQTtXPFsI4qvzBWct42WonWqyyb1bPBHk+JmXFscJu5yFQ+JUVNsENpY\n&quot;</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                          <span class="stringliteral">&quot;+Gkz3HqTAoGANlgcCuA4wrC+3Cic9CFkqiwO/Rn1vk8dvGuEQqFJ6f6LVfPfRTfa\n&quot;</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                          <span class="stringliteral">&quot;QU7TGVLk2CzY4dasrwxJ1f6FsT8DHTNGnxELPKRuLstGrFY/PR7KeafeFZDf+fJ3\n&quot;</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                          <span class="stringliteral">&quot;mbX5nxrld3wi5titTnX+8s4IKv29HJguPvOK/SI7cjzA+SqNfD7qEo8CFDIm1xRf\n&quot;</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;                          <span class="stringliteral">&quot;8xAPsSKs6yZ6j1FNklfu\n&quot;</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;                          <span class="stringliteral">&quot;-----END DSA PRIVATE KEY-----\n&quot;</span>;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="nx__session_8c.html#ab16725d4a1ce169180b759b66492fc1d">   91</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar <a class="code" href="nx__session_8c.html#ab16725d4a1ce169180b759b66492fc1d">nx_hello_server_msg</a>[] = <span class="stringliteral">&quot;hello nxserver - version &quot;</span>;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html">   93</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct___remmina_n_x_session.html">_RemminaNXSession</a> {</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="comment">/* Common SSH members */</span></div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">   95</a></span>&#160;    ssh_session <a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">   96</a></span>&#160;    ssh_channel <a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a3fd55eec41ac937d5f92b76af7112dac">   97</a></span>&#160;    gchar *<a class="code" href="struct___remmina_n_x_session.html#a3fd55eec41ac937d5f92b76af7112dac">server</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">   98</a></span>&#160;    gchar *<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">   99</a></span>&#160;    <a class="code" href="nx__session_8h.html#ab3c48efc4625d0f41dc99a6e383943a8">RemminaNXLogCallback</a> <a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a>;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="comment">/* Tunnel related members */</span></div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">  102</a></span>&#160;    pthread_t <a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">  103</a></span>&#160;    gboolean <a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a>;</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">  104</a></span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a>;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="comment">/* NX related members */</span></div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">  107</a></span>&#160;    GHashTable *<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a>;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">  109</a></span>&#160;    GString *<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>;</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">  110</a></span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">response_pos</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">  111</a></span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">  112</a></span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">  113</a></span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a>;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">  115</a></span>&#160;    gchar *<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a>;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#ae7db217f1b651367e3f2b99d2823c22a">  116</a></span>&#160;    gchar *<a class="code" href="struct___remmina_n_x_session.html#ae7db217f1b651367e3f2b99d2823c22a">session_id</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a792e500d6555092699d0a1ad117f627f">  117</a></span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a792e500d6555092699d0a1ad117f627f">session_display</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#ae3d1942fc8672cb8e1ad62e26ae162c5">  118</a></span>&#160;    gchar *<a class="code" href="struct___remmina_n_x_session.html#ae3d1942fc8672cb8e1ad62e26ae162c5">proxy_cookie</a>;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#acb432c33574cfe82012c70d34a495b82">  120</a></span>&#160;    gboolean <a class="code" href="struct___remmina_n_x_session.html#acb432c33574cfe82012c70d34a495b82">allow_start</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">  121</a></span>&#160;    GtkListStore *<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">  122</a></span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a>;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">  124</a></span>&#160;    GPid <a class="code" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">proxy_pid</a>;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="struct___remmina_n_x_session.html#a2b4b40924bf991f5c889a90ee7fd48b4">  125</a></span>&#160;    guint <a class="code" href="struct___remmina_n_x_session.html#a2b4b40924bf991f5c889a90ee7fd48b4">proxy_watch_source</a>;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;};</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a>*</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a33e8f6637275c331c86f321bf1da448c">  129</a></span>&#160;<a class="code" href="nx__session_8c.html#a33e8f6637275c331c86f321bf1da448c">remmina_nx_session_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;{</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    nx = g_new0(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a>, 1);</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a> = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a> = g_string_new(NULL);</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a> = -1;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a> = 1;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a> = -1;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keywordflow">return</span> nx;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="nx__session_8h.html#aa7cec91dde56b12471bbe8acd451d9d3">  145</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#aa7cec91dde56b12471bbe8acd451d9d3">remmina_nx_session_free</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    pthread_t <a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a>;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a2b4b40924bf991f5c889a90ee7fd48b4">proxy_watch_source</a>) {</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        g_source_remove(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a2b4b40924bf991f5c889a90ee7fd48b4">proxy_watch_source</a>);</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a2b4b40924bf991f5c889a90ee7fd48b4">proxy_watch_source</a> = 0;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    }</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">proxy_pid</a>) {</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        kill(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">proxy_pid</a>, SIGTERM);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        g_spawn_close_pid(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">proxy_pid</a>);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">proxy_pid</a> = 0;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    }</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    thread = nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a>;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="keywordflow">if</span> (thread) {</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> = FALSE;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        pthread_cancel(thread);</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        pthread_join(thread, NULL);</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a> = 0;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    }</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>) {</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        ssh_channel_close(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        ssh_channel_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>);</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    }</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a> &gt;= 0) {</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        close(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a>);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a> = -1;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    }</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a3fd55eec41ac937d5f92b76af7112dac">server</a>);</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>);</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    g_hash_table_destroy(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a>);</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    g_string_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>, TRUE);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a>);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae7db217f1b651367e3f2b99d2823c22a">session_id</a>);</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae3d1942fc8672cb8e1ad62e26ae162c5">proxy_cookie</a>);</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>) {</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        g_object_unref(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>);</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a> = NULL;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    }</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>) {</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        ssh_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a> = NULL;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    }</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    g_free(nx);</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;}</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="nx__session_8c.html#abe9c344eaf302b01759e5bd305cb5abc">  194</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#abe9c344eaf302b01759e5bd305cb5abc">remmina_nx_session_set_error</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *fmt)</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;{</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keyword">const</span> gchar *err;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>)</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    err = ssh_get_error(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a> = g_strdup_printf(fmt, err);</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;}</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">  205</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *fmt, ...)</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;{</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    va_list args;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>) g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>);</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    va_start(args, fmt);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a> = g_strdup_vprintf(fmt, args);</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    va_end(args);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;}</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="nx__session_8h.html#aa02aea77cb6428ea4eebddc0d80217e9">  216</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#aa02aea77cb6428ea4eebddc0d80217e9">remmina_nx_session_has_error</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;{</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="keywordflow">return</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a> != NULL);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;}</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="keyword">const</span> gchar*</div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="nx__session_8h.html#ae4e7f359af598b707927c162c3c37e1e">  223</a></span>&#160;<a class="code" href="nx__session_8c.html#ae4e7f359af598b707927c162c3c37e1e">remmina_nx_session_get_error</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;{</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordflow">return</span> nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;}</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a0279cdfc0ad8129fcb3e1cc26297f866">  229</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a0279cdfc0ad8129fcb3e1cc26297f866">remmina_nx_session_clear_error</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;{</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>) {</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;        g_free(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a>);</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a> = NULL;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    }</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;}</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a36da737bdb6708e5e5e85437cab112f9">  238</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a36da737bdb6708e5e5e85437cab112f9">remmina_nx_session_set_encryption</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, gint <a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a>)</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;{</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a> = <a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a>;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;}</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="nx__session_8h.html#ac97d379b04df53ca7dc166676fcbffb5">  244</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#ac97d379b04df53ca7dc166676fcbffb5">remmina_nx_session_set_localport</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, gint <a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a>)</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;{</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a> = <a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a>;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;}</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a8de7b5ae6b68d7e193cd3f55704d32f7">  250</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a8de7b5ae6b68d7e193cd3f55704d32f7">remmina_nx_session_set_log_callback</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <a class="code" href="nx__session_8h.html#ab3c48efc4625d0f41dc99a6e383943a8">RemminaNXLogCallback</a> <a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a>)</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;{</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a> = <a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a>;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;}</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a880c07dbd498746d06490063159baa4c">  256</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="nx__session_8c.html#a880c07dbd498746d06490063159baa4c">remmina_nx_session_get_response</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;{</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="keyword">struct </span>timeval timeout;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    ssh_channel ch[2];</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    gchar *buffer;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    gint len;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    gint is_stderr;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    timeout.tv_sec = 60;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    timeout.tv_usec = 0;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    ch[0] = nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    ch[1] = NULL;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    ssh_channel_select(ch, NULL, NULL, &amp;timeout);</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    is_stderr = 0;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    <span class="keywordflow">while</span> (is_stderr &lt;= 1) {</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        len = ssh_channel_poll(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>, is_stderr);</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        <span class="keywordflow">if</span> (len == SSH_ERROR) {</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;            <a class="code" href="nx__session_8c.html#abe9c344eaf302b01759e5bd305cb5abc">remmina_nx_session_set_error</a>(nx, <span class="stringliteral">&quot;Error reading channel: %s&quot;</span>);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        }</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        <span class="keywordflow">if</span> (len &gt; 0)</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;        is_stderr++;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    }</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">if</span> (is_stderr &gt; 1)</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    buffer = g_malloc(<span class="keyword">sizeof</span>(*buffer) * len);</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    len = ssh_channel_read(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>, buffer, len, is_stderr);</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    <span class="keywordflow">if</span> (len &lt;= 0) {</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Channel closed.&quot;</span>);</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    }</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    g_string_append_len(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>, buffer, len);</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    g_free(buffer);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;}</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a1d1f38d0bee83fe75e528a7f157c12c0">  298</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a1d1f38d0bee83fe75e528a7f157c12c0">remmina_nx_session_parse_session_list_line</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *line)</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;{</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    gchar *p1, *p2;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    gchar *val;</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    gint i;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    GtkTreeIter iter;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    p1 = (<span class="keywordtype">char</span>*)line;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="keywordflow">while</span> (*p1 == <span class="charliteral">&#39; &#39;</span>)</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        p1++;</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="keywordflow">if</span> (*p1 == <span class="charliteral">&#39;\0&#39;</span>)</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    gtk_list_store_append(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>, &amp;iter);</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    p1 = (<span class="keywordtype">char</span>*)line;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; 7; i++) {</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        p2 = strchr(p1, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        <span class="keywordflow">if</span> (!p2)</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;        val = g_strndup(p1, (gint)(p2 - p1));</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        <span class="keywordflow">switch</span> (i) {</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;            gtk_list_store_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>, &amp;iter, <a class="code" href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a3796111b5b1f37b1b9584dfa7c63b8ca">REMMINA_NX_SESSION_COLUMN_DISPLAY</a>, val, -1);</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;            gtk_list_store_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>, &amp;iter, <a class="code" href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a8d0dda661a8ed92c2d07ea355cac3431">REMMINA_NX_SESSION_COLUMN_TYPE</a>, val, -1);</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        <span class="keywordflow">case</span> 2:</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;            gtk_list_store_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>, &amp;iter, <a class="code" href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a66187a2e641c2817ecdd7d271a4dee9d">REMMINA_NX_SESSION_COLUMN_ID</a>, val, -1);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;        <span class="keywordflow">case</span> 6:</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;            gtk_list_store_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>, &amp;iter, <a class="code" href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a9566013426ff135eb5cd189124a3b4a9">REMMINA_NX_SESSION_COLUMN_STATUS</a>, val, -1);</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        }</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;        g_free(val);</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="keywordflow">while</span> (*p2 == <span class="charliteral">&#39; &#39;</span>)</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;            p2++;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        p1 = p2;</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    }</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    <span class="comment">/* The last name column might contains space so it’s not in the above loop. We simply rtrim it here. */</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    i = strlen(p1);</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <span class="keywordflow">if</span> (i &lt; 1)</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    p2 = p1 + i - 1;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">while</span> (*p2 == <span class="charliteral">&#39; &#39;</span> &amp;&amp; p2 &gt; p1)</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;        p2--;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    val = g_strndup(p1, (gint)(p2 - p1 + 1));</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    gtk_list_store_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>, &amp;iter, <a class="code" href="nx__session_8h.html#a16685eea158879e41b101ca3634de462ad61cf9ec71b1f06ceaac651ee1ccd912">REMMINA_NX_SESSION_COLUMN_NAME</a>, val, -1);</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    g_free(val);</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;}</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a1a72f258cb806b8f1150c4719a68af28">  354</a></span>&#160;<span class="keyword">static</span> gint <a class="code" href="nx__session_8c.html#a1a72f258cb806b8f1150c4719a68af28">remmina_nx_session_parse_line</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *line, gchar **valueptr)</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;{</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    gchar *s;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    gchar *ptr;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    *valueptr = NULL;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="comment">/* Get the server version from the initial line */</span></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="keywordflow">if</span> (!nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a>) {</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        s = g_ascii_strdown(line, -1);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        ptr = strstr(s, <a class="code" href="nx__session_8c.html#ab16725d4a1ce169180b759b66492fc1d">nx_hello_server_msg</a>);</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        <span class="keywordflow">if</span> (!ptr) {</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;            <span class="comment">/* Try to use a default version */</span></div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;            nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a> = g_strdup(<span class="stringliteral">&quot;3.3.0&quot;</span>);</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;            nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a> = g_strdup(ptr + strlen(<a class="code" href="nx__session_8c.html#ab16725d4a1ce169180b759b66492fc1d">nx_hello_server_msg</a>));</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;            ptr = strchr(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a>, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;            <span class="keywordflow">if</span> (ptr)</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;                *ptr = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;            <span class="comment">/* NoMachine NX append a dash+subversion. Need to be removed. */</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;            ptr = strchr(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a>, <span class="charliteral">&#39;-&#39;</span>);</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;            <span class="keywordflow">if</span> (ptr)</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;                *ptr = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        }</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        g_free(s);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        <span class="keywordflow">return</span> nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    }</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    <span class="keywordflow">if</span> (sscanf(line, <span class="stringliteral">&quot;NX&gt; %i &quot;</span>, &amp;status) &lt; 1) {</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;        <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> &amp;&amp; nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>) {</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;            <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> == 1 &amp;&amp; strncmp(line, <span class="stringliteral">&quot;----&quot;</span>, 4) == 0) {</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> = 2;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;            } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> == 2) {</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;                <a class="code" href="nx__session_8c.html#a1d1f38d0bee83fe75e528a7f157c12c0">remmina_nx_session_parse_session_list_line</a>(nx, line);</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;            }</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;            <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        }</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        <span class="keywordflow">return</span> nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    }</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> = 0;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a> = <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    ptr = strchr(line, <span class="charliteral">&#39;:&#39;</span>);</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="keywordflow">if</span> (!ptr)</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    *valueptr = ptr + 2;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;}</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;<span class="keyword">static</span> gchar*</div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="nx__session_8c.html#aa200231bf9d2f3e00a8f92bacddbe09f">  406</a></span>&#160;<a class="code" href="nx__session_8c.html#aa200231bf9d2f3e00a8f92bacddbe09f">remmina_nx_session_get_line</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;{</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    gchar *line;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    gchar *pos, *ptr;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    gint len;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    gint l;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">response_pos</a> &gt;= nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>-&gt;len)</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    pos = nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>-&gt;str + nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">response_pos</a>;</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="keywordflow">if</span> ((ptr = strchr(pos, <span class="charliteral">&#39;\n&#39;</span>)) == NULL)</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    len = ((gint)(ptr - pos)) + 1;</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    line = g_strndup(pos, len - 1);</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    l = strlen(line);</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    <span class="keywordflow">if</span> (l &gt; 0 &amp;&amp; line[l - 1] == <span class="charliteral">&#39;\r&#39;</span>) {</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        line[l - 1] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    }</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">response_pos</a> += len;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <span class="keywordflow">return</span> line;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;}</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a625f0605bf73f0465866b26cf7563eac">  434</a></span>&#160;<span class="keyword">static</span> gint <a class="code" href="nx__session_8c.html#a625f0605bf73f0465866b26cf7563eac">remmina_nx_session_parse_response</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;{</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    gchar *line;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    gchar *pos, *p;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a> = -1;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">response_pos</a> &gt;= nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>-&gt;len)</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    <span class="keywordflow">while</span> ((line = <a class="code" href="nx__session_8c.html#aa200231bf9d2f3e00a8f92bacddbe09f">remmina_nx_session_get_line</a>(nx)) != NULL) {</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;        <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a>)</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;            nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a>(line);</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;        status = <a class="code" href="nx__session_8c.html#a1a72f258cb806b8f1150c4719a68af28">remmina_nx_session_parse_line</a>(nx, line, &amp;p);</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        <span class="keywordflow">if</span> (status == 500) {</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;            <span class="comment">/* 500: Last operation failed. Should be ignored. */</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (status &gt;= 400 &amp;&amp; status &lt;= 599) {</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;            <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;%s&quot;</span>, line);</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;            <span class="keywordflow">switch</span> (status) {</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;            <span class="keywordflow">case</span> 127: <span class="comment">/* Session list */</span></div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> = 1;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;            <span class="keywordflow">case</span> 148: <span class="comment">/* Server capacity not reached for user xxx */</span></div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> = 0;</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#acb432c33574cfe82012c70d34a495b82">allow_start</a> = TRUE;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;            <span class="keywordflow">case</span> 700:</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae7db217f1b651367e3f2b99d2823c22a">session_id</a> = g_strdup(p);</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;            <span class="keywordflow">case</span> 705:</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a792e500d6555092699d0a1ad117f627f">session_display</a> = atoi(p);</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;            <span class="keywordflow">case</span> 701:</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae3d1942fc8672cb8e1ad62e26ae162c5">proxy_cookie</a> = g_strdup(p);</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;            }</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        }</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;        g_free(line);</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a> = <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    }</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    pos = nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>-&gt;str + nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">response_pos</a>;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    <span class="keywordflow">if</span> (sscanf(pos, <span class="stringliteral">&quot;NX&gt; %i &quot;</span>, &amp;status) &lt; 1) {</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        status = nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;        <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a>)</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;            nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">log_callback</a>(pos);</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">response_pos</a> += 8;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    }</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a> = -1;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;}</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="nx__session_8c.html#ad6ae8dc606c87632bb8b8b477509bcea">  490</a></span>&#160;<span class="keyword">static</span> gint <a class="code" href="nx__session_8c.html#ad6ae8dc606c87632bb8b8b477509bcea">remmina_nx_session_expect_status2</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, gint <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>, gint status2)</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;{</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>;</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <span class="keywordflow">while</span> ((response = <a class="code" href="nx__session_8c.html#a625f0605bf73f0465866b26cf7563eac">remmina_nx_session_parse_response</a>(nx)) != status &amp;&amp; response != status2) {</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        <span class="keywordflow">if</span> (response == 999)</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#a880c07dbd498746d06490063159baa4c">remmina_nx_session_get_response</a>(nx))</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;            <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    }</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">session_list_state</a> = 0;</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="nx__session_8c.html#aa02aea77cb6428ea4eebddc0d80217e9">remmina_nx_session_has_error</a>(nx))</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;}</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;</div><div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">  507</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, gint <a class="code" href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">status</a>)</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;{</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="keywordflow">return</span> (<a class="code" href="nx__session_8c.html#ad6ae8dc606c87632bb8b8b477509bcea">remmina_nx_session_expect_status2</a>(nx, status, 0) == status);</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;}</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">  513</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *cmdfmt, ...)</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;{</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    va_list args;</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    gchar *cmd;</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    va_start(args, cmdfmt);</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    cmd = g_strdup_vprintf(cmdfmt, args);</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    ssh_channel_write(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>, cmd, strlen(cmd));</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    g_free(cmd);</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    ssh_set_fd_towrite(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>);</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    ssh_channel_write(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>, <span class="stringliteral">&quot;\n&quot;</span>, 1);</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    va_end(args);</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;}</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a6d58e7958d408e2a0abd015688ba912b">  529</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#a6d58e7958d408e2a0abd015688ba912b">remmina_nx_session_open</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *<a class="code" href="struct___remmina_n_x_session.html#a3fd55eec41ac937d5f92b76af7112dac">server</a>, guint port, <span class="keyword">const</span> gchar *private_key_file,</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;                 <a class="code" href="nx__session_8h.html#ab69a075e55bbed5a8104a6c319e9a20c">RemminaNXPassphraseCallback</a> passphrase_func, gpointer userdata)</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;{</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    gint ret;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    ssh_key priv_key;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    gint keytype;</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    gboolean encrypted;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    gchar *passphrase = NULL;</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a> = ssh_new();</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    ssh_options_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>, SSH_OPTIONS_HOST, server);</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    ssh_options_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>, SSH_OPTIONS_PORT, &amp;port);</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    ssh_options_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>, SSH_OPTIONS_USER, <span class="stringliteral">&quot;nx&quot;</span>);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="keywordflow">if</span> (private_key_file &amp;&amp; private_key_file[0]) {</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#ad3ab1f08fffd57b68fa36360c7ef8135">remmina_get_keytype</a>(private_key_file, &amp;keytype, &amp;encrypted)) {</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;            <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Invalid private key file.&quot;</span>);</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;        }</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;        <span class="keywordflow">if</span> (encrypted &amp;&amp; !passphrase_func(&amp;passphrase, userdata)) {</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        }</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;        <span class="keywordflow">if</span> ( ssh_pki_import_privkey_file(private_key_file, (passphrase ? passphrase : <span class="stringliteral">&quot;&quot;</span>), NULL, NULL, &amp;priv_key) != SSH_OK ) {</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;            <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Error importing private key from file.&quot;</span>);</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;            g_free(passphrase);</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;        }</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;        g_free(passphrase);</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;        <span class="comment">/* Use NoMachine’s default nx private key */</span></div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        <span class="keywordflow">if</span> ( ssh_pki_import_privkey_base64(<a class="code" href="nx__session_8c.html#a2dc3db8078c966530a0790f208c9148c">nx_default_private_key</a>, NULL, NULL, NULL, &amp;priv_key) != SSH_OK ) {</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;            <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Failed to import NX default private key.&quot;</span>);</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        }</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    }</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    <span class="keywordflow">if</span> (ssh_connect(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>)) {</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;        ssh_key_free(priv_key);</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;        <a class="code" href="nx__session_8c.html#abe9c344eaf302b01759e5bd305cb5abc">remmina_nx_session_set_error</a>(nx, <span class="stringliteral">&quot;Failed to startup SSH session: %s&quot;</span>);</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    }</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    ret = ssh_userauth_publickey(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>, NULL, priv_key);</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    ssh_key_free(priv_key);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    <span class="keywordflow">if</span> (ret != SSH_AUTH_SUCCESS) {</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;        <a class="code" href="nx__session_8c.html#abe9c344eaf302b01759e5bd305cb5abc">remmina_nx_session_set_error</a>(nx, <span class="stringliteral">&quot;NX SSH authentication failed: %s&quot;</span>);</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    }</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    <span class="keywordflow">if</span> ((nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a> = ssh_channel_new(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>)) == NULL || ssh_channel_open_session(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>) != SSH_OK) {</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    }</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <span class="keywordflow">if</span> (ssh_channel_request_shell(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>) != SSH_OK) {</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    }</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="comment">/* NX server starts the session with an initial 105 status */</span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, 105))</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    <span class="comment">/* Say hello to the NX server */</span></div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, <span class="stringliteral">&quot;HELLO NXCLIENT - Version %s&quot;</span>, nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">version</a>);</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, 105))</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    <span class="comment">/* Set the NX session environment */</span></div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, <span class="stringliteral">&quot;SET SHELL_MODE SHELL&quot;</span>);</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, 105))</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, <span class="stringliteral">&quot;SET AUTH_MODE PASSWORD&quot;</span>);</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, 105))</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a3fd55eec41ac937d5f92b76af7112dac">server</a> = g_strdup(server);</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;}</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="nx__session_8h.html#aa912b495508a0f74fe8e121c5b532f6b">  611</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#aa912b495508a0f74fe8e121c5b532f6b">remmina_nx_session_login</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *username, <span class="keyword">const</span> gchar *password)</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;{</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    gint <a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    <span class="comment">/* Login to the NX server */</span></div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, <span class="stringliteral">&quot;login&quot;</span>);</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, 101))</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, username);</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    <span class="comment">/* NoMachine Testdrive does not prompt for password, in which case 105 response is received without 102 */</span></div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    response = <a class="code" href="nx__session_8c.html#ad6ae8dc606c87632bb8b8b477509bcea">remmina_nx_session_expect_status2</a>(nx, 102, 105);</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    <span class="keywordflow">if</span> (response == 102) {</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, password);</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, 105))</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;            <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (response != 105) {</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    }</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;}</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="nx__session_8h.html#ae4e00fb7501df9af20b7fdc61331c347">  634</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *name, <span class="keyword">const</span> gchar *valuefmt, ...)</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;{</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    va_list args;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    gchar *value;</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    va_start(args, valuefmt);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    value = g_strdup_vprintf(valuefmt, args);</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    g_hash_table_insert(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a>, g_strdup(name), value);</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    va_end(args);</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;}</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;</div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">  646</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">remmina_nx_session_send_session_command</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, <span class="keyword">const</span> gchar *cmd_type, gint <a class="code" href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">response</a>)</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;{</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    GString *cmd;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    GHashTableIter iter;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    gchar *key, *value;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    cmd = g_string_new(cmd_type);</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    g_hash_table_iter_init(&amp;iter, nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a>);</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;    <span class="keywordflow">while</span> (g_hash_table_iter_next(&amp;iter, (gpointer*)&amp;key, (gpointer*)&amp;value)) {</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;        g_string_append_printf(cmd, <span class="stringliteral">&quot; --%s=\&quot;%s\&quot;&quot;</span>, key, value);</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    }</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, cmd-&gt;str);</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    g_string_free(cmd, TRUE);</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    g_hash_table_remove_all(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a>);</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, response);</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;}</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a128499f3768aae8bc5c233f6fb616a76">  667</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#a128499f3768aae8bc5c233f6fb616a76">remmina_nx_session_list</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;{</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    gboolean ret;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a> == NULL) {</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a> = gtk_list_store_new(<a class="code" href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a6a93837e5235e3ce71188b1cf82774d1">REMMINA_NX_SESSION_N_COLUMNS</a>, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;            G_TYPE_STRING, G_TYPE_STRING);</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;        gtk_list_store_clear(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>);</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    }</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    ret = <a class="code" href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">remmina_nx_session_send_session_command</a>(nx, <span class="stringliteral">&quot;listsession&quot;</span>, 105);</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;}</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a5b9d8589f544d54350a6d96b49275e41">  683</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a5b9d8589f544d54350a6d96b49275e41">remmina_nx_session_set_tree_view</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, GtkTreeView *tree)</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;{</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    gtk_tree_view_set_model(tree, GTK_TREE_MODEL(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>));</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;}</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;</div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="nx__session_8h.html#aadff42154c92ef10a80b403cadec5c1b">  689</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#aadff42154c92ef10a80b403cadec5c1b">remmina_nx_session_iter_first</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, GtkTreeIter *iter)</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;{</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    <span class="keywordflow">if</span> (!nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>)</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    <span class="keywordflow">return</span> gtk_tree_model_get_iter_first(GTK_TREE_MODEL(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>), iter);</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;}</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a7d021133105bd538af31817eff263324">  697</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#a7d021133105bd538af31817eff263324">remmina_nx_session_iter_next</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, GtkTreeIter *iter)</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;{</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;    <span class="keywordflow">if</span> (!nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>)</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    <span class="keywordflow">return</span> gtk_tree_model_iter_next(GTK_TREE_MODEL(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>), iter);</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;}</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;gchar*</div><div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a5d6f81a44339efa85a0048f759207825">  706</a></span>&#160;<a class="code" href="nx__session_8c.html#a5d6f81a44339efa85a0048f759207825">remmina_nx_session_iter_get</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, GtkTreeIter *iter, gint column)</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;{</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    gchar *val;</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    gtk_tree_model_get(GTK_TREE_MODEL(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>), iter, column, &amp;val, -1);</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <span class="keywordflow">return</span> val;</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;}</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a49f2ddc5baaf992f7a39f3d8f6ab061d">  715</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#a49f2ddc5baaf992f7a39f3d8f6ab061d">remmina_nx_session_iter_set</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, GtkTreeIter *iter, gint column, <span class="keyword">const</span> gchar *data)</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;{</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    gtk_list_store_set(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">session_list</a>, iter, column, data, -1);</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;}</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a13c14492f22eda65b325337be14aa3ef">  721</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#a13c14492f22eda65b325337be14aa3ef">remmina_nx_session_allow_start</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;{</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;    <span class="keywordflow">return</span> nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#acb432c33574cfe82012c70d34a495b82">allow_start</a>;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;}</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;</div><div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="nx__session_8c.html#aa1398fd24f8083867db1f8f392638bf0">  727</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#aa1398fd24f8083867db1f8f392638bf0">remmina_nx_session_add_common_parameters</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;{</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    gchar *value;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    <span class="comment">/* Add fixed session parameters for startsession */</span></div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;cache&quot;</span>, <span class="stringliteral">&quot;16M&quot;</span>);</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;images&quot;</span>, <span class="stringliteral">&quot;64M&quot;</span>);</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;render&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>);</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;backingstore&quot;</span>, <span class="stringliteral">&quot;1&quot;</span>);</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;agent_server&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;agent_user&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;agent_password&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    value = g_strdup_printf(<span class="stringliteral">&quot;%i&quot;</span>, nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a>);</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <a class="code" href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a>(nx, <span class="stringliteral">&quot;encryption&quot;</span>, value);</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    g_free(value);</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;}</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;</div><div class="line"><a name="l00746"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a2123ed756f82d65c5c6f4062606803c6">  746</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#a2123ed756f82d65c5c6f4062606803c6">remmina_nx_session_start</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;{</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <a class="code" href="nx__session_8c.html#aa1398fd24f8083867db1f8f392638bf0">remmina_nx_session_add_common_parameters</a>(nx);</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">remmina_nx_session_send_session_command</a>(nx, <span class="stringliteral">&quot;startsession&quot;</span>, 105);</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;}</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;</div><div class="line"><a name="l00753"></a><span class="lineno"><a class="line" href="nx__session_8h.html#aacd5938d1a58872644a3a68bc1cac66d">  753</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#aacd5938d1a58872644a3a68bc1cac66d">remmina_nx_session_attach</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;{</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    <a class="code" href="nx__session_8c.html#aa1398fd24f8083867db1f8f392638bf0">remmina_nx_session_add_common_parameters</a>(nx);</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">remmina_nx_session_send_session_command</a>(nx, <span class="stringliteral">&quot;attachsession&quot;</span>, 105);</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;}</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a0de55cb12904503503d7d9ab3338aa33">  760</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#a0de55cb12904503503d7d9ab3338aa33">remmina_nx_session_restore</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;{</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    <a class="code" href="nx__session_8c.html#aa1398fd24f8083867db1f8f392638bf0">remmina_nx_session_add_common_parameters</a>(nx);</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">remmina_nx_session_send_session_command</a>(nx, <span class="stringliteral">&quot;restoresession&quot;</span>, 105);</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;}</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="nx__session_8h.html#ad217fb5180a6ed57c47f174a0b20cf8c">  767</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#ad217fb5180a6ed57c47f174a0b20cf8c">remmina_nx_session_terminate</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;{</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">remmina_nx_session_send_session_command</a>(nx, <span class="stringliteral">&quot;terminate&quot;</span>, 105);</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;}</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a4bce96ad49020acbbbbe09c3eefa97a6">  773</a></span>&#160;<span class="keyword">static</span> gpointer <a class="code" href="nx__session_8c.html#a4bce96ad49020acbbbbe09c3eefa97a6">remmina_nx_session_tunnel_main_thread</a>(gpointer data)</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;{</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    <a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx = (<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a>*)data;</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    gchar *ptr;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    ssize_t len = 0, lenw = 0;</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    fd_set <span class="keyword">set</span>;</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    <span class="keyword">struct </span>timeval timeout;</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    ssh_channel channels[2];</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    ssh_channel channels_out[2];</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    gint sock;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    gint ret;</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;    gchar buffer[10240];</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    gchar socketbuffer[10240];</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    gchar *socketbuffer_ptr = NULL;</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    gint socketbuffer_len = 0;</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="comment">/* Accept a local connection */</span></div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    sock = accept(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a>, NULL, NULL);</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Failed to accept local socket&quot;</span>);</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a> = 0;</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    }</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    close(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a>);</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a> = -1;</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    channels[0] = nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">channel</a>;</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    channels[1] = NULL;</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    <span class="comment">/* Start the tunnel data transmission */</span></div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;    <span class="keywordflow">while</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a>) {</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;        timeout.tv_sec = 1;</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;        timeout.tv_usec = 0;</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;        FD_ZERO(&amp;<span class="keyword">set</span>);</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;        FD_SET(sock, &amp;<span class="keyword">set</span>);</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;        ret = ssh_select(channels, channels_out, sock + 1, &amp;<span class="keyword">set</span>, &amp;timeout);</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;        <span class="keywordflow">if</span> (!nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a>)</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;        <span class="keywordflow">if</span> (ret == SSH_EINTR)</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;        <span class="keywordflow">if</span> (ret == -1)</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;        <span class="keywordflow">if</span> (FD_ISSET(sock, &amp;<span class="keyword">set</span>)) {</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;            len = read(sock, buffer, <span class="keyword">sizeof</span>(buffer));</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;            <span class="keywordflow">if</span> (len == 0)</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> = FALSE;</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len &gt; 0) {</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;                <span class="keywordflow">for</span> (ptr = buffer, lenw = 0; len &gt; 0; len -= lenw, ptr += lenw) {</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;                    ssh_set_fd_towrite(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">session</a>);</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;                    lenw = ssh_channel_write(channels[0], (<span class="keywordtype">char</span>*)ptr, len);</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;                    <span class="keywordflow">if</span> (lenw &lt;= 0) {</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;                        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> = FALSE;</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;                    }</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;                }</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;            }</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;        }</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;        <span class="keywordflow">if</span> (!nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a>)</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;        <span class="keywordflow">if</span> (channels_out[0] &amp;&amp; socketbuffer_len &lt;= 0) {</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;            len = ssh_channel_read_nonblocking(channels_out[0], socketbuffer, <span class="keyword">sizeof</span>(socketbuffer), 0);</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;            <span class="keywordflow">if</span> (len == SSH_ERROR || len == SSH_EOF) {</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;                nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> = FALSE;</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;            } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len &gt; 0) {</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;                socketbuffer_ptr = socketbuffer;</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;                socketbuffer_len = len;</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;                <span class="comment">/* Clean up the stderr buffer in case FreeNX send something there */</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;                len = ssh_channel_read_nonblocking(channels_out[0], buffer, <span class="keyword">sizeof</span>(buffer), 1);</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;                <span class="keywordflow">if</span> (len == SSH_ERROR || len == SSH_EOF) {</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;                    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> = FALSE;</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;                }</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;            }</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;        }</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;        <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> &amp;&amp; socketbuffer_len &gt; 0) {</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;            <span class="keywordflow">for</span> (lenw = 0; socketbuffer_len &gt; 0; socketbuffer_len -= lenw, socketbuffer_ptr += lenw) {</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;                lenw = write(sock, socketbuffer_ptr, socketbuffer_len);</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;                <span class="keywordflow">if</span> (lenw == -1 &amp;&amp; errno == EAGAIN &amp;&amp; nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a>) {</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;                    <span class="comment">/* Sometimes we cannot write to a socket (always EAGAIN), probably because it’s internal</span></div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;<span class="comment">                     * buffer is full. We need read the pending bytes from the socket first. so here we simply</span></div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;<span class="comment">                     * break, leave the buffer there, and continue with other data */</span></div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;                }</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;                <span class="keywordflow">if</span> (lenw &lt;= 0) {</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;                    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> = FALSE;</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;                }</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;            }</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;        }</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    }</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a> = 0;</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;    <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;}</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno"><a class="line" href="nx__session_8h.html#a7373c5ab0ca53f54c493f9e461ae679d">  881</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#a7373c5ab0ca53f54c493f9e461ae679d">remmina_nx_session_tunnel_open</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;{</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    gint port;</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    gint sock;</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    gint sockopt = 1;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    <span class="keyword">struct </span>sockaddr_in sin;</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    <span class="keywordflow">if</span> (!nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a>)</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;        <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, <span class="stringliteral">&quot;bye&quot;</span>);</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a>(nx, 999)) {</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;        <span class="comment">/* Shoud not happen, just in case */</span></div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Server won’t say bye to us?&quot;</span>);</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;    }</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    port = (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a> ? nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a> : nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a792e500d6555092699d0a1ad117f627f">session_display</a>) + 4000;</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    <span class="comment">/* Create the server socket that listens on the local port */</span></div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    sock = socket(AF_INET, SOCK_STREAM, 0);</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Failed to create socket.&quot;</span>);</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    }</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &amp;sockopt, <span class="keyword">sizeof</span>(sockopt));</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    sin.sin_family = AF_INET;</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    sin.sin_port = htons(port);</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    sin.sin_addr.s_addr = inet_addr(<span class="stringliteral">&quot;127.0.0.1&quot;</span>);</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;    <span class="keywordflow">if</span> (bind(sock, (<span class="keyword">struct</span> sockaddr *)&amp;sin, <span class="keyword">sizeof</span>(sin))) {</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Failed to bind on local port.&quot;</span>);</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;        close(sock);</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;    }</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;    <span class="keywordflow">if</span> (listen(sock, 1)) {</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Failed to listen on local port.&quot;</span>);</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;        close(sock);</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;    }</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">server_sock</a> = sock;</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">running</a> = TRUE;</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;    <span class="keywordflow">if</span> (pthread_create(&amp;nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a>, NULL, <a class="code" href="nx__session_8c.html#a4bce96ad49020acbbbbe09c3eefa97a6">remmina_nx_session_tunnel_main_thread</a>, nx)) {</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;Failed to initialize pthread.&quot;</span>);</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">thread</a> = 0;</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    }</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;}</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;<span class="keyword">static</span> gchar*</div><div class="line"><a name="l00937"></a><span class="lineno"><a class="line" href="nx__session_8c.html#a9a98fead7295fa90624d8a494d3570cf">  937</a></span>&#160;<a class="code" href="nx__session_8c.html#a9a98fead7295fa90624d8a494d3570cf">remmina_nx_session_get_proxy_option</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;{</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    <span class="keywordflow">if</span> (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">encryption</a>) {</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;        <span class="keywordflow">return</span> g_strdup_printf(<span class="stringliteral">&quot;nx,session=%s,cookie=%s,id=%s,shmem=1,shpix=1,connect=127.0.0.1:%i&quot;</span>,</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;            (gchar*)g_hash_table_lookup(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a>, <span class="stringliteral">&quot;session&quot;</span>), nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae3d1942fc8672cb8e1ad62e26ae162c5">proxy_cookie</a>,</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;            nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae7db217f1b651367e3f2b99d2823c22a">session_id</a>, (nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a> ? nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">localport</a> : nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a792e500d6555092699d0a1ad117f627f">session_display</a>));</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;        <span class="keywordflow">return</span> g_strdup_printf(<span class="stringliteral">&quot;nx,session=%s,cookie=%s,id=%s,shmem=1,shpix=1,connect=%s:%i&quot;</span>,</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;            (gchar*)g_hash_table_lookup(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">session_parameters</a>, <span class="stringliteral">&quot;session&quot;</span>), nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae3d1942fc8672cb8e1ad62e26ae162c5">proxy_cookie</a>,</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;            nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#ae7db217f1b651367e3f2b99d2823c22a">session_id</a>, nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a3fd55eec41ac937d5f92b76af7112dac">server</a>, nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a792e500d6555092699d0a1ad117f627f">session_display</a>);</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;    }</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;}</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;</div><div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="nx__session_8h.html#ad01b66a877f8c30dc4bdf1ba6f3beac0">  951</a></span>&#160;gboolean <a class="code" href="nx__session_8c.html#ad01b66a877f8c30dc4bdf1ba6f3beac0">remmina_nx_session_invoke_proxy</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx, gint display, GChildWatchFunc exit_func, gpointer user_data)</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;{</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;    gchar *argv[50];</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    gint argc;</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;    GError *<a class="code" href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">error</a> = NULL;</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    gboolean ret;</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;    gchar **envp;</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;    gchar *s;</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;    gint i;</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    <span class="comment">/* Copy all current environment variable, but change DISPLAY. Assume we should always have DISPLAY… */</span></div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    <span class="keywordflow">if</span> (display &gt;= 0) {</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;        envp = g_listenv();</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;        <span class="keywordflow">for</span> (i = 0; envp[i]; i++) {</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;            <span class="keywordflow">if</span> (g_strcmp0(envp[i], <span class="stringliteral">&quot;DISPLAY&quot;</span>) == 0) {</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;                s = g_strdup_printf(<span class="stringliteral">&quot;DISPLAY=:%i&quot;</span>, display);</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;                s = g_strdup_printf(<span class="stringliteral">&quot;%s=%s&quot;</span>, envp[i], g_getenv(envp[i]));</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;            }</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;            g_free(envp[i]);</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;            envp[i] = s;</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;        }</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;        envp = NULL;</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    }</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;    argc = 0;</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    argv[argc++] = g_strdup(<span class="stringliteral">&quot;nxproxy&quot;</span>);</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    argv[argc++] = g_strdup(<span class="stringliteral">&quot;-S&quot;</span>);</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    argv[argc++] = <a class="code" href="nx__session_8c.html#a9a98fead7295fa90624d8a494d3570cf">remmina_nx_session_get_proxy_option</a>(nx);</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    argv[argc++] = NULL;</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    ret = g_spawn_async(NULL, argv, envp, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &amp;nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">proxy_pid</a>,</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;        &amp;error);</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    g_strfreev(envp);</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; argc; i++)</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;        g_free(argv[i]);</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;    <span class="keywordflow">if</span> (!ret) {</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;        <a class="code" href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a>(nx, <span class="stringliteral">&quot;%s&quot;</span>, error-&gt;message);</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;        <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    }</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    <span class="keywordflow">if</span> (exit_func) {</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;        nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a2b4b40924bf991f5c889a90ee7fd48b4">proxy_watch_source</a> = g_child_watch_add(nx-&gt;<a class="code" href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">proxy_pid</a>, exit_func, user_data);</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    }</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;}</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;</div><div class="line"><a name="l01002"></a><span class="lineno"><a class="line" href="nx__session_8h.html#aaf2a3e4773fb982b8418fd2f147abaea"> 1002</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="nx__session_8c.html#aaf2a3e4773fb982b8418fd2f147abaea">remmina_nx_session_bye</a>(<a class="code" href="struct___remmina_n_x_session.html">RemminaNXSession</a> *nx)</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;{</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    <a class="code" href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a>(nx, <span class="stringliteral">&quot;bye&quot;</span>);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    <a class="code" href="nx__session_8c.html#a880c07dbd498746d06490063159baa4c">remmina_nx_session_get_response</a>(nx);</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;}</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;</div><div class="ttc" id="nx__session_8h_html_a16685eea158879e41b101ca3634de462a9566013426ff135eb5cd189124a3b4a9"><div class="ttname"><a href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a9566013426ff135eb5cd189124a3b4a9">REMMINA_NX_SESSION_COLUMN_STATUS</a></div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00044">nx_session.h:44</a></div></div>
<div class="ttc" id="nx__session_8c_html_a6d58e7958d408e2a0abd015688ba912b"><div class="ttname"><a href="nx__session_8c.html#a6d58e7958d408e2a0abd015688ba912b">remmina_nx_session_open</a></div><div class="ttdeci">gboolean remmina_nx_session_open(RemminaNXSession *nx, const gchar *server, guint port, const gchar *private_key_file, RemminaNXPassphraseCallback passphrase_func, gpointer userdata)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00529">nx_session.c:529</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a2b4b40924bf991f5c889a90ee7fd48b4"><div class="ttname"><a href="struct___remmina_n_x_session.html#a2b4b40924bf991f5c889a90ee7fd48b4">_RemminaNXSession::proxy_watch_source</a></div><div class="ttdeci">guint proxy_watch_source</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00125">nx_session.c:125</a></div></div>
<div class="ttc" id="nx__session_8c_html_a8de7b5ae6b68d7e193cd3f55704d32f7"><div class="ttname"><a href="nx__session_8c.html#a8de7b5ae6b68d7e193cd3f55704d32f7">remmina_nx_session_set_log_callback</a></div><div class="ttdeci">void remmina_nx_session_set_log_callback(RemminaNXSession *nx, RemminaNXLogCallback log_callback)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00250">nx_session.c:250</a></div></div>
<div class="ttc" id="nx__session_8h_html_a16685eea158879e41b101ca3634de462a66187a2e641c2817ecdd7d271a4dee9d"><div class="ttname"><a href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a66187a2e641c2817ecdd7d271a4dee9d">REMMINA_NX_SESSION_COLUMN_ID</a></div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00043">nx_session.h:43</a></div></div>
<div class="ttc" id="nx__session_8c_html_ac97d379b04df53ca7dc166676fcbffb5"><div class="ttname"><a href="nx__session_8c.html#ac97d379b04df53ca7dc166676fcbffb5">remmina_nx_session_set_localport</a></div><div class="ttdeci">void remmina_nx_session_set_localport(RemminaNXSession *nx, gint localport)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00244">nx_session.c:244</a></div></div>
<div class="ttc" id="nx__session_8c_html_abc225e383dc70c0f6a12baf7b9cc3841"><div class="ttname"><a href="nx__session_8c.html#abc225e383dc70c0f6a12baf7b9cc3841">remmina_nx_session_expect_status</a></div><div class="ttdeci">static gboolean remmina_nx_session_expect_status(RemminaNXSession *nx, gint status)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00507">nx_session.c:507</a></div></div>
<div class="ttc" id="nx__session_8c_html_aaf2a3e4773fb982b8418fd2f147abaea"><div class="ttname"><a href="nx__session_8c.html#aaf2a3e4773fb982b8418fd2f147abaea">remmina_nx_session_bye</a></div><div class="ttdeci">void remmina_nx_session_bye(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l01002">nx_session.c:1002</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html"><div class="ttname"><a href="struct___remmina_n_x_session.html">_RemminaNXSession</a></div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00093">nx_session.c:93</a></div></div>
<div class="ttc" id="nx__session_8c_html_a1a72f258cb806b8f1150c4719a68af28"><div class="ttname"><a href="nx__session_8c.html#a1a72f258cb806b8f1150c4719a68af28">remmina_nx_session_parse_line</a></div><div class="ttdeci">static gint remmina_nx_session_parse_line(RemminaNXSession *nx, const gchar *line, gchar **valueptr)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00354">nx_session.c:354</a></div></div>
<div class="ttc" id="nx__session_8c_html_aacd5938d1a58872644a3a68bc1cac66d"><div class="ttname"><a href="nx__session_8c.html#aacd5938d1a58872644a3a68bc1cac66d">remmina_nx_session_attach</a></div><div class="ttdeci">gboolean remmina_nx_session_attach(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00753">nx_session.c:753</a></div></div>
<div class="ttc" id="nx__session_8c_html_a7373c5ab0ca53f54c493f9e461ae679d"><div class="ttname"><a href="nx__session_8c.html#a7373c5ab0ca53f54c493f9e461ae679d">remmina_nx_session_tunnel_open</a></div><div class="ttdeci">gboolean remmina_nx_session_tunnel_open(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00881">nx_session.c:881</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_ade30ec7b3ab10db3c0d944ff0f93a64f"><div class="ttname"><a href="struct___remmina_n_x_session.html#ade30ec7b3ab10db3c0d944ff0f93a64f">_RemminaNXSession::session</a></div><div class="ttdeci">ssh_session session</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00095">nx_session.c:95</a></div></div>
<div class="ttc" id="nx__session_8c_html_a2123ed756f82d65c5c6f4062606803c6"><div class="ttname"><a href="nx__session_8c.html#a2123ed756f82d65c5c6f4062606803c6">remmina_nx_session_start</a></div><div class="ttdeci">gboolean remmina_nx_session_start(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00746">nx_session.c:746</a></div></div>
<div class="ttc" id="nx__session_8c_html_aa200231bf9d2f3e00a8f92bacddbe09f"><div class="ttname"><a href="nx__session_8c.html#aa200231bf9d2f3e00a8f92bacddbe09f">remmina_nx_session_get_line</a></div><div class="ttdeci">static gchar * remmina_nx_session_get_line(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00406">nx_session.c:406</a></div></div>
<div class="ttc" id="nx__session_8h_html_a16685eea158879e41b101ca3634de462ad61cf9ec71b1f06ceaac651ee1ccd912"><div class="ttname"><a href="nx__session_8h.html#a16685eea158879e41b101ca3634de462ad61cf9ec71b1f06ceaac651ee1ccd912">REMMINA_NX_SESSION_COLUMN_NAME</a></div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00045">nx_session.h:45</a></div></div>
<div class="ttc" id="nx__session_8h_html_ab3c48efc4625d0f41dc99a6e383943a8"><div class="ttname"><a href="nx__session_8h.html#ab3c48efc4625d0f41dc99a6e383943a8">RemminaNXLogCallback</a></div><div class="ttdeci">void(* RemminaNXLogCallback)(const gchar *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00052">nx_session.h:52</a></div></div>
<div class="ttc" id="nx__session_8h_html_a16685eea158879e41b101ca3634de462a6a93837e5235e3ce71188b1cf82774d1"><div class="ttname"><a href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a6a93837e5235e3ce71188b1cf82774d1">REMMINA_NX_SESSION_N_COLUMNS</a></div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00046">nx_session.h:46</a></div></div>
<div class="ttc" id="remmina__plugin_8h_html"><div class="ttname"><a href="remmina__plugin_8h.html">remmina_plugin.h</a></div></div>
<div class="ttc" id="nx__session_8c_html_ad3ab1f08fffd57b68fa36360c7ef8135"><div class="ttname"><a href="nx__session_8c.html#ad3ab1f08fffd57b68fa36360c7ef8135">remmina_get_keytype</a></div><div class="ttdeci">static gboolean remmina_get_keytype(const gchar *private_key_file, gint *keytype, gboolean *encrypted)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00049">nx_session.c:49</a></div></div>
<div class="ttc" id="nx__session_8c_html_ad01b66a877f8c30dc4bdf1ba6f3beac0"><div class="ttname"><a href="nx__session_8c.html#ad01b66a877f8c30dc4bdf1ba6f3beac0">remmina_nx_session_invoke_proxy</a></div><div class="ttdeci">gboolean remmina_nx_session_invoke_proxy(RemminaNXSession *nx, gint display, GChildWatchFunc exit_func, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00951">nx_session.c:951</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_ae7db217f1b651367e3f2b99d2823c22a"><div class="ttname"><a href="struct___remmina_n_x_session.html#ae7db217f1b651367e3f2b99d2823c22a">_RemminaNXSession::session_id</a></div><div class="ttdeci">gchar * session_id</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00116">nx_session.c:116</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a38fc966f870cf85028243a968356aee7"><div class="ttname"><a href="struct___remmina_n_x_session.html#a38fc966f870cf85028243a968356aee7">_RemminaNXSession::version</a></div><div class="ttdeci">gchar * version</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00115">nx_session.c:115</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_acb432c33574cfe82012c70d34a495b82"><div class="ttname"><a href="struct___remmina_n_x_session.html#acb432c33574cfe82012c70d34a495b82">_RemminaNXSession::allow_start</a></div><div class="ttdeci">gboolean allow_start</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00120">nx_session.c:120</a></div></div>
<div class="ttc" id="nx__session_8c_html_ae4e7f359af598b707927c162c3c37e1e"><div class="ttname"><a href="nx__session_8c.html#ae4e7f359af598b707927c162c3c37e1e">remmina_nx_session_get_error</a></div><div class="ttdeci">const gchar * remmina_nx_session_get_error(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00223">nx_session.c:223</a></div></div>
<div class="ttc" id="nx__session_8c_html_a563a10864cfa73bffc2899141b6a35ea"><div class="ttname"><a href="nx__session_8c.html#a563a10864cfa73bffc2899141b6a35ea">remmina_nx_session_send_session_command</a></div><div class="ttdeci">static gboolean remmina_nx_session_send_session_command(RemminaNXSession *nx, const gchar *cmd_type, gint response)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00646">nx_session.c:646</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a320798f97f2c662fd0005cbc7ae606b3"><div class="ttname"><a href="struct___remmina_n_x_session.html#a320798f97f2c662fd0005cbc7ae606b3">_RemminaNXSession::response_pos</a></div><div class="ttdeci">gint response_pos</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00110">nx_session.c:110</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_ae3d1942fc8672cb8e1ad62e26ae162c5"><div class="ttname"><a href="struct___remmina_n_x_session.html#ae3d1942fc8672cb8e1ad62e26ae162c5">_RemminaNXSession::proxy_cookie</a></div><div class="ttdeci">gchar * proxy_cookie</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00118">nx_session.c:118</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a3fd55eec41ac937d5f92b76af7112dac"><div class="ttname"><a href="struct___remmina_n_x_session.html#a3fd55eec41ac937d5f92b76af7112dac">_RemminaNXSession::server</a></div><div class="ttdeci">gchar * server</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00097">nx_session.c:97</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a94f4baa1c4a6befb0c0a84f1b87d8508"><div class="ttname"><a href="struct___remmina_n_x_session.html#a94f4baa1c4a6befb0c0a84f1b87d8508">_RemminaNXSession::response</a></div><div class="ttdeci">GString * response</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00109">nx_session.c:109</a></div></div>
<div class="ttc" id="nx__session_8c_html_a9a98fead7295fa90624d8a494d3570cf"><div class="ttname"><a href="nx__session_8c.html#a9a98fead7295fa90624d8a494d3570cf">remmina_nx_session_get_proxy_option</a></div><div class="ttdeci">static gchar * remmina_nx_session_get_proxy_option(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00937">nx_session.c:937</a></div></div>
<div class="ttc" id="nx__session_8c_html_ad6ae8dc606c87632bb8b8b477509bcea"><div class="ttname"><a href="nx__session_8c.html#ad6ae8dc606c87632bb8b8b477509bcea">remmina_nx_session_expect_status2</a></div><div class="ttdeci">static gint remmina_nx_session_expect_status2(RemminaNXSession *nx, gint status, gint status2)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00490">nx_session.c:490</a></div></div>
<div class="ttc" id="nx__session_8c_html_a33e8f6637275c331c86f321bf1da448c"><div class="ttname"><a href="nx__session_8c.html#a33e8f6637275c331c86f321bf1da448c">remmina_nx_session_new</a></div><div class="ttdeci">RemminaNXSession * remmina_nx_session_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00129">nx_session.c:129</a></div></div>
<div class="ttc" id="nx__session_8h_html_ab69a075e55bbed5a8104a6c319e9a20c"><div class="ttname"><a href="nx__session_8h.html#ab69a075e55bbed5a8104a6c319e9a20c">RemminaNXPassphraseCallback</a></div><div class="ttdeci">gboolean(* RemminaNXPassphraseCallback)(gchar **passphrase, gpointer userdata)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00051">nx_session.h:51</a></div></div>
<div class="ttc" id="nx__session_8c_html_aa02aea77cb6428ea4eebddc0d80217e9"><div class="ttname"><a href="nx__session_8c.html#aa02aea77cb6428ea4eebddc0d80217e9">remmina_nx_session_has_error</a></div><div class="ttdeci">gboolean remmina_nx_session_has_error(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00216">nx_session.c:216</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a8265fdd8a96b911b5cd8092599992048"><div class="ttname"><a href="struct___remmina_n_x_session.html#a8265fdd8a96b911b5cd8092599992048">_RemminaNXSession::error</a></div><div class="ttdeci">gchar * error</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00098">nx_session.c:98</a></div></div>
<div class="ttc" id="nx__session_8c_html_a1d1f38d0bee83fe75e528a7f157c12c0"><div class="ttname"><a href="nx__session_8c.html#a1d1f38d0bee83fe75e528a7f157c12c0">remmina_nx_session_parse_session_list_line</a></div><div class="ttdeci">static void remmina_nx_session_parse_session_list_line(RemminaNXSession *nx, const gchar *line)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00298">nx_session.c:298</a></div></div>
<div class="ttc" id="nx__session_8c_html_aa1398fd24f8083867db1f8f392638bf0"><div class="ttname"><a href="nx__session_8c.html#aa1398fd24f8083867db1f8f392638bf0">remmina_nx_session_add_common_parameters</a></div><div class="ttdeci">static void remmina_nx_session_add_common_parameters(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00727">nx_session.c:727</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a7a48b762c4eefbc6f48b93d336dd0874"><div class="ttname"><a href="struct___remmina_n_x_session.html#a7a48b762c4eefbc6f48b93d336dd0874">_RemminaNXSession::running</a></div><div class="ttdeci">gboolean running</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00103">nx_session.c:103</a></div></div>
<div class="ttc" id="nx__session_8c_html_a2dc3db8078c966530a0790f208c9148c"><div class="ttname"><a href="nx__session_8c.html#a2dc3db8078c966530a0790f208c9148c">nx_default_private_key</a></div><div class="ttdeci">static const gchar nx_default_private_key[]</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00078">nx_session.c:78</a></div></div>
<div class="ttc" id="nx__session_8c_html_aa7cec91dde56b12471bbe8acd451d9d3"><div class="ttname"><a href="nx__session_8c.html#aa7cec91dde56b12471bbe8acd451d9d3">remmina_nx_session_free</a></div><div class="ttdeci">void remmina_nx_session_free(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00145">nx_session.c:145</a></div></div>
<div class="ttc" id="nx__session_8h_html"><div class="ttname"><a href="nx__session_8h.html">nx_session.h</a></div></div>
<div class="ttc" id="nx__session_8c_html_ab16725d4a1ce169180b759b66492fc1d"><div class="ttname"><a href="nx__session_8c.html#ab16725d4a1ce169180b759b66492fc1d">nx_hello_server_msg</a></div><div class="ttdeci">static const gchar nx_hello_server_msg[]</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00091">nx_session.c:91</a></div></div>
<div class="ttc" id="nx__session_8c_html_a36da737bdb6708e5e5e85437cab112f9"><div class="ttname"><a href="nx__session_8c.html#a36da737bdb6708e5e5e85437cab112f9">remmina_nx_session_set_encryption</a></div><div class="ttdeci">void remmina_nx_session_set_encryption(RemminaNXSession *nx, gint encryption)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00238">nx_session.c:238</a></div></div>
<div class="ttc" id="nx__session_8c_html_a128499f3768aae8bc5c233f6fb616a76"><div class="ttname"><a href="nx__session_8c.html#a128499f3768aae8bc5c233f6fb616a76">remmina_nx_session_list</a></div><div class="ttdeci">gboolean remmina_nx_session_list(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00667">nx_session.c:667</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_ae2e716ee1eb3d039e99d79f6988946e7"><div class="ttname"><a href="struct___remmina_n_x_session.html#ae2e716ee1eb3d039e99d79f6988946e7">_RemminaNXSession::log_callback</a></div><div class="ttdeci">RemminaNXLogCallback log_callback</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00099">nx_session.c:99</a></div></div>
<div class="ttc" id="nx__session_8h_html_a16685eea158879e41b101ca3634de462a3796111b5b1f37b1b9584dfa7c63b8ca"><div class="ttname"><a href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a3796111b5b1f37b1b9584dfa7c63b8ca">REMMINA_NX_SESSION_COLUMN_DISPLAY</a></div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00041">nx_session.h:41</a></div></div>
<div class="ttc" id="nx__session_8c_html_a7d021133105bd538af31817eff263324"><div class="ttname"><a href="nx__session_8c.html#a7d021133105bd538af31817eff263324">remmina_nx_session_iter_next</a></div><div class="ttdeci">gboolean remmina_nx_session_iter_next(RemminaNXSession *nx, GtkTreeIter *iter)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00697">nx_session.c:697</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a96a06206abbe66cc159c9c2900501594"><div class="ttname"><a href="struct___remmina_n_x_session.html#a96a06206abbe66cc159c9c2900501594">_RemminaNXSession::session_list_state</a></div><div class="ttdeci">gint session_list_state</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00122">nx_session.c:122</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a301e9e32110ea5c3269025921f9b11a3"><div class="ttname"><a href="struct___remmina_n_x_session.html#a301e9e32110ea5c3269025921f9b11a3">_RemminaNXSession::session_parameters</a></div><div class="ttdeci">GHashTable * session_parameters</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00107">nx_session.c:107</a></div></div>
<div class="ttc" id="nx__session_8c_html_a13c14492f22eda65b325337be14aa3ef"><div class="ttname"><a href="nx__session_8c.html#a13c14492f22eda65b325337be14aa3ef">remmina_nx_session_allow_start</a></div><div class="ttdeci">gboolean remmina_nx_session_allow_start(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00721">nx_session.c:721</a></div></div>
<div class="ttc" id="nx__session_8c_html_a663b5b339b919527db0c7467123c7f62"><div class="ttname"><a href="nx__session_8c.html#a663b5b339b919527db0c7467123c7f62">remmina_nx_session_send_command</a></div><div class="ttdeci">static void remmina_nx_session_send_command(RemminaNXSession *nx, const gchar *cmdfmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00513">nx_session.c:513</a></div></div>
<div class="ttc" id="nx__session_8c_html_a625f0605bf73f0465866b26cf7563eac"><div class="ttname"><a href="nx__session_8c.html#a625f0605bf73f0465866b26cf7563eac">remmina_nx_session_parse_response</a></div><div class="ttdeci">static gint remmina_nx_session_parse_response(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00434">nx_session.c:434</a></div></div>
<div class="ttc" id="nx__session_8c_html_ae4e00fb7501df9af20b7fdc61331c347"><div class="ttname"><a href="nx__session_8c.html#ae4e00fb7501df9af20b7fdc61331c347">remmina_nx_session_add_parameter</a></div><div class="ttdeci">void remmina_nx_session_add_parameter(RemminaNXSession *nx, const gchar *name, const gchar *valuefmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00634">nx_session.c:634</a></div></div>
<div class="ttc" id="nx__session_8c_html_a5d6f81a44339efa85a0048f759207825"><div class="ttname"><a href="nx__session_8c.html#a5d6f81a44339efa85a0048f759207825">remmina_nx_session_iter_get</a></div><div class="ttdeci">gchar * remmina_nx_session_iter_get(RemminaNXSession *nx, GtkTreeIter *iter, gint column)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00706">nx_session.c:706</a></div></div>
<div class="ttc" id="nx__session_8c_html_a4bce96ad49020acbbbbe09c3eefa97a6"><div class="ttname"><a href="nx__session_8c.html#a4bce96ad49020acbbbbe09c3eefa97a6">remmina_nx_session_tunnel_main_thread</a></div><div class="ttdeci">static gpointer remmina_nx_session_tunnel_main_thread(gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00773">nx_session.c:773</a></div></div>
<div class="ttc" id="nx__session_8c_html_a68bff7bd24db82a337fc00e42942d1c6"><div class="ttname"><a href="nx__session_8c.html#a68bff7bd24db82a337fc00e42942d1c6">remmina_nx_session_set_application_error</a></div><div class="ttdeci">static void remmina_nx_session_set_application_error(RemminaNXSession *nx, const gchar *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00205">nx_session.c:205</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a5d82270696558ff011d0f1583e8e5b44"><div class="ttname"><a href="struct___remmina_n_x_session.html#a5d82270696558ff011d0f1583e8e5b44">_RemminaNXSession::session_list</a></div><div class="ttdeci">GtkListStore * session_list</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00121">nx_session.c:121</a></div></div>
<div class="ttc" id="nx__session_8h_html_a16685eea158879e41b101ca3634de462a8d0dda661a8ed92c2d07ea355cac3431"><div class="ttname"><a href="nx__session_8h.html#a16685eea158879e41b101ca3634de462a8d0dda661a8ed92c2d07ea355cac3431">REMMINA_NX_SESSION_COLUMN_TYPE</a></div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8h_source.html#l00042">nx_session.h:42</a></div></div>
<div class="ttc" id="nx__session_8c_html_a49f2ddc5baaf992f7a39f3d8f6ab061d"><div class="ttname"><a href="nx__session_8c.html#a49f2ddc5baaf992f7a39f3d8f6ab061d">remmina_nx_session_iter_set</a></div><div class="ttdeci">void remmina_nx_session_iter_set(RemminaNXSession *nx, GtkTreeIter *iter, gint column, const gchar *data)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00715">nx_session.c:715</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a936a3e78f90b86fc1d6fbb1ad82e41d6"><div class="ttname"><a href="struct___remmina_n_x_session.html#a936a3e78f90b86fc1d6fbb1ad82e41d6">_RemminaNXSession::proxy_pid</a></div><div class="ttdeci">GPid proxy_pid</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00124">nx_session.c:124</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a792e500d6555092699d0a1ad117f627f"><div class="ttname"><a href="struct___remmina_n_x_session.html#a792e500d6555092699d0a1ad117f627f">_RemminaNXSession::session_display</a></div><div class="ttdeci">gint session_display</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00117">nx_session.c:117</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a061c5a4413fae2bd0b856cb5a079bf17"><div class="ttname"><a href="struct___remmina_n_x_session.html#a061c5a4413fae2bd0b856cb5a079bf17">_RemminaNXSession::status</a></div><div class="ttdeci">gint status</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00111">nx_session.c:111</a></div></div>
<div class="ttc" id="nx__session_8c_html_ad217fb5180a6ed57c47f174a0b20cf8c"><div class="ttname"><a href="nx__session_8c.html#ad217fb5180a6ed57c47f174a0b20cf8c">remmina_nx_session_terminate</a></div><div class="ttdeci">gboolean remmina_nx_session_terminate(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00767">nx_session.c:767</a></div></div>
<div class="ttc" id="nx__session_8c_html_a0279cdfc0ad8129fcb3e1cc26297f866"><div class="ttname"><a href="nx__session_8c.html#a0279cdfc0ad8129fcb3e1cc26297f866">remmina_nx_session_clear_error</a></div><div class="ttdeci">void remmina_nx_session_clear_error(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00229">nx_session.c:229</a></div></div>
<div class="ttc" id="nx__session_8c_html_abe9c344eaf302b01759e5bd305cb5abc"><div class="ttname"><a href="nx__session_8c.html#abe9c344eaf302b01759e5bd305cb5abc">remmina_nx_session_set_error</a></div><div class="ttdeci">static void remmina_nx_session_set_error(RemminaNXSession *nx, const gchar *fmt)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00194">nx_session.c:194</a></div></div>
<div class="ttc" id="nx__session_8c_html_aa912b495508a0f74fe8e121c5b532f6b"><div class="ttname"><a href="nx__session_8c.html#aa912b495508a0f74fe8e121c5b532f6b">remmina_nx_session_login</a></div><div class="ttdeci">gboolean remmina_nx_session_login(RemminaNXSession *nx, const gchar *username, const gchar *password)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00611">nx_session.c:611</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a625c909bea52f8e22d277fdf64d67fa4"><div class="ttname"><a href="struct___remmina_n_x_session.html#a625c909bea52f8e22d277fdf64d67fa4">_RemminaNXSession::encryption</a></div><div class="ttdeci">gint encryption</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00112">nx_session.c:112</a></div></div>
<div class="ttc" id="nx__session_8c_html_a5b9d8589f544d54350a6d96b49275e41"><div class="ttname"><a href="nx__session_8c.html#a5b9d8589f544d54350a6d96b49275e41">remmina_nx_session_set_tree_view</a></div><div class="ttdeci">void remmina_nx_session_set_tree_view(RemminaNXSession *nx, GtkTreeView *tree)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00683">nx_session.c:683</a></div></div>
<div class="ttc" id="nx__session_8c_html_aadff42154c92ef10a80b403cadec5c1b"><div class="ttname"><a href="nx__session_8c.html#aadff42154c92ef10a80b403cadec5c1b">remmina_nx_session_iter_first</a></div><div class="ttdeci">gboolean remmina_nx_session_iter_first(RemminaNXSession *nx, GtkTreeIter *iter)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00689">nx_session.c:689</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a6e8a2518c6717188f2acda9dd4f5188a"><div class="ttname"><a href="struct___remmina_n_x_session.html#a6e8a2518c6717188f2acda9dd4f5188a">_RemminaNXSession::localport</a></div><div class="ttdeci">gint localport</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00113">nx_session.c:113</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_ae4c9bb12c639ebd1b661cdbc5ebc2bc6"><div class="ttname"><a href="struct___remmina_n_x_session.html#ae4c9bb12c639ebd1b661cdbc5ebc2bc6">_RemminaNXSession::thread</a></div><div class="ttdeci">pthread_t thread</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00102">nx_session.c:102</a></div></div>
<div class="ttc" id="nx__session_8c_html_a880c07dbd498746d06490063159baa4c"><div class="ttname"><a href="nx__session_8c.html#a880c07dbd498746d06490063159baa4c">remmina_nx_session_get_response</a></div><div class="ttdeci">static gboolean remmina_nx_session_get_response(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00256">nx_session.c:256</a></div></div>
<div class="ttc" id="nx__session_8c_html_a0de55cb12904503503d7d9ab3338aa33"><div class="ttname"><a href="nx__session_8c.html#a0de55cb12904503503d7d9ab3338aa33">remmina_nx_session_restore</a></div><div class="ttdeci">gboolean remmina_nx_session_restore(RemminaNXSession *nx)</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00760">nx_session.c:760</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_adc8191b8b242c369a1287df3333ff9d8"><div class="ttname"><a href="struct___remmina_n_x_session.html#adc8191b8b242c369a1287df3333ff9d8">_RemminaNXSession::server_sock</a></div><div class="ttdeci">gint server_sock</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00104">nx_session.c:104</a></div></div>
<div class="ttc" id="struct___remmina_n_x_session_html_a18ace4f039f5580e24147bb5db1b2aad"><div class="ttname"><a href="struct___remmina_n_x_session.html#a18ace4f039f5580e24147bb5db1b2aad">_RemminaNXSession::channel</a></div><div class="ttdeci">ssh_channel channel</div><div class="ttdef"><b>Definition:</b> <a href="nx__session_8c_source.html#l00096">nx_session.c:96</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_38c8d24aef3972a7f87b834274e76e31.html">plugins</a></li><li class="navelem"><a class="el" href="dir_1a3d72b38ed81de42b4df14ef8f2e809.html">nx</a></li><li class="navelem"><a class="el" href="nx__session_8c.html">nx_session.c</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>