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

gitlab.com/Remmina/remminadoc.gitlab.io.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntenore Gatta <antenore@simbiosi.org>2023-09-22 15:26:15 +0300
committerAntenore Gatta <antenore@simbiosi.org>2023-09-22 15:26:15 +0300
commit36a74200869eb61635e60db023418387e0e08119 (patch)
treeb295b9cf2ca2a482f3032a514caf520a9835c0d4
parent0beb52ed27725588789f4bbefb34f46e31652791 (diff)
Automatic doc build by remmina-ci
-rw-r--r--public/remmina__exec_8c_source.html4
-rw-r--r--public/remmina__file__editor_8c.html108
-rw-r--r--public/remmina__file__editor_8c_source.html110
-rw-r--r--public/remmina__file__editor_8h.html14
-rw-r--r--public/remmina__file__editor_8h_source.html14
-rw-r--r--public/remmina__main_8c_source.html6
-rw-r--r--public/remmina__protocol__widget_8c_source.html2
-rw-r--r--public/remmina__ssh_8c_source.html2
8 files changed, 130 insertions, 130 deletions
diff --git a/public/remmina__exec_8c_source.html b/public/remmina__exec_8c_source.html
index 879000253..d66bfd5c7 100644
--- a/public/remmina__exec_8c_source.html
+++ b/public/remmina__exec_8c_source.html
@@ -105,7 +105,7 @@ $(document).ready(function(){initNavTree('remmina__exec_8c_source.html','');});
<div class="ttc" id="remmina__exec_8c_html_adfa9ba9dcefd2b5f6ca8050f00731c73"><div class="ttname"><a href="remmina__exec_8c.html#adfa9ba9dcefd2b5f6ca8050f00731c73">remmina_exec_exitremmina_one_confirm</a></div><div class="ttdeci">void remmina_exec_exitremmina_one_confirm()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00123">remmina_exec.c:123</a></div></div>
<div class="ttc" id="remmina__about_8h_html"><div class="ttname"><a href="remmina__about_8h.html">remmina_about.h</a></div></div>
<div class="ttc" id="remmina__icon_8c_html_a42f087b679b43b8a1d36cd9e9781a8b6"><div class="ttname"><a href="remmina__icon_8c.html#a42f087b679b43b8a1d36cd9e9781a8b6">remmina_icon_is_available</a></div><div class="ttdeci">gboolean remmina_icon_is_available(void)</div><div class="ttdoc">Determine whenever the Remmina icon is available. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__icon_8c_source.html#l00330">remmina_icon.c:330</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ab563344276cbcdf0fcea05b0b64c7aeb"><div class="ttname"><a href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_full(const gchar *server, const gchar *protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02136">remmina_file_editor.c:2136</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ab563344276cbcdf0fcea05b0b64c7aeb"><div class="ttname"><a href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_full(const gchar *server, const gchar *protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02146">remmina_file_editor.c:2146</a></div></div>
<div class="ttc" id="remmina__main_8c_html_af14b1942a754d7b2f5c10266208ebe01"><div class="ttname"><a href="remmina__main_8c.html#af14b1942a754d7b2f5c10266208ebe01">remmina_main_new</a></div><div class="ttdeci">GtkWidget * remmina_main_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01652">remmina_main.c:1652</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a009f32092bd1d8dcd8e783d25416f3df"><div class="ttname"><a href="remmina__main_8c.html#a009f32092bd1d8dcd8e783d25416f3df">remmina_main_save_before_destroy</a></div><div class="ttdeci">void remmina_main_save_before_destroy()</div><div class="ttdoc">Save the Remmina Main Window size and the expanded group before to close Remmina. ...</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00180">remmina_main.c:180</a></div></div>
<div class="ttc" id="remmina__exec_8c_html_a93f5633a6348dc1df1a5723b3054a2a3"><div class="ttname"><a href="remmina__exec_8c.html#a93f5633a6348dc1df1a5723b3054a2a3">remmina_exec_get_build_config</a></div><div class="ttdeci">const gchar * remmina_exec_get_build_config(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00078">remmina_exec.c:78</a></div></div>
@@ -130,7 +130,7 @@ $(document).ready(function(){initNavTree('remmina__exec_8c_source.html','');});
<div class="ttc" id="remmina__exec_8c_html_a206abe0e916081b29c5faa52330e2271"><div class="ttname"><a href="remmina__exec_8c.html#a206abe0e916081b29c5faa52330e2271">remmina_exec_exitremmina</a></div><div class="ttdeci">void remmina_exec_exitremmina()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00089">remmina_exec.c:89</a></div></div>
<div class="ttc" id="remmina__pref_8c_html_a9a8d02227eb703bccc3f9296a5d89d6f"><div class="ttname"><a href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a></div><div class="ttdeci">gboolean remmina_pref_get_boolean(const gchar *key)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01164">remmina_pref.c:1164</a></div></div>
<div class="ttc" id="remmina__exec_8h_html_a23616cb0334a45c2b477be6efd45ee0cacc1267f3834ff091be0587522f2182b8"><div class="ttname"><a href="remmina__exec_8h.html#a23616cb0334a45c2b477be6efd45ee0cacc1267f3834ff091be0587522f2182b8">REMMINA_COMMAND_AUTOSTART</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8h_source.html#l00054">remmina_exec.h:54</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02169">remmina_file_editor.c:2169</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02179">remmina_file_editor.c:2179</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a95532ac6d110eeeb2e41d4b2a329797c"><div class="ttname"><a href="remmina__main_8c.html#a95532ac6d110eeeb2e41d4b2a329797c">remmina_main_destroy</a></div><div class="ttdeci">void remmina_main_destroy()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00193">remmina_main.c:193</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a5e421ba636d34e21bba5ece463e98892"><div class="ttname"><a href="remmina__file_8c.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a></div><div class="ttdeci">RemminaFile * remmina_file_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00093">remmina_file.c:93</a></div></div>
<div class="ttc" id="rcw_8h_html"><div class="ttname"><a href="rcw_8h.html">rcw.h</a></div></div>
diff --git a/public/remmina__file__editor_8c.html b/public/remmina__file__editor_8c.html
index 6f50ad9a7..dea4fccf8 100644
--- a/public/remmina__file__editor_8c.html
+++ b/public/remmina__file__editor_8c.html
@@ -281,7 +281,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00375">375</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00376">376</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -319,7 +319,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00242">242</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00243">243</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -357,7 +357,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00551">551</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00552">552</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -395,7 +395,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00301">301</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00302">302</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -415,7 +415,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01960">1960</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01970">1970</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -443,7 +443,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00144">144</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00145">145</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -471,7 +471,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01377">1377</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01385">1385</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -521,7 +521,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00647">647</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00648">648</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -549,7 +549,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01154">1154</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01155">1155</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -617,7 +617,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00816">816</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00817">817</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -694,7 +694,7 @@ Variables</h2></td></tr>
<p>Create checkbox + gtk_file_chooser for open files and select folders. </p>
<p>The code is wrong, because if the checkbox is not active, the value should be set to NULL and remove it from the remmina file. The problem is that this function knows nothing about the remmina file. This should be rewritten in a more generic way Please use REMMINA_PROTOCOL_SETTING_TYPE_TEXT </p>
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00844">844</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00845">845</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -768,7 +768,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00793">793</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00794">794</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -848,7 +848,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00949">949</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00950">950</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -928,7 +928,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00907">907</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00908">908</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -956,7 +956,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00307">307</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00308">308</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1012,7 +1012,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00329">329</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00330">330</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1080,7 +1080,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00502">502</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00503">503</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1130,7 +1130,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00567">567</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00568">568</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1204,7 +1204,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00771">771</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00772">772</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1254,7 +1254,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00451">451</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00452">452</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1298,7 +1298,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00994">994</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00995">995</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1336,7 +1336,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01209">1209</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01217">1217</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1404,7 +1404,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00729">729</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00730">730</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1484,7 +1484,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00695">695</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00696">696</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1552,7 +1552,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00738">738</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00739">739</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1590,7 +1590,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00293">293</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00294">294</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1638,7 +1638,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00896">896</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00897">897</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1676,7 +1676,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01970">1970</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01980">1980</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1696,7 +1696,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01987">1987</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01997">1997</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1724,7 +1724,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01895">1895</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01905">1905</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1772,7 +1772,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00882">882</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00883">883</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1816,7 +1816,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01938">1938</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01948">1948</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1836,7 +1836,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02130">2130</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02140">2140</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1856,7 +1856,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02150">2150</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02160">2160</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1876,7 +1876,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02001">2001</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02011">2011</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1896,7 +1896,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02169">2169</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02179">2179</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1926,7 +1926,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02136">2136</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02146">2146</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -1964,7 +1964,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01889">1889</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01899">1899</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2002,7 +2002,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01840">1840</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01850">1850</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2040,7 +2040,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01782">1782</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01792">1792</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2078,7 +2078,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00276">276</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00277">277</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2116,7 +2116,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01820">1820</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01830">1830</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2155,7 +2155,7 @@ Variables</h2></td></tr>
</div><div class="memdoc">
<p>: Call remmina_file_editor_on_save </p>
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01862">1862</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01872">1872</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2193,7 +2193,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01414">1414</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01422">1422</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2221,7 +2221,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01458">1458</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01466">1466</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2249,7 +2249,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01472">1472</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01482">1482</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2306,7 +2306,7 @@ Variables</h2></td></tr>
TODO: when Remmina Editor's content is scrollable and failed_widget is not even visible anymore, the window gets shown where failed_widget would be if the Remmina Editor was big enough. <br />
TODO: Responsive text size and line wrap. </p>
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00164">164</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00165">165</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2350,7 +2350,7 @@ TODO: Responsive text size and line wrap. </p>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00394">394</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00395">395</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2388,7 +2388,7 @@ TODO: Responsive text size and line wrap. </p>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00365">365</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00366">366</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2426,7 +2426,7 @@ TODO: Responsive text size and line wrap. </p>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01716">1716</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01726">1726</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2464,7 +2464,7 @@ TODO: Responsive text size and line wrap. </p>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00539">539</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l00540">540</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2502,7 +2502,7 @@ TODO: Responsive text size and line wrap. </p>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01611">1611</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01621">1621</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2552,7 +2552,7 @@ TODO: Responsive text size and line wrap. </p>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01533">1533</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01543">1543</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -2578,7 +2578,7 @@ TODO: Responsive text size and line wrap. </p>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div><div class="line">{</div><div class="line"> <span class="stringliteral">&quot;0&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Password&quot;</span>),</div><div class="line"> <span class="stringliteral">&quot;1&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;SSH identity file&quot;</span>),</div><div class="line"> <span class="stringliteral">&quot;2&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;SSH agent&quot;</span>),</div><div class="line"> <span class="stringliteral">&quot;3&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Public key (automatic)&quot;</span>),</div><div class="line"> <span class="stringliteral">&quot;4&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Kerberos (GSSAPI)&quot;</span>),</div><div class="line"> NULL</div><div class="line">}</div><div class="ttc" id="vnc__plugin_8c_html_ab96ef9227ecef94018f2729f72e7651e"><div class="ttname"><a href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a></div><div class="ttdeci">N_(&quot;Unable to connect to VNC server&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00953">vnc_plugin.c:953</a></div></div>
</div><!-- fragment -->
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01198">1198</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01206">1206</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
diff --git a/public/remmina__file__editor_8c_source.html b/public/remmina__file__editor_8c_source.html
index 3eafc96e1..852645a71 100644
--- a/public/remmina__file__editor_8c_source.html
+++ b/public/remmina__file__editor_8c_source.html
@@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html',
<div class="title">remmina_file_editor.c</div> </div>
</div><!--header-->
<div class="contents">
-<a href="remmina__file__editor_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) 2009-2011 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-2023 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;ctype.h&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;config.h&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;avahi-ui/avahi-ui.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__public_8h.html">remmina_public.h</a>&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rcw_8h.html">rcw.h</a>&quot;</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file_8h.html">remmina_file.h</a>&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file__editor_8h.html">remmina_file_editor.h</a>&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>&quot;</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__icon_8h.html">remmina_icon.h</a>&quot;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__main_8h.html">remmina_main.h</a>&quot;</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref__dialog_8h.html">remmina_pref_dialog.h</a>&quot;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ssh_8h.html">remmina_ssh.h</a>&quot;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__string__list_8h.html">remmina_string_list.h</a>&quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__unlock_8h.html">remmina_unlock.h</a>&quot;</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__widget__pool_8h.html">remmina_widget_pool.h</a>&quot;</span></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"><a class="line" href="remmina__file__editor_8c.html#abb7466f51c11427405a54c94767a52de"> 58</a></span>&#160;<a class="code" href="remmina__file__editor_8c.html#abb7466f51c11427405a54c94767a52de">G_DEFINE_TYPE</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a>, remmina_file_editor, GTK_TYPE_DIALOG)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *server_tips = <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;&lt;big&gt;&quot;</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="stringliteral">&quot;Supported formats\n&quot;</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="stringliteral">&quot;• server\n&quot;</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="stringliteral">&quot;• server[:port]\n&quot;</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="stringliteral">&quot;VNC additional formats\n&quot;</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="stringliteral">&quot;• ID:repeater ID number\n&quot;</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="stringliteral">&quot;• unix:///path/socket.sock&quot;</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="stringliteral">&quot;&lt;/big&gt;&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *cmd_tips = <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;&lt;big&gt;&quot;</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="stringliteral">&quot;• command in PATH args %h\n&quot;</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="stringliteral">&quot;• /path/to/foo -options %h %u\n&quot;</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="stringliteral">&quot;• %h is substituted with the server name\n&quot;</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="stringliteral">&quot;• %t is substituted with the SSH server name\n&quot;</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="stringliteral">&quot;• %u is substituted with the username\n&quot;</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="stringliteral">&quot;• %U is substituted with the SSH username\n&quot;</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="stringliteral">&quot;• %p is substituted with Remmina profile name\n&quot;</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot;• %g is substituted with Remmina profile group name\n&quot;</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="stringliteral">&quot;• %d is substituted with local date and time in ISO 8601 format\n&quot;</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="stringliteral">&quot;Do not run in background if you want the command to be executed before connecting.\n&quot;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="stringliteral">&quot;&lt;/big&gt;&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *server_tips2 = <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;&lt;big&gt;&quot;</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="stringliteral">&quot;Supported formats\n&quot;</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="stringliteral">&quot;• server\n&quot;</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="stringliteral">&quot;• server[:port]\n&quot;</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="stringliteral">&quot;• username@server[:port] (SSH protocol only)&quot;</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="stringliteral">&quot;&lt;/big&gt;&quot;</span>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#endif</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"> 91</span>&#160;<span class="keyword">struct </span>_RemminaFileEditorPriv {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * remmina_file;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> * plugin;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> gchar * avahi_service_type;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; GtkWidget * name_entry;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; GtkWidget * labels_entry;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; GtkWidget * group_combo;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; GtkWidget * protocol_combo;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; GtkWidget * save_button;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; GtkWidget * config_box;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; GtkWidget * config_scrollable;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; GtkWidget * config_viewport;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; GtkWidget * config_container;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; GtkWidget * server_combo;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; GtkWidget * resolution_iws_radio;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; GtkWidget * resolution_auto_radio;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; GtkWidget * resolution_custom_radio;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; GtkWidget * resolution_custom_combo;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; GtkWidget * keymap_combo;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; GtkWidget * assistance_toggle;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; GtkWidget * assistance_file;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; GtkWidget * assistance_password;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; GtkWidget * assistance_file_label;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; GtkWidget * assistance_password_label;</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"> 120</span>&#160; GtkWidget * behavior_autostart_check;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; GtkWidget * behavior_precommand_entry;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; GtkWidget * behavior_postcommand_entry;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; GtkWidget * behavior_lock_check;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; GtkWidget * ssh_tunnel_enabled_check;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; GtkWidget * ssh_tunnel_loopback_check;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; GtkWidget * ssh_tunnel_server_default_radio;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; GtkWidget * ssh_tunnel_server_custom_radio;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; GtkWidget * ssh_tunnel_server_entry;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; GtkWidget * ssh_tunnel_auth_agent_radio;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; GtkWidget * ssh_tunnel_auth_password_radio;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; GtkWidget * ssh_tunnel_auth_password;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; GtkWidget * ssh_tunnel_passphrase;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; GtkWidget * ssh_tunnel_auth_publickey_radio;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; GtkWidget * ssh_tunnel_auth_auto_publickey_radio;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; GtkWidget * ssh_tunnel_auth_combo;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; GtkWidget * ssh_tunnel_username_entry;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; GtkWidget * ssh_tunnel_privatekey_chooser;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; GtkWidget * ssh_tunnel_certfile_chooser;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; GHashTable * setting_widgets;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;};</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"><a class="line" href="remmina__file__editor_8c.html#a7f1406c817183d78a801668a10d73e0b"> 144</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a7f1406c817183d78a801668a10d73e0b">remmina_file_editor_class_init</a>(<a class="code" href="struct___remmina_file_editor_class.html">RemminaFileEditorClass</a> *klass)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;{</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11"> 164</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; GtkWidget * failed_widget,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; GError * err)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (!err) {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; err = NULL; <span class="comment">// g_set_error doesn&#39;t like overwriting errors.</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; g_set_error(&amp;err, 1, 1, _(<span class="stringliteral">&quot;Input is invalid.&quot;</span>));</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (!gfe || !failed_widget) {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; g_critical(<span class="stringliteral">&quot;(%s): Parameters RemminaFileEditor &#39;gfe&#39; or &quot;</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="stringliteral">&quot;GtkWidget* &#39;failed_widget&#39; are &#39;NULL&#39;!&quot;</span>,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; __func__);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; gint widget_width = gtk_widget_get_allocated_width(failed_widget);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; gint widget_height = gtk_widget_get_allocated_height(failed_widget);</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; GtkWidget *err_label = gtk_label_new(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; GtkWidget *alert_icon = NULL;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; GtkWindow *err_window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; GdkWindow *window = gtk_widget_get_window(failed_widget);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; GtkAllocation allocation;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; gint failed_widget_x, failed_widget_y;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; gchar *markup = g_strdup_printf(<span class="stringliteral">&quot;&lt;span size=&#39;large&#39;&gt;%s&lt;/span&gt;&quot;</span>, err-&gt;message);</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"> 194</span>&#160; <span class="comment">// Setup err_window</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; gtk_window_set_decorated(err_window, FALSE);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; gtk_window_set_type_hint(err_window, GDK_WINDOW_TYPE_HINT_TOOLTIP);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; gtk_window_set_default_size(err_window, widget_width, widget_height);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; gtk_window_set_title(err_window, <span class="stringliteral">&quot;Error&quot;</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; gtk_window_set_resizable(err_window, TRUE);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// Move err_window under failed_widget</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; gtk_window_set_attached_to(err_window, failed_widget);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; gtk_window_set_transient_for(err_window, GTK_WINDOW(gfe));</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; gdk_window_get_origin(GDK_WINDOW(window), &amp;failed_widget_x, &amp;failed_widget_y);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; gtk_widget_get_allocation(failed_widget, &amp;allocation);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; failed_widget_x += allocation.x;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; failed_widget_y += allocation.y + allocation.height;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; gtk_window_move(err_window, failed_widget_x, failed_widget_y);</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="comment">// Setup label</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; gtk_label_set_selectable(GTK_LABEL(err_label), FALSE);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; gtk_label_set_max_width_chars(GTK_LABEL(err_label), 1);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; gtk_widget_set_hexpand(GTK_WIDGET(err_label), TRUE);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; gtk_widget_set_vexpand(GTK_WIDGET(err_label), TRUE);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; gtk_label_set_ellipsize(GTK_LABEL(err_label), PANGO_ELLIPSIZE_END);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; gtk_label_set_line_wrap(GTK_LABEL(err_label), TRUE);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; gtk_label_set_line_wrap_mode(GTK_LABEL(err_label), PANGO_WRAP_WORD_CHAR);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; gtk_label_set_markup(GTK_LABEL(err_label), markup);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; alert_icon = gtk_image_new_from_icon_name(<span class="stringliteral">&quot;dialog-warning-symbolic&quot;</span>,</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; GTK_ICON_SIZE_DND);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// Fill icon and label into a box.</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(alert_icon), FALSE, FALSE, 0);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(err_label), TRUE, TRUE, 5);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Attach box to err_window</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; gtk_container_add(GTK_CONTAINER(err_window), GTK_WIDGET(box));</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// Display everything.</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; gtk_widget_show_all(GTK_WIDGET(err_window));</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// Mouse click and focus-loss will delete the err_window.</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; g_signal_connect(G_OBJECT(err_window), <span class="stringliteral">&quot;focus-out-event&quot;</span>,</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; G_CALLBACK(gtk_window_close), NULL);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; g_signal_connect(G_OBJECT(err_window), <span class="stringliteral">&quot;button-press-event&quot;</span>,</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; G_CALLBACK(gtk_window_close), NULL);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;}</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;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05"> 242</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05">remmina_file_editor_browse_avahi</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</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"> 244</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; GtkWidget *dialog;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; gchar *host;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; dialog = aui_service_dialog_new(_(<span class="stringliteral">&quot;Choose a Remote Desktop Server&quot;</span>),</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; GTK_WINDOW(gfe),</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; _(<span class="stringliteral">&quot;_Cancel&quot;</span>), GTK_RESPONSE_CANCEL,</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; _(<span class="stringliteral">&quot;_OK&quot;</span>), GTK_RESPONSE_ACCEPT,</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; NULL);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gfe));</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; aui_service_dialog_set_resolve_service(AUI_SERVICE_DIALOG(dialog), TRUE);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; aui_service_dialog_set_resolve_host_name(AUI_SERVICE_DIALOG(dialog), TRUE);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(dialog),</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;avahi_service_type, NULL);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; host = g_strdup_printf(<span class="stringliteral">&quot;[%s]:%i&quot;</span>,</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; aui_service_dialog_get_host_name(AUI_SERVICE_DIALOG(dialog)),</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; aui_service_dialog_get_port(AUI_SERVICE_DIALOG(dialog)));</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; host = NULL;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (host) {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;server_combo))), host);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; g_free(host);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;}</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b"> 276</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b">remmina_file_editor_on_realize</a>(GtkWidget *widget, gpointer user_data)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; GtkWidget *defaultwidget;</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; gfe = REMMINA_FILE_EDITOR(widget);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; defaultwidget = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;server_combo;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (defaultwidget) {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span> (GTK_IS_EDITABLE(defaultwidget))</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; gtk_editable_select_region(GTK_EDITABLE(defaultwidget), 0, -1);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; gtk_widget_grab_focus(defaultwidget);</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;</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f"> 293</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f">remmina_file_editor_destroy</a>(GtkWidget *widget, gpointer data)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;{</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(REMMINA_FILE_EDITOR(widget)-&gt;priv-&gt;remmina_file);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; g_hash_table_destroy(REMMINA_FILE_EDITOR(widget)-&gt;priv-&gt;setting_widgets);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; g_free(REMMINA_FILE_EDITOR(widget)-&gt;priv);</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;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb"> 301</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>(GtkToggleButton *togglebutton, GtkWidget *widget)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; gtk_widget_set_sensitive(widget, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togglebutton)));</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;</div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea"> 307</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea">remmina_file_editor_create_notebook_container</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;{</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">/* Create the notebook */</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container = gtk_notebook_new();</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport = gtk_viewport_new(NULL, NULL);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable = gtk_scrolled_window_new(NULL, NULL);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable), 2);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable),</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; gtk_widget_show(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; gtk_container_add(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport), 2);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; gtk_widget_show(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; gtk_container_add(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container), 2);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; gtk_widget_show(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; gtk_container_add(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_box), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;}</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556"> 329</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe,</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> gchar *stock_id, <span class="keyword">const</span> gchar *label, gint rows, gint cols)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;{</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; GtkWidget *tablabel;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; GtkWidget *tabbody;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; GtkWidget *widget;</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; tablabel = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; gtk_widget_show(tablabel);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; widget = gtk_image_new_from_icon_name(stock_id, GTK_ICON_SIZE_BUTTON);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; gtk_box_pack_start(GTK_BOX(tablabel), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; gtk_box_pack_start(GTK_BOX(tablabel), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; tabbody = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; gtk_widget_show(tabbody);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; gtk_notebook_append_page(GTK_NOTEBOOK(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container), tabbody, tablabel);</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; grid = gtk_grid_new();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; gtk_widget_show(grid);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; gtk_grid_set_row_spacing(GTK_GRID(grid), 8);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 8);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(grid), 15);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; gtk_box_pack_start(GTK_BOX(tabbody), grid, FALSE, FALSE, 0);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">return</span> grid;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;}</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="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9"> 365</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a>(GtkToggleButton *togglebutton, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;{</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_entry),</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_enabled_check)) &amp;&amp;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio == NULL ||</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio))));</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;}</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6"> 375</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a>(GtkToggleButton *togglebutton,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;{</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; gboolean enabled = TRUE;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_toggle) {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_toggle));</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file), enabled);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password), enabled);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file_label)</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file_label), enabled);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password_label)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password_label), enabled);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</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;</div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019"> 394</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a>(GtkToggleButton *togglebutton,</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7">RemminaProtocolSSHSetting</a> ssh_setting)</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; gboolean enabled = TRUE;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; gchar *p;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> gchar *cp;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> gchar *s = NULL;</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; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_enabled_check) {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_enabled_check));</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_loopback_check)</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_loopback_check), enabled);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_default_radio)</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_default_radio), enabled);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio)</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio), enabled);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a>(NULL, gfe);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; p = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo));</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">// if (!(g_strcmp0(p, &quot;SFTP&quot;) == 0 || g_strcmp0(p, &quot;SSH&quot;) == 0)) {</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry), enabled);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password), enabled);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_combo), enabled);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">//}</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; g_free(p);</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; <span class="comment">// remmina_file_editor_ssh_tunnel_auth_publickey_radio_on_toggled(NULL, gfe);</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span> (s)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_privatekey_chooser), s);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (s)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_certfile_chooser), s);</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; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span> (enabled &amp;&amp; gtk_entry_get_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry))[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; cp = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; gtk_entry_set_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry), cp ? cp : <span class="stringliteral">&quot;&quot;</span>);</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"> 434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password) {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (enabled &amp;&amp; gtk_entry_get_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password))[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; cp = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; gtk_entry_set_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password), cp ? cp : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_passphrase) {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (enabled &amp;&amp; gtk_entry_get_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_passphrase))[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; cp = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; gtk_entry_set_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_passphrase), cp ? cp : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</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;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae"> 451</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae">remmina_file_editor_create_server</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting, GtkWidget *grid,</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; gint row)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;{</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *plugin = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;plugin;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; GtkWidget *hbox;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; gchar *s;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Server&quot;</span>));</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, row + 1);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; s = <a class="code" href="remmina__pref_8c.html#a0208d5dc8197423da67e5967aafb7a05">remmina_pref_get_recent</a>(plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a>);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; widget = <a class="code" href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a>(s, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;server&quot;</span>), TRUE);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; gtk_widget_set_tooltip_markup(widget, _(server_tips));</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; gtk_entry_set_activates_default(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget))), TRUE);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;server_combo = widget;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; g_free(s);</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;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> (setting-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>) {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;avahi_service_type = (<span class="keyword">const</span> gchar *)setting-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; gtk_widget_show(hbox);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; widget = gtk_button_new_with_label(<span class="stringliteral">&quot;…&quot;</span>);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Browse the network to find a %s server&quot;</span>), plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a>);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; gtk_widget_set_tooltip_text(widget, s);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; g_free(s);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05">remmina_file_editor_browse_avahi</a>), gfe);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row, 1, 1);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;}</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;</div><div class="line"><a name="l00502"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583"> 502</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid, gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value, gchar *setting_name)</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;{</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; GtkWidget *widget;</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"> 507</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; gtk_widget_set_margin_end(widget, 40);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; gtk_widget_set_margin_right(widget, 40);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 0);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; gtk_entry_set_activates_default(GTK_ENTRY(widget), TRUE);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; gtk_widget_set_name(widget, setting_name);</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; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), value);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">/* Password view Toogle*/</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span> (setting_name) {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget), GTK_ENTRY_ICON_SECONDARY, <span class="stringliteral">&quot;org.remmina.Remmina-password-reveal-symbolic&quot;</span>);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; gtk_entry_set_icon_activatable(GTK_ENTRY(widget), GTK_ENTRY_ICON_SECONDARY, TRUE);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; g_signal_connect(widget, <span class="stringliteral">&quot;icon-press&quot;</span>, G_CALLBACK(<a class="code" href="remmina__main_8c.html#aac3fe305e456dfa7bb55aa2f057e8cb0">remmina_main_toggle_password_view</a>), NULL);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;}</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"><a class="line" href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a"> 539</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a">remmina_file_editor_update_resolution</a>(GtkWidget *widget, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;{</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; gchar *res_str;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; res_str = g_strdup_printf(<span class="stringliteral">&quot;%dx%d&quot;</span>,</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_width&quot;</span>, 0),</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_height&quot;</span>, 0));</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="remmina__public_8c.html#aa5eacff7c9dab7457dd65525d01047f8">remmina_public_load_combo_text_d</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>,</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; res_str, NULL);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; g_free(res_str);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;}</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4"> 551</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4">remmina_file_editor_browse_resolution</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;{</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; GtkDialog *dialog = <a class="code" href="remmina__string__list_8c.html#a11147c41297537effe55f18a63ce9f7e">remmina_string_list_new</a>(FALSE, NULL);</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <a class="code" href="remmina__string__list_8c.html#a500b85eafd23280f998d2980d1eba80e">remmina_string_list_set_validation_func</a>(<a class="code" href="remmina__public_8c.html#a098786d3aa6991aeba43a61e29d534d0">remmina_public_resolution_validation_func</a>);</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="remmina__string__list_8c.html#ab1bacc097f59c20b477d954bb863a5e0">remmina_string_list_set_text</a>(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>, TRUE);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="remmina__string__list_8c.html#aa9ca6ccf40b954051a0daa5c1efeef87">remmina_string_list_set_titles</a>(_(<span class="stringliteral">&quot;Resolutions&quot;</span>), _(<span class="stringliteral">&quot;Configure the available resolutions&quot;</span>));</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gfe));</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; gtk_dialog_run(dialog);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; g_free(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a> = <a class="code" href="remmina__string__list_8c.html#a74058eac0af28c05a55d041103457aec">remmina_string_list_get_text</a>();</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; g_signal_connect(G_OBJECT(dialog), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a">remmina_file_editor_update_resolution</a>), gfe);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; gtk_widget_destroy(GTK_WIDGET(dialog));</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;</div><div class="line"><a name="l00567"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5"> 567</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5">remmina_file_editor_create_resolution</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting,</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; GtkWidget *grid, gint row)</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;{</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; GtkWidget *hbox;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordtype">int</span> resolution_w, resolution_h;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; gchar *res_str;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78a">RemminaProtocolWidgetResolutionMode</a> res_mode;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; res_mode = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_mode&quot;</span>, <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; resolution_w = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_width&quot;</span>, -1);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; resolution_h = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_height&quot;</span>, -1);</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="comment">/* If resolution_mode is non-existent (-1), then we try to calculate it</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="comment"> * as we did before having resolution_mode */</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>) {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span> (resolution_w &lt;= 0 || resolution_h &lt;= 0)</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>;</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="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; res_str = g_strdup_printf(<span class="stringliteral">&quot;%dx%d&quot;</span>, resolution_w, resolution_h);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; res_str = NULL;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Resolution&quot;</span>));</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; widget = gtk_radio_button_new_with_label(NULL, _(<span class="stringliteral">&quot;Use initial window size&quot;</span>));</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio = widget;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; widget = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio), _(<span class="stringliteral">&quot;Use client resolution&quot;</span>));</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_auto_radio = widget;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row, 1, 1);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; gtk_widget_show(hbox);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; gtk_widget_show(hbox);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row + 1, 1, 1);</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; widget = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio), _(<span class="stringliteral">&quot;Custom&quot;</span>));</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio = widget;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; widget = <a class="code" href="remmina__public_8c.html#a3796b536244067e9a85923b1cefa6cde">remmina_public_create_combo_text_d</a>(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>, res_str, NULL);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo = widget;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; widget = gtk_button_new_with_label(<span class="stringliteral">&quot;…&quot;</span>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4">remmina_file_editor_browse_resolution</a>), gfe);</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; g_signal_connect(G_OBJECT(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio), <span class="stringliteral">&quot;toggled&quot;</span>,</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo);</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"> 634</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>)</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio), TRUE);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d">RES_USE_CLIENT</a>)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_auto_radio), TRUE);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio), TRUE);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; gtk_widget_set_sensitive(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio)));</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; g_free(res_str);</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"> 646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586"> 647</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586">remmina_file_editor_create_assistance</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting,</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; GtkWidget *grid, gint row)</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;{</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; GtkWidget *widget;</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;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; widget = gtk_toggle_button_new_with_label(_(<span class="stringliteral">&quot;Assistance Mode&quot;</span>));</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;assistance_mode&quot;</span>, 0));</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_toggle = widget;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; g_signal_connect(widget, <span class="stringliteral">&quot;toggled&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a>), gfe);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;</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; widget = gtk_label_new(<span class="stringliteral">&quot;Assistance file&quot;</span>);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_END);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row+1, 1, 1);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file_label = widget;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;assistance_file&quot;</span>));</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row+1, 1, 1);</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file = widget;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; widget = gtk_label_new(<span class="stringliteral">&quot;Assistance Password&quot;</span>);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_END);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row+2, 1, 1);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password_label = widget;</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"> 683</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;assistance_pass&quot;</span>));</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row+2, 1, 1);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password = widget;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a>(NULL, gfe);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;}</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0"> 695</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value, gint left,</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; gint right, gchar *setting_name)</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; GtkWidget *widget;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; gtk_widget_set_margin_start(widget, left);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; gtk_widget_set_margin_end(widget, right);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; gtk_widget_set_margin_left(widget, left);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; gtk_widget_set_margin_right(widget, right);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col, row, 1, 1);</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"> 715</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col + 1, row, 1, 1);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; gtk_widget_set_name(widget, setting_name);</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; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), value);</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; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;}</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"><a class="line" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4"> 729</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value,</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; gchar *setting_name)</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;{</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(gfe, grid, row, col, label, value, 0, 40,</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; setting_name);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;}</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;</div><div class="line"><a name="l00738"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7"> 738</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7">remmina_file_editor_create_textarea</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value,</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; gchar *setting_name)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; GtkTextView *view;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; GtkTextBuffer *buffer;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; GtkTextIter start;</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; widget = gtk_text_view_new();</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; view = GTK_TEXT_VIEW(widget);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; gtk_text_view_set_top_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; gtk_text_view_set_bottom_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; gtk_text_view_set_right_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; gtk_text_view_set_monospace(view, TRUE);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">if</span> (value) {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; buffer = gtk_text_view_get_buffer(view);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; gtk_text_buffer_set_text(buffer, value, -1);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; gtk_text_buffer_get_start_iter(buffer, &amp;start);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; gtk_text_buffer_place_cursor(buffer, &amp;start);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; }</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; gtk_widget_set_size_request(GTK_WIDGET(view), 320, 300);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;}</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a"> 771</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gpointer *list,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keyword">const</span> gchar *value, gchar *setting_name)</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; GtkWidget *widget;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; widget = <a class="code" href="remmina__public_8c.html#a616258d3226ec1f1ecee6ce18aba535b">remmina_public_create_combo_map</a>(list, value, FALSE, gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;plugin-&gt;domain);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</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; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;}</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"><a class="line" href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965"> 793</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965">remmina_file_editor_create_combo</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *list,</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keyword">const</span> gchar *value, gchar *setting_name)</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;{</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; GtkWidget *widget;</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; widget = gtk_label_new(label);</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</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; widget = <a class="code" href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a>(list, value, FALSE);</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;}</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6"> 816</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; gint row, gint top, <span class="keyword">const</span> gchar *label, gboolean value,</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; gchar *setting_name)</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;{</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; widget = gtk_check_button_new_with_label(label);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, top, row, 1, 1);</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;}</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;<span class="keyword">static</span> GtkWidget *</div><div class="line"><a name="l00844"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa"> 844</a></span>&#160;<a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid, gint row, gint col, <span class="keyword">const</span> gchar *label,</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keyword">const</span> gchar *value, gint type, gchar *setting_name)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;{</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; GtkWidget *check;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; GtkWidget *hbox;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</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; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; gtk_widget_show(hbox);</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row, 1, 1);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; check = gtk_check_button_new();</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; gtk_widget_show(check);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), (value &amp;&amp; value[0] == <span class="charliteral">&#39;/&#39;</span>));</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; widget = gtk_file_chooser_button_new(label, type);</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(widget), value);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</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; g_signal_connect(G_OBJECT(check), <span class="stringliteral">&quot;toggled&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>), widget);</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>(GTK_TOGGLE_BUTTON(check), widget);</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> widget;</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"> 881</span>&#160;<span class="comment">// used to filter out invalid characters for REMMINA_PROTOCOL_SETTING_TYPE_INT</span></div><div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0"> 882</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0">remmina_file_editor_int_setting_filter</a>(GtkEditable *editable, <span class="keyword">const</span> gchar *text,</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; gint length, gint *position, gpointer data)</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;{</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; i++) {</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">if</span> (!isdigit(text[i]) &amp;&amp; text[i] != <span class="charliteral">&#39;-&#39;</span>) {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; g_signal_stop_emission_by_name(G_OBJECT(editable), <span class="stringliteral">&quot;insert-text&quot;</span>);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; }</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; }</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;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="comment">// used to filter out invalid characters for REMMINA_PROTOCOL_SETTING_TYPE_DOUBLE</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="comment">// &#39;.&#39; and &#39;,&#39; can&#39;t be used interchangeably! It depends on the language setting</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="comment">// of the user.</span></div><div class="line"><a name="l00896"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f"> 896</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f">remmina_file_editor_double_setting_filter</a>(GtkEditable *editable, <span class="keyword">const</span> gchar *text,</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; gint length, gint *position, gpointer data)</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; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; i++) {</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordflow">if</span> (!isdigit(text[i]) &amp;&amp; text[i] != <span class="charliteral">&#39;-&#39;</span> &amp;&amp; text[i] != <span class="charliteral">&#39;.&#39;</span> &amp;&amp; text[i] != <span class="charliteral">&#39;,&#39;</span>) {</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; g_signal_stop_emission_by_name(G_OBJECT(editable), <span class="stringliteral">&quot;insert-text&quot;</span>);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; }</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; }</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;}</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"><a class="line" href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0"> 907</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0">remmina_file_editor_create_int</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gint value,</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; gint left, gint right, gchar *setting_name)</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;{</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; gtk_widget_set_margin_start(widget, left);</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; gtk_widget_set_margin_end(widget, right);</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; gtk_widget_set_margin_left(widget, left);</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; gtk_widget_set_margin_right(widget, right);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col, row, 1, 1);</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160;</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col + 1, row, 1, 1);</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; gtk_widget_set_name(widget, setting_name);</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; <span class="comment">// Convert int to str.</span></div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordtype">int</span> length = snprintf(NULL, 0, <span class="stringliteral">&quot;%d&quot;</span>, value) + 1; <span class="comment">// +1 &#39;\0&#39; byte</span></div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordtype">char</span> *str = malloc(length);</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; snprintf(str, length, <span class="stringliteral">&quot;%d&quot;</span>, value);</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), str);</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; free(str);</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;insert-text&quot;</span>,</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0">remmina_file_editor_int_setting_filter</a>), NULL);</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;}</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"><a class="line" href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80"> 949</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80">remmina_file_editor_create_double</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe,</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; GtkWidget *grid, gint row, gint col,</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keyword">const</span> gchar *label, gdouble value, gint left,</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; gint right, gchar *setting_name)</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;{</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; gtk_widget_set_margin_start(widget, left);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; gtk_widget_set_margin_end(widget, right);</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; gtk_widget_set_margin_left(widget, left);</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; gtk_widget_set_margin_right(widget, right);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col, row, 1, 1);</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col + 1, row, 1, 1);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; gtk_widget_set_name(widget, setting_name);</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; <span class="comment">// Convert double to str.</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="keywordtype">int</span> length = snprintf(NULL, 0, <span class="stringliteral">&quot;%.8g&quot;</span>, value) + 1; <span class="comment">// +1 &#39;\0&#39; byte</span></div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordtype">char</span> *str = malloc(length);</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; snprintf(str, length, <span class="stringliteral">&quot;%f&quot;</span>, value);</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), str);</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; free(str);</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;insert-text&quot;</span>,</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f">remmina_file_editor_double_setting_filter</a>), NULL);</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;}</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;</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"><a class="line" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d"> 994</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *settings)</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;{</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; gint grid_row = 0;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; gint grid_column = 0;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; gchar **strarr;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; gchar *setting_name;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keyword">const</span> gchar *escaped;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="keywordflow">while</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; setting_name = (gchar *)(<a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(settings));</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keywordflow">switch</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a>) {</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92">REMMINA_PROTOCOL_SETTING_TYPE_SERVER</a>:</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <a class="code" href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae">remmina_file_editor_create_server</a>(gfe, settings, grid, grid_row);</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa">REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD</a>:</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; setting_name);</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; grid_row++;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350aa045109309280606ff11a9de1862e2ba">REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION</a>:</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <a class="code" href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5">remmina_file_editor_create_resolution</a>(gfe, settings, grid, grid_row);</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; grid_row ++;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a16a83c00dba8d929cce531d5a0181a2d">REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE</a>:</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586">remmina_file_editor_create_assistance</a>(gfe, settings, grid, grid_row);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; grid_row += 3;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425">REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP</a>:</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; strarr = <a class="code" href="remmina__pref_8c.html#a745bbef1d48a7462f8db997821742395">remmina_pref_keymap_groups</a>();</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; priv-&gt;keymap_combo = <a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(gfe, grid,</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; grid_row + 1, 0,</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; _(<span class="stringliteral">&quot;Keyboard mapping&quot;</span>), (<span class="keyword">const</span> gpointer *)strarr,</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;keymap&quot;</span>),</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; setting_name);</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; g_strfreev(strarr);</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; grid_row++;</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>:</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; setting_name);</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; grid_row++;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350aadb70e5d52a6eccc1aaf6f1428c1fb11">REMMINA_PROTOCOL_SETTING_TYPE_TEXTAREA</a>:</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; escaped = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; escaped = g_uri_unescape_string(escaped, NULL);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7">remmina_file_editor_create_textarea</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>), escaped,</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; setting_name);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; grid_row++;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a>:</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; (<span class="keyword">const</span> gpointer *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>,</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; setting_name);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ae2237632b23d3c90a842bc5bc8302ec5">REMMINA_PROTOCOL_SETTING_TYPE_COMBO</a>:</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965">remmina_file_editor_create_combo</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; (<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>,</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; setting_name);</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>:</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(gfe, grid, grid_row, grid_column,</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, setting_name, FALSE),</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; setting_name);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a31ee66fffaa245ae411aba0c296ad9da">REMMINA_PROTOCOL_SETTING_TYPE_FILE</a>:</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; GTK_FILE_CHOOSER_ACTION_OPEN, setting_name);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a68b440d346168aadb6fd728ea394607f">REMMINA_PROTOCOL_SETTING_TYPE_FOLDER</a>:</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; setting_name);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ab4c68b7df42ebd08e953cc72c5b97583">REMMINA_PROTOCOL_SETTING_TYPE_INT</a>:</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0">remmina_file_editor_create_int</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, setting_name, 0),</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; 0, 40, setting_name);</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; grid_row++;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a25c4af05ecfc7053db40ed0997389b91">REMMINA_PROTOCOL_SETTING_TYPE_DOUBLE</a>:</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80">remmina_file_editor_create_double</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <a class="code" href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da">remmina_file_get_double</a>(priv-&gt;remmina_file, setting_name, 0.0f),</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; 0, 40, setting_name);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; grid_row++;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="comment">/* If the setting wants compactness, move to the next column */</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ab434990a6fe70b7e8a4a8b11129527a6">compact</a>)</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; grid_column++;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="comment">/* Add a new settings row and move to the first column</span></div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;<span class="comment"> * if the setting doesn’t want the compactness</span></div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;<span class="comment"> * or we already have two columns */</span></div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keywordflow">if</span> (!settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ab434990a6fe70b7e8a4a8b11129527a6">compact</a> || grid_column &gt; 1) {</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; grid_row++;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; grid_column = 0;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; }</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; settings++;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;}</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;</div><div class="line"><a name="l01154"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c"> 1154</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c">remmina_file_editor_create_behavior_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;{</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keyword">const</span> gchar *cs;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="comment">/* The Behavior tab (implementation) */</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Behavior&quot;</span>), 20, 2);</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="comment">/* Execute Command frame */</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;Execute a Command&quot;</span>), 0, 1, 2);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="comment">/* PRE connection command */</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;precommand&quot;</span>);</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(gfe, grid, 2, 0, _(<span class="stringliteral">&quot;Before connecting&quot;</span>), cs, 24, 26, <span class="stringliteral">&quot;precommand&quot;</span>);</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; priv-&gt;behavior_precommand_entry = widget;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; gtk_entry_set_placeholder_text(GTK_ENTRY(widget), _(<span class="stringliteral">&quot;command %h %u %t %U %p %g --option&quot;</span>));</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; gtk_widget_set_tooltip_markup(widget, _(cmd_tips));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">/* POST connection command */</span></div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;postcommand&quot;</span>);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(gfe, grid, 3, 0, _(<span class="stringliteral">&quot;After connecting&quot;</span>), cs, 24, 16, <span class="stringliteral">&quot;postcommand&quot;</span>);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; priv-&gt;behavior_postcommand_entry = widget;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; gtk_entry_set_placeholder_text(GTK_ENTRY(widget), _(<span class="stringliteral">&quot;/path/to/command -opt1 arg %h %u %t -opt2 %U %p %g&quot;</span>));</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; gtk_widget_set_tooltip_markup(widget, _(cmd_tips));</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="comment">/* Startup frame */</span></div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;Start-up&quot;</span>), 4, 1, 2);</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="comment">/* Autostart profile option */</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; priv-&gt;behavior_autostart_check = <a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(gfe, grid, 6, 1, _(<span class="stringliteral">&quot;Auto-start this profile&quot;</span>),</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;enable-autostart&quot;</span>, FALSE), <span class="stringliteral">&quot;enable-autostart&quot;</span>);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="comment">/* Startup frame */</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;Connection profile security&quot;</span>), 8, 1, 2);</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="comment">/* Autostart profile option */</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; priv-&gt;behavior_lock_check = <a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(gfe, grid, 10, 1, _(<span class="stringliteral">&quot;Require password to connect or edit the profile&quot;</span>),</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;profile-lock&quot;</span>, FALSE), <span class="stringliteral">&quot;profile-lock&quot;</span>);</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;}</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01198"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7"> 1198</a></span>&#160;<span class="keyword">static</span> gpointer <a class="code" href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7">ssh_tunnel_auth_list</a>[] =</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;{</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="stringliteral">&quot;0&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Password&quot;</span>),</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="stringliteral">&quot;1&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;SSH identity file&quot;</span>),</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="stringliteral">&quot;2&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;SSH agent&quot;</span>),</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="stringliteral">&quot;3&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Public key (automatic)&quot;</span>),</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="stringliteral">&quot;4&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Kerberos (GSSAPI)&quot;</span>),</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; NULL</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;};</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;</div><div class="line"><a name="l01209"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23"> 1209</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23">remmina_file_editor_create_ssh_tunnel_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7">RemminaProtocolSSHSetting</a> ssh_setting)</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;{</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="keyword">const</span> gchar *cs;</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; gchar *s;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; gchar *p;</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; gint row = 0;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a8f910597287a73453a5f09ca0037d093">REMMINA_PROTOCOL_SSH_SETTING_NONE</a>)</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="comment">/* The SSH tab (implementation) */</span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL,</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; _(<span class="stringliteral">&quot;SSH Tunnel&quot;</span>), 9, 3);</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; widget = gtk_toggle_button_new_with_label(_(<span class="stringliteral">&quot;Enable SSH tunnel&quot;</span>));</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;toggled&quot;</span>,</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a>), gfe);</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; priv-&gt;ssh_tunnel_enabled_check = widget;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; widget = gtk_check_button_new_with_label(_(<span class="stringliteral">&quot;Tunnel via loopback address&quot;</span>));</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 2, 1);</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; priv-&gt;ssh_tunnel_loopback_check = widget;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="comment">// 1</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; row++;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="comment">/* SSH Server group */</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">switch</span> (ssh_setting) {</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a>:</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Same server at port %i&quot;</span>), DEFAULT_SSH_PORT);</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; widget = gtk_radio_button_new_with_label(NULL, s);</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; g_free(s);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 3, 1);</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = widget;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="comment">// 2</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; row++;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; widget = gtk_radio_button_new_with_label_from_widget(</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; GTK_RADIO_BUTTON(priv-&gt;ssh_tunnel_server_default_radio), _(<span class="stringliteral">&quot;Custom&quot;</span>));</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;toggled&quot;</span>,</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a>), gfe);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = widget;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 100);</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; gtk_widget_set_tooltip_markup(widget, _(server_tips2));</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 2, 1);</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; priv-&gt;ssh_tunnel_server_entry = widget;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="comment">// 3</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; row++;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a>:</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = NULL;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = NULL;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; priv-&gt;ssh_tunnel_server_entry = <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, 1, 0,</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; _(<span class="stringliteral">&quot;Server&quot;</span>), NULL, <span class="stringliteral">&quot;ssh_reverse_tunnel_server&quot;</span>);</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; gtk_widget_set_tooltip_markup(priv-&gt;ssh_tunnel_server_entry, _(server_tips));</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="comment">// 2</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; row++;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a113aff9a0339ebe347ddf738d8c1f371">REMMINA_PROTOCOL_SSH_SETTING_SSH</a>:</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7aef0536e2d0186b8cb8d8ba7a4a1a51c3">REMMINA_PROTOCOL_SSH_SETTING_SFTP</a>:</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = NULL;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = NULL;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; priv-&gt;ssh_tunnel_server_entry = NULL;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; }</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="comment">/* This is not used? */</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; p = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo));</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7aef0536e2d0186b8cb8d8ba7a4a1a51c3">REMMINA_PROTOCOL_SSH_SETTING_SFTP</a>) {</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, row, 1,</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; _(<span class="stringliteral">&quot;Start-up path&quot;</span>), NULL, <span class="stringliteral">&quot;start-up-path&quot;</span>);</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;execpath&quot;</span>);</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, <span class="stringliteral">&quot;execpath&quot;</span>, widget);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="comment">// 2</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; row++;</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; }</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="comment">/* SSH Authentication frame */</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;SSH Authentication&quot;</span>), row, 6, 1);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="comment">// 5</span></div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; row += 2;</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; priv-&gt;ssh_tunnel_auth_combo = <a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; _(<span class="stringliteral">&quot;Authentication type&quot;</span>),</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; (<span class="keyword">const</span> gpointer *)<a class="code" href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7">ssh_tunnel_auth_list</a>,</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>), <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; row++;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a> ||</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a>) {</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; priv-&gt;ssh_tunnel_username_entry =</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; _(<span class="stringliteral">&quot;Username&quot;</span>), NULL, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <span class="comment">// 5</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; row++;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; }</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; _(<span class="stringliteral">&quot;Password&quot;</span>),</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>),</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>);</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; priv-&gt;ssh_tunnel_auth_password = widget;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; row++;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; priv-&gt;ssh_tunnel_privatekey_chooser = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; _(<span class="stringliteral">&quot;SSH private key file&quot;</span>),</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>),</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; GTK_FILE_CHOOSER_ACTION_OPEN, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>);</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; row++;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; priv-&gt;ssh_tunnel_certfile_chooser = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; _(<span class="stringliteral">&quot;SSH certificate file&quot;</span>),</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>),</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; GTK_FILE_CHOOSER_ACTION_OPEN, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; row++;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Password to unlock private key&quot;</span>));</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 2, 1);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; priv-&gt;ssh_tunnel_passphrase = widget;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; row++;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="comment">/* Set the values */</span></div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a>) {</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_enabled_check),</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE));</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_loopback_check),</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>, FALSE));</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cs ? priv-&gt;ssh_tunnel_server_custom_radio : priv-&gt;ssh_tunnel_server_default_radio), TRUE);</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; gtk_entry_set_text(GTK_ENTRY(priv-&gt;ssh_tunnel_server_entry),</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a>) {</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_enabled_check),</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE));</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_loopback_check),</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>, FALSE));</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; gtk_entry_set_text(GTK_ENTRY(priv-&gt;ssh_tunnel_server_entry),</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; }</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a>(NULL, gfe, ssh_setting);</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; gtk_widget_show_all(grid);</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; g_free(p);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;}</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38"> 1377</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38">remmina_file_editor_create_all_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;{</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> notes_settings[] =</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; {</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350aadb70e5d52a6eccc1aaf6f1428c1fb11">REMMINA_PROTOCOL_SETTING_TYPE_TEXTAREA</a>, <span class="stringliteral">&quot;notes_text&quot;</span>, NULL, FALSE, NULL, NULL },</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>, NULL, NULL, FALSE, NULL, NULL }</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; };</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea">remmina_file_editor_create_notebook_container</a>(gfe);</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="comment">/* The Basic tab */</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="keywordflow">if</span> (priv-&gt;plugin-&gt;basic_settings) {</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Basic&quot;</span>), 20, 2);</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(gfe, grid, priv-&gt;plugin-&gt;basic_settings);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; }</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="comment">/* The Advanced tab */</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <span class="keywordflow">if</span> (priv-&gt;plugin-&gt;advanced_settings) {</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Advanced&quot;</span>), 20, 2);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(gfe, grid, priv-&gt;plugin-&gt;advanced_settings);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; }</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="comment">/* The Behavior tab */</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c">remmina_file_editor_create_behavior_tab</a>(gfe);</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="comment">/* The SSH tab */</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <a class="code" href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23">remmina_file_editor_create_ssh_tunnel_tab</a>(gfe, priv-&gt;plugin-&gt;ssh_setting);</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <span class="comment">/* Notes tab */</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Notes&quot;</span>), 1, 1);</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(gfe, grid, notes_settings);</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;}</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;</div><div class="line"><a name="l01414"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16"> 1414</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a>(GtkComboBox *combo, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;{</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; gchar *protocol;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keywordflow">if</span> (priv-&gt;config_container) {</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; gtk_widget_destroy(priv-&gt;config_container);</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; priv-&gt;config_container = NULL;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; gtk_widget_destroy(priv-&gt;config_viewport);</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; priv-&gt;config_viewport = NULL;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; gtk_widget_destroy(priv-&gt;config_scrollable);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; priv-&gt;config_scrollable = NULL;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; }</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; priv-&gt;server_combo = NULL;</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; priv-&gt;resolution_iws_radio = NULL;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; priv-&gt;resolution_auto_radio = NULL;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; priv-&gt;resolution_custom_radio = NULL;</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; priv-&gt;resolution_custom_combo = NULL;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; priv-&gt;keymap_combo = NULL;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; priv-&gt;ssh_tunnel_enabled_check = NULL;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; priv-&gt;ssh_tunnel_loopback_check = NULL;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = NULL;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = NULL;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; priv-&gt;ssh_tunnel_server_entry = NULL;</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; priv-&gt;ssh_tunnel_username_entry = NULL;</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; priv-&gt;ssh_tunnel_auth_combo = NULL;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; priv-&gt;ssh_tunnel_auth_password = NULL;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; priv-&gt;ssh_tunnel_privatekey_chooser = NULL;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; priv-&gt;ssh_tunnel_certfile_chooser = NULL;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; g_hash_table_remove_all(priv-&gt;setting_widgets);</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; protocol = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(combo);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keywordflow">if</span> (protocol) {</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; priv-&gt;plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; protocol);</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; g_free(protocol);</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38">remmina_file_editor_create_all_settings</a>(gfe);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; }</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;}</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;</div><div class="line"><a name="l01458"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb"> 1458</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb">remmina_file_editor_save_behavior_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;{</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;precommand&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;behavior_precommand_entry)));</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;postcommand&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;behavior_postcommand_entry)));</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; gboolean autostart_enabled = (priv-&gt;behavior_autostart_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;behavior_autostart_check)) : FALSE);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;enable-autostart&quot;</span>, autostart_enabled);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; gboolean lock_enabled = (priv-&gt;behavior_lock_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;behavior_lock_check)) : FALSE);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;profile-lock&quot;</span>, lock_enabled);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;}</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;</div><div class="line"><a name="l01472"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7"> 1472</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7">remmina_file_editor_save_ssh_tunnel_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;{</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; gboolean ssh_tunnel_enabled;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <span class="keywordtype">int</span> ssh_tunnel_auth;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; ssh_tunnel_enabled = (priv-&gt;ssh_tunnel_enabled_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_enabled_check)) : FALSE);</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file,</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>,</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; (priv-&gt;ssh_tunnel_loopback_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_loopback_check)) : FALSE));</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, ssh_tunnel_enabled);</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>,</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;ssh_tunnel_auth_combo)));</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>,</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; (ssh_tunnel_enabled ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_username_entry)) : NULL));</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>,</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; (ssh_tunnel_enabled &amp;&amp; priv-&gt;ssh_tunnel_server_entry &amp;&amp; (priv-&gt;ssh_tunnel_server_custom_radio == NULL || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_server_custom_radio))) ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_server_entry)) : NULL));</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; ssh_tunnel_auth = gtk_combo_box_get_active(GTK_COMBO_BOX(priv-&gt;ssh_tunnel_auth_combo));</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>,</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; ssh_tunnel_auth);</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; </div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="comment">// If box is unchecked for private key and certfile file choosers,</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <span class="comment">// set the string to NULL in the remmina file </span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordflow">if</span> (gtk_widget_get_sensitive(priv-&gt;ssh_tunnel_privatekey_chooser)) {</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>,</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; (priv-&gt;ssh_tunnel_privatekey_chooser ? gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(priv-&gt;ssh_tunnel_privatekey_chooser)) : NULL));</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; }</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>, NULL);</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; }</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; </div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">if</span> (gtk_widget_get_sensitive(priv-&gt;ssh_tunnel_certfile_chooser)) {</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>,</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; (priv-&gt;ssh_tunnel_certfile_chooser ? gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(priv-&gt;ssh_tunnel_certfile_chooser)) : NULL));</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; }</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>, NULL);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; }</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>,</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; (ssh_tunnel_enabled &amp;&amp; (ssh_tunnel_auth == <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>)) ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_auth_password)) : NULL);</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span>,</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; (ssh_tunnel_enabled &amp;&amp; (ssh_tunnel_auth == <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a> || ssh_tunnel_auth == <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a>)) ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_passphrase)) : NULL);</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;}</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;</div><div class="line"><a name="l01533"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca"> 1533</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; gchar * setting_name_to_validate,</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; gconstpointer value,</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; GError ** err)</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;{</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keywordflow">if</span> (!setting_name_to_validate || !value || !gfe) {</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">if</span> (!setting_name_to_validate) {</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; g_critical(_(<span class="stringliteral">&quot;(%s: %i): Can&#39;t validate setting &#39;%s&#39; since &#39;value&#39; or &#39;gfe&#39; &quot;</span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="stringliteral">&quot;are NULL!&quot;</span>),</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; __func__, __LINE__, setting_name_to_validate);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; g_critical(_(<span class="stringliteral">&quot;(%s: %i): Can&#39;t validate user input since &quot;</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <span class="stringliteral">&quot;&#39;setting_name_to_validate&#39;, &#39;value&#39; or &#39;gfe&#39; are NULL!&quot;</span>),</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; __func__, __LINE__);</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; }</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; g_set_error(err, 1, 1, _(<span class="stringliteral">&quot;Internal error.&quot;</span>));</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; }</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="keywordflow">if</span> (strcmp(setting_name_to_validate, <span class="stringliteral">&quot;notes_text&quot;</span>) == 0) {</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <span class="comment">// Not a plugin setting. Bail out early.</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; }</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting_iter;</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; protocol_plugin = priv-&gt;plugin;</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; setting_iter = protocol_plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">basic_settings</a>;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <span class="comment">// gboolean found = FALSE;</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <span class="keywordflow">while</span> (setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <span class="keywordflow">if</span> (setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a> == NULL) {</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; g_error(<span class="stringliteral">&quot;Internal error: a setting name in protocol plugin %s is &quot;</span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="stringliteral">&quot;null. Please fix RemminaProtocolSetting struct content.&quot;</span>,</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; protocol_plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a>);</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((gchar *)setting_name_to_validate) {</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">if</span> (strcmp((gchar *)setting_name_to_validate, setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>) == 0) {</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <span class="comment">// found = TRUE;</span></div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; gpointer validator_data = setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6086b43049072a3a3245c4a45f43dbc5">validator_data</a>;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; GCallback validator = setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a94df87db138d4e44e81b3e6c99148ed3">validator</a>;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="comment">// Default behaviour is that everything is valid,</span></div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="comment">// except a validator is given and its returned GError is not NULL.</span></div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; GError *err_ret = NULL;</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; g_debug(<span class="stringliteral">&quot;Checking setting &#39;%s&#39; for validation.&quot;</span>, setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <span class="keywordflow">if</span> (validator != NULL) {</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="comment">// Looks weird but it calls the setting&#39;s validator</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <span class="comment">// function using setting_name_to_validate, value and</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="comment">// validator_data as parameters and it returns a GError*.</span></div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; err_ret = ((GError * (*)(gpointer, gconstpointer, gpointer)) validator)(setting_name_to_validate, value, validator_data);</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; }</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="keywordflow">if</span> (err_ret) {</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; g_debug(<span class="stringliteral">&quot;it has a validator function and it had an error!&quot;</span>);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="comment">// pass err (returned value) to function caller.</span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; *err = err_ret;</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; }</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; }</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; }</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; setting_iter++;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; }</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; <span class="comment">// if (!found) {</span></div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="comment">// TOO VERBOSE:</span></div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; <span class="comment">// g_warning(&quot;%s is not a plugin setting!&quot;, setting_name_to_validate);</span></div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; }</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;}</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;</div><div class="line"><a name="l01611"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9"> 1611</a></span>&#160;<span class="keyword">static</span> GError *<a class="code" href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9">remmina_file_editor_update_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; GtkWidget ** failed_widget)</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;{</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; GHashTableIter iter;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; gpointer key;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; gpointer widget;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; GtkTextBuffer *buffer;</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; gchar *escaped, *unescaped;</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; GtkTextIter start, end;</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; GError *err = NULL;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; *failed_widget = NULL;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; g_hash_table_iter_init(&amp;iter, priv-&gt;setting_widgets);</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <span class="keywordflow">while</span> (g_hash_table_iter_next(&amp;iter, &amp;key, &amp;widget)) {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; </div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="comment">// We don&#39;t want to save or validate grayed-out settings.</span></div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="comment">// If widget is a file chooser, it was made not sensitive because</span></div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <span class="comment">// the box was unchecked. In that case, don&#39;t continue. The </span></div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="comment">// relevant file strings will be set to NULL in the remmina file.</span></div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="keywordflow">if</span> (!gtk_widget_get_sensitive(GTK_WIDGET(widget)) &amp;&amp; !GTK_IS_FILE_CHOOSER(widget)) {</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; g_debug(<span class="stringliteral">&quot;Grayed-out setting-widget &#39;%s&#39; will not be saved.&quot;</span>,</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; gtk_widget_get_name(widget));</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; }</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">if</span> (GTK_IS_ENTRY(widget)) {</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="keyword">const</span> gchar *value = gtk_entry_get_text(GTK_ENTRY(widget));</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, value, &amp;err)) {</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; }</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_TEXT_VIEW(widget)) {</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; gtk_text_buffer_get_start_iter(buffer, &amp;start);</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; gtk_text_buffer_get_end_iter(buffer, &amp;end);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; unescaped = gtk_text_buffer_get_text(buffer, &amp;start, &amp;end, FALSE);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; escaped = g_uri_escape_string(unescaped, NULL, TRUE);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, escaped, &amp;err)) {</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; }</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, escaped);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; g_free(escaped);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_COMBO_BOX(widget)) {</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; gchar *value = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(widget));</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, value, &amp;err)) {</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; }</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_FILE_CHOOSER(widget)) {</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; gchar *value = gtk_widget_get_sensitive(GTK_WIDGET(widget)) ? gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)) : NULL;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="keywordflow">if</span> (!gtk_widget_get_sensitive(GTK_WIDGET(widget))) {</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; }</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, value, &amp;err)) {</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; g_free(value);</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; }</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; g_free(value);</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_TOGGLE_BUTTON(widget)) {</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, &amp;value, &amp;err)) {</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; }</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; }</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <span class="keywordflow">return</span> err;</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; }</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;}</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5"> 1716</a></span>&#160;<span class="keyword">static</span> GError *<a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; GtkWidget ** failed_widget)</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;{</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordtype">int</span> res_w, res_h;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; gchar *custom_resolution;</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78a">RemminaProtocolWidgetResolutionMode</a> res_mode;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;name&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;name_entry)));</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;labels&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;labels_entry)));</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;group&quot;</span>,</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; (priv-&gt;group_combo ? <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;group_combo)) : NULL));</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;protocol&quot;</span>,</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo)));</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;server&quot;</span>,</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; (priv-&gt;server_combo ? <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;server_combo)) : NULL));</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keywordflow">if</span> (priv-&gt;resolution_auto_radio) {</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <span class="keywordflow">if</span> (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;resolution_auto_radio))) {</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <span class="comment">/* Resolution is set to auto (which means: Use client fullscreen resolution, aka use client resolution) */</span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; res_w = res_h = 0;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d">RES_USE_CLIENT</a>;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;resolution_iws_radio))) {</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="comment">/* Resolution is set to initial window size */</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; res_w = res_h = 0;</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="comment">/* Resolution is set to a value from the list */</span></div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; custom_resolution = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;resolution_custom_combo));</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__public_8c.html#aaf3fdb980c24cd06965b85ebcdd79173">remmina_public_split_resolution_string</a>(custom_resolution, &amp;res_w, &amp;res_h))</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; g_free(custom_resolution);</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; }</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;resolution_mode&quot;</span>, res_mode);</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;resolution_width&quot;</span>, res_w);</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;resolution_height&quot;</span>, res_h);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; }</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <span class="keywordflow">if</span> (priv-&gt;assistance_toggle){</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <span class="keywordflow">if</span> (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;assistance_toggle))) {</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_file&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;assistance_file)));</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_pass&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;assistance_password)));</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_mode&quot;</span>, 1);</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; }<span class="keywordflow">else</span>{</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_mode&quot;</span>, 0);</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; }</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; </div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; }</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; <span class="keywordflow">if</span> (priv-&gt;keymap_combo)</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;keymap&quot;</span>,</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;keymap_combo)));</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb">remmina_file_editor_save_behavior_tab</a>(gfe);</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7">remmina_file_editor_save_ssh_tunnel_tab</a>(gfe);</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9">remmina_file_editor_update_settings</a>(gfe, failed_widget);</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;}</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;</div><div class="line"><a name="l01782"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6"> 1782</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6">remmina_file_editor_on_default</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;{</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *gf;</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; GtkWidget *dialog;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; }</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; gf = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; <a class="code" href="remmina__file_8c.html#ab03b042504c09c1ad880ac126a703114">remmina_file_set_filename</a>(gf, <a class="code" href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a>);</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; <span class="comment">/* Clear properties that should never be default */</span></div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;name&quot;</span>, NULL);</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;server&quot;</span>, NULL);</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;password&quot;</span>, NULL);</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;precommand&quot;</span>, NULL);</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;postcommand&quot;</span>, NULL);</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>, NULL);</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>, NULL);</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span>, NULL);</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(gf);</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(gf);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; dialog = gtk_message_dialog_new(GTK_WINDOW(gfe), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO,</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; GTK_BUTTONS_OK, _(<span class="stringliteral">&quot;Default settings saved.&quot;</span>));</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;}</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;</div><div class="line"><a name="l01820"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad"> 1820</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad">remmina_file_editor_on_save</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;{</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; }</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a>(gfe);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <a class="code" href="remmina__icon_8c.html#af80ed314f91d653237249d839c7fc3b2">remmina_icon_populate_menu</a>();</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;}</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;</div><div class="line"><a name="l01840"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25"> 1840</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25">remmina_file_editor_on_connect</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;{</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *gf;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; }</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; gf = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="comment">/* Put server into name for &quot;Quick Connect&quot; */</span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(gf) == NULL)</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;name&quot;</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gf, <span class="stringliteral">&quot;server&quot;</span>));</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; gf-&gt;prevent_saving = TRUE;</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; <a class="code" href="rcw_8c.html#a1b7a771392e15e527005305e71cc2546">rcw_open_from_file</a>(gf);</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;}</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;</div><div class="line"><a name="l01862"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e"> 1862</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e">remmina_file_editor_on_save_connect</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;{</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *gf;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; }</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a>(gfe);</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; <a class="code" href="remmina__icon_8c.html#af80ed314f91d653237249d839c7fc3b2">remmina_icon_populate_menu</a>();</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; gf = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; <span class="comment">/* Put server into name for Quick Connect */</span></div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(gf) == NULL)</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;name&quot;</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gf, <span class="stringliteral">&quot;server&quot;</span>));</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; <a class="code" href="rcw_8c.html#a1b7a771392e15e527005305e71cc2546">rcw_open_from_file</a>(gf);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;}</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;</div><div class="line"><a name="l01889"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3"> 1889</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3">remmina_file_editor_on_cancel</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;{</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;}</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;</div><div class="line"><a name="l01895"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a9afd8d41c66f547320930eb331f3124d"> 1895</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a9afd8d41c66f547320930eb331f3124d">remmina_file_editor_init</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;{</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; priv = g_new0(<a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a>, 1);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a> = priv;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; <span class="comment">/* Create the editor dialog */</span></div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; gtk_window_set_title(GTK_WINDOW(gfe), _(<span class="stringliteral">&quot;Remote Connection Profile&quot;</span>));</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;_Cancel&quot;</span>)), GTK_RESPONSE_CANCEL);</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3">remmina_file_editor_on_cancel</a>), gfe);</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; <span class="comment">/* Default button */</span></div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;Save as Default&quot;</span>)), GTK_RESPONSE_OK);</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; gtk_widget_set_tooltip_text(GTK_WIDGET(widget), _(<span class="stringliteral">&quot;Use the current settings as the default for all new connection profiles&quot;</span>));</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6">remmina_file_editor_on_default</a>), gfe);</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;_Save&quot;</span>)), GTK_RESPONSE_APPLY);</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad">remmina_file_editor_on_save</a>), gfe);</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; gtk_widget_set_sensitive(widget, FALSE);</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; priv-&gt;save_button = widget;</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;Connect&quot;</span>)), GTK_RESPONSE_ACCEPT);</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25">remmina_file_editor_on_connect</a>), gfe);</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;_Save and Connect&quot;</span>)), GTK_RESPONSE_OK);</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; gtk_widget_set_can_default(widget, TRUE);</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e">remmina_file_editor_on_save_connect</a>), gfe);</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; gtk_dialog_set_default_response(GTK_DIALOG(gfe), GTK_RESPONSE_OK);</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; gtk_window_set_default_size(GTK_WINDOW(gfe), 800, 600);</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; g_signal_connect(G_OBJECT(gfe), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f">remmina_file_editor_destroy</a>), NULL);</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; g_signal_connect(G_OBJECT(gfe), <span class="stringliteral">&quot;realize&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b">remmina_file_editor_on_realize</a>), NULL);</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; priv-&gt;setting_widgets = g_hash_table_new(g_str_hash, g_str_equal);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; <a class="code" href="remmina__widget__pool_8c.html#ae3c9c9853eb5bedbfeadbfac1d495b95">remmina_widget_pool_register</a>(GTK_WIDGET(gfe));</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;}</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;</div><div class="line"><a name="l01938"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b"> 1938</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b">remmina_file_editor_iterate_protocol</a>(gchar *protocol, <a class="code" href="struct___remmina_plugin.html">RemminaPlugin</a> *plugin, gpointer data)</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;{</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe = REMMINA_FILE_EDITOR(data);</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; GtkListStore *store;</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; GtkTreeIter iter;</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; gboolean first;</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;protocol_combo)));</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; first = !gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &amp;iter);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; gtk_list_store_append(store, &amp;iter);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; gtk_list_store_set(store, &amp;iter, 0, protocol, 1, g_dgettext(plugin-&gt;<a class="code" href="struct___remmina_plugin.html#a024d3e6d752dd29828b31c60c8c7c201">domain</a>, plugin-&gt;<a class="code" href="struct___remmina_plugin.html#a4ac66b7ebefb9bd8167737eb1af83cde">description</a>), 2,</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; ((<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)plugin)-&gt;icon_name, -1);</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <span class="keywordflow">if</span> (first || g_strcmp0(protocol, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;protocol&quot;</span>)) == 0)</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; gtk_combo_box_set_active_iter(GTK_COMBO_BOX(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;protocol_combo), &amp;iter);</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;}</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01960"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#add382dd8f40444b928e78b293a86a257"> 1960</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;{</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; gtk_widget_set_sensitive(priv-&gt;group_combo, TRUE);</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; gtk_widget_set_sensitive(priv-&gt;save_button, TRUE);</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;}</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;</div><div class="line"><a name="l01970"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b"> 1970</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a>(GtkEditable *editable, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;{</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file) == NULL) {</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <span class="comment">/* TODO: Probably to be removed */</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(gfe);</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <a class="code" href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a>(<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file));</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(gfe);</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; }</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;}</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;</div><div class="line"><a name="l01987"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#a3866832d550ceac91d608900df4c8056"> 1987</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;{</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file) == NULL) {</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; <a class="code" href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a>(<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file));</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; }</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;}</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;</div><div class="line"><a name="l02001"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#a08327d6951c345808628dbb5784aba06"> 2001</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;{</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; gchar *groups;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; gchar *s;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <span class="keyword">const</span> gchar *cs;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; gfe = REMMINA_FILE_EDITOR(g_object_new(REMMINA_TYPE_FILE_EDITOR, NULL));</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; priv-&gt;remmina_file = remminafile;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile) == NULL)</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; gtk_dialog_set_response_sensitive(GTK_DIALOG(gfe), GTK_RESPONSE_APPLY, FALSE);</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; <span class="comment">/* Create the &quot;Profile&quot; group on the top (for name and protocol) */</span></div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; grid = gtk_grid_new();</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; gtk_widget_show(grid);</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; gtk_grid_set_row_spacing(GTK_GRID(grid), 4);</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 8);</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; gtk_grid_set_column_homogeneous(GTK_GRID(grid), TRUE);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(grid), 8);</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(gfe))), grid, FALSE, FALSE, 2);</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <span class="comment">// remmina_public_create_group(GTK_GRID(grid), _(&quot;Profile&quot;), 0, 4, 3);</span></div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; gboolean profile_file_exists = (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile) != NULL);</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; <span class="comment">/* Profile: Name */</span></div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Name&quot;</span>));</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 3, 2, 1);</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 10);</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, 3, 3, 1);</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 100);</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; priv-&gt;name_entry = widget;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; <span class="keywordflow">if</span> (!profile_file_exists) {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), _(<span class="stringliteral">&quot;Quick Connect&quot;</span>));</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 16, 0)</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; gtk_entry_grab_focus_without_selecting(GTK_ENTRY(widget));</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;changed&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a>), gfe);</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;name&quot;</span>);</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; }</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; <span class="comment">/* Profile: Group */</span></div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Group&quot;</span>));</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 6, 2, 1);</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; groups = <a class="code" href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a>();</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; priv-&gt;group_combo = <a class="code" href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a>(groups, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;group&quot;</span>), FALSE);</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; g_free(groups);</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; gtk_widget_show(priv-&gt;group_combo);</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; gtk_grid_attach(GTK_GRID(grid), priv-&gt;group_combo, 1, 6, 3, 1);</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; gtk_widget_set_sensitive(priv-&gt;group_combo, FALSE);</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Use &#39;%s&#39; as subgroup delimiter&quot;</span>), <span class="stringliteral">&quot;/&quot;</span>);</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; gtk_widget_set_tooltip_text(priv-&gt;group_combo, s);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; g_free(s);</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; <span class="comment">/* Profile: Labels */</span></div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Labels&quot;</span>));</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 9, 2, 1);</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 10);</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, 9, 3, 1);</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 255);</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; priv-&gt;labels_entry = widget;</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <span class="keywordflow">if</span> (!profile_file_exists) {</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; gtk_widget_set_tooltip_text(widget, _(<span class="stringliteral">&quot;Label1,Label2&quot;</span>));</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 16, 0)</span></div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; gtk_entry_grab_focus_without_selecting(GTK_ENTRY(widget));</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;changed&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a>), gfe);</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;labels&quot;</span>);</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; }</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; <span class="comment">/* Profile: Protocol */</span></div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Protocol&quot;</span>));</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 12, 2, 1);</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; widget = <a class="code" href="remmina__public_8c.html#ab4a593956dfe89aba3242a5c264a681f">remmina_public_create_combo</a>(TRUE);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, 12, 3, 1);</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; priv-&gt;protocol_combo = widget;</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; <a class="code" href="remmina__plugin__manager_8c.html#a13f13a6a4280268656f258cb5aeff031">remmina_plugin_manager_for_each_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, <a class="code" href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b">remmina_file_editor_iterate_protocol</a>, gfe);</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;changed&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a>), gfe);</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; <span class="comment">/* Create the &quot;Preference&quot; frame */</span></div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; widget = gtk_event_box_new();</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(gfe))), widget, TRUE, TRUE, 2);</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; priv-&gt;config_box = widget;</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; priv-&gt;config_container = NULL;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; priv-&gt;config_scrollable = NULL;</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo), gfe);</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(gfe);</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; <span class="keywordflow">return</span> GTK_WIDGET(gfe);</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;}</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;</div><div class="line"><a name="l02130"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#aa4e8657ca722e4cce3f3c42c0cfec51e"> 2130</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;{</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a>(NULL, NULL);</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;}</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;</div><div class="line"><a name="l02136"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#ab563344276cbcdf0fcea05b0b64c7aeb"> 2136</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a>(<span class="keyword">const</span> gchar *server, <span class="keyword">const</span> gchar *protocol)</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;{</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; remminafile = <a class="code" href="remmina__file_8c.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a>();</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; <span class="keywordflow">if</span> (server)</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>, server);</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; <span class="keywordflow">if</span> (protocol)</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;protocol&quot;</span>, protocol);</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(remminafile);</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;}</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;</div><div class="line"><a name="l02150"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#aa5c50852f8569f075eec5d5db30c2ebf"> 2150</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;{</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; GtkWidget *dialog;</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; remminafile = <a class="code" href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a>(filename);</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(remminafile);</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; _(<span class="stringliteral">&quot;Could not find the file “%s”.&quot;</span>), filename);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; }</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;}</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#aa9345cfe3fb32d326b652e96ee55eaea"> 2169</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;{</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; remminafile = <a class="code" href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a>(filename);</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">&quot;profile-lock&quot;</span>, FALSE) &amp;&amp; <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(<a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>()) == 0)</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(remminafile);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160; GtkWidget *dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; _(<span class="stringliteral">&quot;Could not find the file “%s”.&quot;</span>), filename);</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; }</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;}</div><div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92">REMMINA_PROTOCOL_SETTING_TYPE_SERVER</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00100">types.h:100</a></div></div>
+<a href="remmina__file__editor_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) 2009-2011 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-2023 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;ctype.h&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;config.h&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;avahi-ui/avahi-ui.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__public_8h.html">remmina_public.h</a>&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rcw_8h.html">rcw.h</a>&quot;</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file_8h.html">remmina_file.h</a>&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file__editor_8h.html">remmina_file_editor.h</a>&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>&quot;</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__icon_8h.html">remmina_icon.h</a>&quot;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__main_8h.html">remmina_main.h</a>&quot;</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref__dialog_8h.html">remmina_pref_dialog.h</a>&quot;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ssh_8h.html">remmina_ssh.h</a>&quot;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__string__list_8h.html">remmina_string_list.h</a>&quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__unlock_8h.html">remmina_unlock.h</a>&quot;</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__widget__pool_8h.html">remmina_widget_pool.h</a>&quot;</span></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"><a class="line" href="remmina__file__editor_8c.html#abb7466f51c11427405a54c94767a52de"> 58</a></span>&#160;<a class="code" href="remmina__file__editor_8c.html#abb7466f51c11427405a54c94767a52de">G_DEFINE_TYPE</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a>, remmina_file_editor, GTK_TYPE_DIALOG)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *server_tips = <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;&lt;big&gt;&quot;</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="stringliteral">&quot;Supported formats\n&quot;</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="stringliteral">&quot;• server\n&quot;</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="stringliteral">&quot;• server[:port]\n&quot;</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="stringliteral">&quot;VNC additional formats\n&quot;</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="stringliteral">&quot;• ID:repeater ID number\n&quot;</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="stringliteral">&quot;• unix:///path/socket.sock&quot;</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="stringliteral">&quot;&lt;/big&gt;&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *cmd_tips = <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;&lt;big&gt;&quot;</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="stringliteral">&quot;• command in PATH args %h\n&quot;</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="stringliteral">&quot;• /path/to/foo -options %h %u\n&quot;</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="stringliteral">&quot;• %h is substituted with the server name\n&quot;</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="stringliteral">&quot;• %t is substituted with the SSH server name\n&quot;</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="stringliteral">&quot;• %u is substituted with the username\n&quot;</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="stringliteral">&quot;• %U is substituted with the SSH username\n&quot;</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="stringliteral">&quot;• %p is substituted with Remmina profile name\n&quot;</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="stringliteral">&quot;• %g is substituted with Remmina profile group name\n&quot;</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="stringliteral">&quot;• %d is substituted with local date and time in ISO 8601 format\n&quot;</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="stringliteral">&quot;Do not run in background if you want the command to be executed before connecting.\n&quot;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="stringliteral">&quot;&lt;/big&gt;&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *server_tips2 = <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;&lt;big&gt;&quot;</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="stringliteral">&quot;Supported formats\n&quot;</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="stringliteral">&quot;• server\n&quot;</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="stringliteral">&quot;• server[:port]\n&quot;</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="stringliteral">&quot;• username@server[:port] (SSH protocol only)&quot;</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="stringliteral">&quot;&lt;/big&gt;&quot;</span>);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#endif</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"> 91</span>&#160;<span class="keyword">struct </span>_RemminaFileEditorPriv {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * remmina_file;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> * plugin;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">const</span> gchar * avahi_service_type;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; GtkWidget * name_entry;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; GtkWidget * labels_entry;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; GtkWidget * group_combo;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; GtkWidget * protocol_combo;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; GtkWidget * save_button;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; GtkWidget * config_box;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; GtkWidget * config_scrollable;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; GtkWidget * config_viewport;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; GtkWidget * config_container;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; GtkWidget * server_combo;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; GtkWidget * resolution_iws_radio;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; GtkWidget * resolution_auto_radio;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; GtkWidget * resolution_custom_radio;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; GtkWidget * resolution_custom_combo;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; GtkWidget * keymap_combo;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; GtkWidget * assistance_toggle;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; GtkWidget * assistance_file;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; GtkWidget * assistance_password;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; GtkWidget * assistance_file_label;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; GtkWidget * assistance_password_label;</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"> 120</span>&#160; GtkWidget * behavior_autostart_check;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; GtkWidget * behavior_precommand_entry;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; GtkWidget * behavior_postcommand_entry;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; GtkWidget * behavior_lock_check;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; GtkWidget * behavior_disconnect;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; GtkWidget * ssh_tunnel_enabled_check;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; GtkWidget * ssh_tunnel_loopback_check;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; GtkWidget * ssh_tunnel_server_default_radio;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; GtkWidget * ssh_tunnel_server_custom_radio;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; GtkWidget * ssh_tunnel_server_entry;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; GtkWidget * ssh_tunnel_auth_agent_radio;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; GtkWidget * ssh_tunnel_auth_password_radio;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; GtkWidget * ssh_tunnel_auth_password;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; GtkWidget * ssh_tunnel_passphrase;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; GtkWidget * ssh_tunnel_auth_publickey_radio;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; GtkWidget * ssh_tunnel_auth_auto_publickey_radio;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; GtkWidget * ssh_tunnel_auth_combo;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; GtkWidget * ssh_tunnel_username_entry;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; GtkWidget * ssh_tunnel_privatekey_chooser;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; GtkWidget * ssh_tunnel_certfile_chooser;</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; GHashTable * setting_widgets;</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="remmina__file__editor_8c.html#a7f1406c817183d78a801668a10d73e0b"> 145</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a7f1406c817183d78a801668a10d73e0b">remmina_file_editor_class_init</a>(<a class="code" href="struct___remmina_file_editor_class.html">RemminaFileEditorClass</a> *klass)</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;}</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11"> 165</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; GtkWidget * failed_widget,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; GError * err)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (!err) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; err = NULL; <span class="comment">// g_set_error doesn&#39;t like overwriting errors.</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; g_set_error(&amp;err, 1, 1, _(<span class="stringliteral">&quot;Input is invalid.&quot;</span>));</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</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; <span class="keywordflow">if</span> (!gfe || !failed_widget) {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; g_critical(<span class="stringliteral">&quot;(%s): Parameters RemminaFileEditor &#39;gfe&#39; or &quot;</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="stringliteral">&quot;GtkWidget* &#39;failed_widget&#39; are &#39;NULL&#39;!&quot;</span>,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; __func__);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; gint widget_width = gtk_widget_get_allocated_width(failed_widget);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; gint widget_height = gtk_widget_get_allocated_height(failed_widget);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; GtkWidget *err_label = gtk_label_new(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; GtkWidget *alert_icon = NULL;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; GtkWindow *err_window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; GdkWindow *window = gtk_widget_get_window(failed_widget);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; GtkAllocation allocation;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; gint failed_widget_x, failed_widget_y;</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; gchar *markup = g_strdup_printf(<span class="stringliteral">&quot;&lt;span size=&#39;large&#39;&gt;%s&lt;/span&gt;&quot;</span>, err-&gt;message);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Setup err_window</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; gtk_window_set_decorated(err_window, FALSE);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; gtk_window_set_type_hint(err_window, GDK_WINDOW_TYPE_HINT_TOOLTIP);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; gtk_window_set_default_size(err_window, widget_width, widget_height);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; gtk_window_set_title(err_window, <span class="stringliteral">&quot;Error&quot;</span>);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; gtk_window_set_resizable(err_window, TRUE);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// Move err_window under failed_widget</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; gtk_window_set_attached_to(err_window, failed_widget);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; gtk_window_set_transient_for(err_window, GTK_WINDOW(gfe));</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; gdk_window_get_origin(GDK_WINDOW(window), &amp;failed_widget_x, &amp;failed_widget_y);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; gtk_widget_get_allocation(failed_widget, &amp;allocation);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; failed_widget_x += allocation.x;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; failed_widget_y += allocation.y + allocation.height;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; gtk_window_move(err_window, failed_widget_x, failed_widget_y);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">// Setup label</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; gtk_label_set_selectable(GTK_LABEL(err_label), FALSE);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; gtk_label_set_max_width_chars(GTK_LABEL(err_label), 1);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; gtk_widget_set_hexpand(GTK_WIDGET(err_label), TRUE);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; gtk_widget_set_vexpand(GTK_WIDGET(err_label), TRUE);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; gtk_label_set_ellipsize(GTK_LABEL(err_label), PANGO_ELLIPSIZE_END);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; gtk_label_set_line_wrap(GTK_LABEL(err_label), TRUE);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; gtk_label_set_line_wrap_mode(GTK_LABEL(err_label), PANGO_WRAP_WORD_CHAR);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; gtk_label_set_markup(GTK_LABEL(err_label), markup);</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; alert_icon = gtk_image_new_from_icon_name(<span class="stringliteral">&quot;dialog-warning-symbolic&quot;</span>,</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; GTK_ICON_SIZE_DND);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Fill icon and label into a box.</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(alert_icon), FALSE, FALSE, 0);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(err_label), TRUE, TRUE, 5);</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; <span class="comment">// Attach box to err_window</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; gtk_container_add(GTK_CONTAINER(err_window), GTK_WIDGET(box));</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; <span class="comment">// Display everything.</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; gtk_widget_show_all(GTK_WIDGET(err_window));</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Mouse click and focus-loss will delete the err_window.</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; g_signal_connect(G_OBJECT(err_window), <span class="stringliteral">&quot;focus-out-event&quot;</span>,</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; G_CALLBACK(gtk_window_close), NULL);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; g_signal_connect(G_OBJECT(err_window), <span class="stringliteral">&quot;button-press-event&quot;</span>,</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; G_CALLBACK(gtk_window_close), NULL);</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;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></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"><a class="line" href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05"> 243</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05">remmina_file_editor_browse_avahi</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;{</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; GtkWidget *dialog;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; gchar *host;</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; dialog = aui_service_dialog_new(_(<span class="stringliteral">&quot;Choose a Remote Desktop Server&quot;</span>),</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; GTK_WINDOW(gfe),</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; _(<span class="stringliteral">&quot;_Cancel&quot;</span>), GTK_RESPONSE_CANCEL,</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; _(<span class="stringliteral">&quot;_OK&quot;</span>), GTK_RESPONSE_ACCEPT,</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; NULL);</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; gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gfe));</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; aui_service_dialog_set_resolve_service(AUI_SERVICE_DIALOG(dialog), TRUE);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; aui_service_dialog_set_resolve_host_name(AUI_SERVICE_DIALOG(dialog), TRUE);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(dialog),</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;avahi_service_type, NULL);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; host = g_strdup_printf(<span class="stringliteral">&quot;[%s]:%i&quot;</span>,</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; aui_service_dialog_get_host_name(AUI_SERVICE_DIALOG(dialog)),</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; aui_service_dialog_get_port(AUI_SERVICE_DIALOG(dialog)));</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; host = NULL;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> (host) {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;server_combo))), host);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; g_free(host);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;}</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b"> 277</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b">remmina_file_editor_on_realize</a>(GtkWidget *widget, gpointer user_data)</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;{</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; GtkWidget *defaultwidget;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; gfe = REMMINA_FILE_EDITOR(widget);</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; defaultwidget = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;server_combo;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span> (defaultwidget) {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (GTK_IS_EDITABLE(defaultwidget))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; gtk_editable_select_region(GTK_EDITABLE(defaultwidget), 0, -1);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; gtk_widget_grab_focus(defaultwidget);</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;}</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"><a class="line" href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f"> 294</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f">remmina_file_editor_destroy</a>(GtkWidget *widget, gpointer data)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;{</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(REMMINA_FILE_EDITOR(widget)-&gt;priv-&gt;remmina_file);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; g_hash_table_destroy(REMMINA_FILE_EDITOR(widget)-&gt;priv-&gt;setting_widgets);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; g_free(REMMINA_FILE_EDITOR(widget)-&gt;priv);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;}</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb"> 302</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>(GtkToggleButton *togglebutton, GtkWidget *widget)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; gtk_widget_set_sensitive(widget, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togglebutton)));</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;}</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea"> 308</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea">remmina_file_editor_create_notebook_container</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;{</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">/* Create the notebook */</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container = gtk_notebook_new();</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport = gtk_viewport_new(NULL, NULL);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable = gtk_scrolled_window_new(NULL, NULL);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable), 2);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable),</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; gtk_widget_show(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; gtk_container_add(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport), 2);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; gtk_widget_show(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; gtk_container_add(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_viewport);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container), 2);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; gtk_widget_show(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; gtk_container_add(GTK_CONTAINER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_box), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_scrollable);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;}</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556"> 330</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe,</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keyword">const</span> gchar *stock_id, <span class="keyword">const</span> gchar *label, gint rows, gint cols)</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;{</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; GtkWidget *tablabel;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; GtkWidget *tabbody;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; tablabel = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; gtk_widget_show(tablabel);</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; widget = gtk_image_new_from_icon_name(stock_id, GTK_ICON_SIZE_BUTTON);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; gtk_box_pack_start(GTK_BOX(tablabel), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; gtk_box_pack_start(GTK_BOX(tablabel), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; tabbody = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; gtk_widget_show(tabbody);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; gtk_notebook_append_page(GTK_NOTEBOOK(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;config_container), tabbody, tablabel);</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"> 354</span>&#160; grid = gtk_grid_new();</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; gtk_widget_show(grid);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; gtk_grid_set_row_spacing(GTK_GRID(grid), 8);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 8);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(grid), 15);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; gtk_box_pack_start(GTK_BOX(tabbody), grid, FALSE, FALSE, 0);</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; <span class="keywordflow">return</span> grid;</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;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9"> 366</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a>(GtkToggleButton *togglebutton, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;{</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_entry),</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_enabled_check)) &amp;&amp;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio == NULL ||</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio))));</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;}</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6"> 376</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a>(GtkToggleButton *togglebutton,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; gboolean enabled = TRUE;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_toggle) {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_toggle));</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file), enabled);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password), enabled);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file_label)</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file_label), enabled);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password_label)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password_label), enabled);</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;}</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"><a class="line" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019"> 395</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a>(GtkToggleButton *togglebutton,</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7">RemminaProtocolSSHSetting</a> ssh_setting)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;{</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; gboolean enabled = TRUE;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; gchar *p;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> gchar *cp;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">const</span> gchar *s = NULL;</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="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_enabled_check) {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_enabled_check));</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_loopback_check)</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_loopback_check), enabled);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_default_radio)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_default_radio), enabled);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_server_custom_radio), enabled);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a>(NULL, gfe);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; p = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo));</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// if (!(g_strcmp0(p, &quot;SFTP&quot;) == 0 || g_strcmp0(p, &quot;SSH&quot;) == 0)) {</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry), enabled);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password), enabled);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; gtk_widget_set_sensitive(GTK_WIDGET(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_combo), enabled);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">//}</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; g_free(p);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// remmina_file_editor_ssh_tunnel_auth_publickey_radio_on_toggled(NULL, gfe);</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (s)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_privatekey_chooser), s);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span> (s)</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_certfile_chooser), s);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (enabled &amp;&amp; gtk_entry_get_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry))[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; cp = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; gtk_entry_set_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_username_entry), cp ? cp : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</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; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password) {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">if</span> (enabled &amp;&amp; gtk_entry_get_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password))[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; cp = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; gtk_entry_set_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_auth_password), cp ? cp : <span class="stringliteral">&quot;&quot;</span>);</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; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_passphrase) {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">if</span> (enabled &amp;&amp; gtk_entry_get_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_passphrase))[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; cp = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span>);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; gtk_entry_set_text(GTK_ENTRY(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;ssh_tunnel_passphrase), cp ? cp : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</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;}</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae"> 452</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae">remmina_file_editor_create_server</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting, GtkWidget *grid,</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; gint row)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *plugin = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;plugin;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; GtkWidget *hbox;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; gchar *s;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Server&quot;</span>));</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, row + 1);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; s = <a class="code" href="remmina__pref_8c.html#a0208d5dc8197423da67e5967aafb7a05">remmina_pref_get_recent</a>(plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a>);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; widget = <a class="code" href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a>(s, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;server&quot;</span>), TRUE);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; gtk_widget_set_tooltip_markup(widget, _(server_tips));</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; gtk_entry_set_activates_default(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget))), TRUE);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;server_combo = widget;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; g_free(s);</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;<span class="preprocessor">#ifdef HAVE_LIBAVAHI_UI</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">if</span> (setting-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>) {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;avahi_service_type = (<span class="keyword">const</span> gchar *)setting-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; gtk_widget_show(hbox);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</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; widget = gtk_button_new_with_label(<span class="stringliteral">&quot;…&quot;</span>);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Browse the network to find a %s server&quot;</span>), plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a>);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; gtk_widget_set_tooltip_text(widget, s);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; g_free(s);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05">remmina_file_editor_browse_avahi</a>), gfe);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row, 1, 1);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</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;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583"> 503</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid, gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value, gchar *setting_name)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;{</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; gtk_widget_set_margin_end(widget, 40);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; gtk_widget_set_margin_right(widget, 40);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</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; widget = gtk_entry_new();</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 0);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; gtk_entry_set_activates_default(GTK_ENTRY(widget), TRUE);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; gtk_widget_set_name(widget, setting_name);</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"> 529</span>&#160; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), value);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">/* Password view Toogle*/</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span> (setting_name) {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widget), GTK_ENTRY_ICON_SECONDARY, <span class="stringliteral">&quot;org.remmina.Remmina-password-reveal-symbolic&quot;</span>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; gtk_entry_set_icon_activatable(GTK_ENTRY(widget), GTK_ENTRY_ICON_SECONDARY, TRUE);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; g_signal_connect(widget, <span class="stringliteral">&quot;icon-press&quot;</span>, G_CALLBACK(<a class="code" href="remmina__main_8c.html#aac3fe305e456dfa7bb55aa2f057e8cb0">remmina_main_toggle_password_view</a>), NULL);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">return</span> widget;</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;</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a"> 540</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a">remmina_file_editor_update_resolution</a>(GtkWidget *widget, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;{</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; gchar *res_str;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; res_str = g_strdup_printf(<span class="stringliteral">&quot;%dx%d&quot;</span>,</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_width&quot;</span>, 0),</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_height&quot;</span>, 0));</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="remmina__public_8c.html#aa5eacff7c9dab7457dd65525d01047f8">remmina_public_load_combo_text_d</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>,</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; res_str, NULL);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; g_free(res_str);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;}</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"><a class="line" href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4"> 552</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4">remmina_file_editor_browse_resolution</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;{</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; GtkDialog *dialog = <a class="code" href="remmina__string__list_8c.html#a11147c41297537effe55f18a63ce9f7e">remmina_string_list_new</a>(FALSE, NULL);</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="remmina__string__list_8c.html#a500b85eafd23280f998d2980d1eba80e">remmina_string_list_set_validation_func</a>(<a class="code" href="remmina__public_8c.html#a098786d3aa6991aeba43a61e29d534d0">remmina_public_resolution_validation_func</a>);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="remmina__string__list_8c.html#ab1bacc097f59c20b477d954bb863a5e0">remmina_string_list_set_text</a>(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>, TRUE);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="remmina__string__list_8c.html#aa9ca6ccf40b954051a0daa5c1efeef87">remmina_string_list_set_titles</a>(_(<span class="stringliteral">&quot;Resolutions&quot;</span>), _(<span class="stringliteral">&quot;Configure the available resolutions&quot;</span>));</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gfe));</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; gtk_dialog_run(dialog);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; g_free(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a> = <a class="code" href="remmina__string__list_8c.html#a74058eac0af28c05a55d041103457aec">remmina_string_list_get_text</a>();</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; g_signal_connect(G_OBJECT(dialog), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a">remmina_file_editor_update_resolution</a>), gfe);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; gtk_widget_destroy(GTK_WIDGET(dialog));</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;}</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5"> 568</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5">remmina_file_editor_create_resolution</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting,</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; GtkWidget *grid, gint row)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; GtkWidget *hbox;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordtype">int</span> resolution_w, resolution_h;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; gchar *res_str;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78a">RemminaProtocolWidgetResolutionMode</a> res_mode;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; res_mode = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_mode&quot;</span>, <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; resolution_w = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_width&quot;</span>, -1);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; resolution_h = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;resolution_height&quot;</span>, -1);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="comment">/* If resolution_mode is non-existent (-1), then we try to calculate it</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="comment"> * as we did before having resolution_mode */</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>) {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">if</span> (resolution_w &lt;= 0 || resolution_h &lt;= 0)</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; }</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; res_str = g_strdup_printf(<span class="stringliteral">&quot;%dx%d&quot;</span>, resolution_w, resolution_h);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; res_str = NULL;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Resolution&quot;</span>));</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; widget = gtk_radio_button_new_with_label(NULL, _(<span class="stringliteral">&quot;Use initial window size&quot;</span>));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio = widget;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; widget = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio), _(<span class="stringliteral">&quot;Use client resolution&quot;</span>));</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_auto_radio = widget;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row, 1, 1);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; gtk_widget_show(hbox);</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; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; gtk_widget_show(hbox);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row + 1, 1, 1);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; widget = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio), _(<span class="stringliteral">&quot;Custom&quot;</span>));</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio = widget;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; widget = <a class="code" href="remmina__public_8c.html#a3796b536244067e9a85923b1cefa6cde">remmina_public_create_combo_text_d</a>(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">resolutions</a>, res_str, NULL);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo = widget;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; widget = gtk_button_new_with_label(<span class="stringliteral">&quot;…&quot;</span>);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4">remmina_file_editor_browse_resolution</a>), gfe);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; g_signal_connect(G_OBJECT(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio), <span class="stringliteral">&quot;toggled&quot;</span>,</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>), gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio), TRUE);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d">RES_USE_CLIENT</a>)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_auto_radio), TRUE);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_iws_radio), TRUE);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; gtk_widget_set_sensitive(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_combo, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;resolution_custom_radio)));</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; g_free(res_str);</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"> 646</span>&#160;</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"><a class="line" href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586"> 648</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586">remmina_file_editor_create_assistance</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting,</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; GtkWidget *grid, gint row)</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; widget = gtk_toggle_button_new_with_label(_(<span class="stringliteral">&quot;Assistance Mode&quot;</span>));</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;assistance_mode&quot;</span>, 0));</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_toggle = widget;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; g_signal_connect(widget, <span class="stringliteral">&quot;toggled&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a>), gfe);</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;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; widget = gtk_label_new(<span class="stringliteral">&quot;Assistance file&quot;</span>);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_END);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row+1, 1, 1);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file_label = widget;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;assistance_file&quot;</span>));</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row+1, 1, 1);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_file = widget;</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; widget = gtk_label_new(<span class="stringliteral">&quot;Assistance Password&quot;</span>);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_END);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row+2, 1, 1);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password_label = widget;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;assistance_pass&quot;</span>));</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row+2, 1, 1);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;assistance_password = widget;</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; <a class="code" href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a>(NULL, gfe);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;}</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;</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"><a class="line" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0"> 696</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value, gint left,</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; gint right, gchar *setting_name)</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;{</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; gtk_widget_set_margin_start(widget, left);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; gtk_widget_set_margin_end(widget, right);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; gtk_widget_set_margin_left(widget, left);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; gtk_widget_set_margin_right(widget, right);</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col, row, 1, 1);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col + 1, row, 1, 1);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), value);</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"> 727</span>&#160; <span class="keywordflow">return</span> widget;</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;</div><div class="line"><a name="l00730"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4"> 730</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value,</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; gchar *setting_name)</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;{</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(gfe, grid, row, col, label, value, 0, 40,</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; setting_name);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;}</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7"> 739</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7">remmina_file_editor_create_textarea</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *value,</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; gchar *setting_name)</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;{</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; GtkTextView *view;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; GtkTextBuffer *buffer;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; GtkTextIter start;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; widget = gtk_text_view_new();</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; view = GTK_TEXT_VIEW(widget);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; gtk_text_view_set_top_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; gtk_text_view_set_bottom_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; gtk_text_view_set_right_margin(GTK_TEXT_VIEW(view), 20);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; gtk_text_view_set_monospace(view, TRUE);</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (value) {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; buffer = gtk_text_view_get_buffer(view);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; gtk_text_buffer_set_text(buffer, value, -1);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; gtk_text_buffer_get_start_iter(buffer, &amp;start);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; gtk_text_buffer_place_cursor(buffer, &amp;start);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; gtk_widget_set_size_request(GTK_WIDGET(view), 320, 300);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;}</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"><a class="line" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a"> 772</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gpointer *list,</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keyword">const</span> gchar *value, gchar *setting_name)</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;{</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; widget = <a class="code" href="remmina__public_8c.html#a616258d3226ec1f1ecee6ce18aba535b">remmina_public_create_combo_map</a>(list, value, FALSE, gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;plugin-&gt;domain);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">return</span> widget;</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;</div><div class="line"><a name="l00794"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965"> 794</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965">remmina_file_editor_create_combo</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gchar *list,</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keyword">const</span> gchar *value, gchar *setting_name)</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;{</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; widget = <a class="code" href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a>(list, value, FALSE);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 1, 1);</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; <span class="keywordflow">return</span> widget;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;}</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;</div><div class="line"><a name="l00817"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6"> 817</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; gint row, gint top, <span class="keyword">const</span> gchar *label, gboolean value,</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; gchar *setting_name)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;{</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; widget = gtk_check_button_new_with_label(label);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, top, row, 1, 1);</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">return</span> widget;</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="l00844"></a><span class="lineno"> 844</span>&#160;<span class="keyword">static</span> GtkWidget *</div><div class="line"><a name="l00845"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa"> 845</a></span>&#160;<a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid, gint row, gint col, <span class="keyword">const</span> gchar *label,</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keyword">const</span> gchar *value, gint type, gchar *setting_name)</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;{</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; GtkWidget *check;</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; GtkWidget *hbox;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</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; hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; gtk_widget_show(hbox);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; gtk_grid_attach(GTK_GRID(grid), hbox, 1, row, 1, 1);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; check = gtk_check_button_new();</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; gtk_widget_show(check);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), (value &amp;&amp; value[0] == <span class="charliteral">&#39;/&#39;</span>));</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);</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; widget = gtk_file_chooser_button_new(label, type);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">if</span> (value)</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(widget), value);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);</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; g_signal_connect(G_OBJECT(check), <span class="stringliteral">&quot;toggled&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>), widget);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a>(GTK_TOGGLE_BUTTON(check), widget);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">return</span> widget;</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"> 881</span>&#160;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="comment">// used to filter out invalid characters for REMMINA_PROTOCOL_SETTING_TYPE_INT</span></div><div class="line"><a name="l00883"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0"> 883</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0">remmina_file_editor_int_setting_filter</a>(GtkEditable *editable, <span class="keyword">const</span> gchar *text,</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; gint length, gint *position, gpointer data)</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; i++) {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">if</span> (!isdigit(text[i]) &amp;&amp; text[i] != <span class="charliteral">&#39;-&#39;</span>) {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; g_signal_stop_emission_by_name(G_OBJECT(editable), <span class="stringliteral">&quot;insert-text&quot;</span>);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; }</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;}</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="comment">// used to filter out invalid characters for REMMINA_PROTOCOL_SETTING_TYPE_DOUBLE</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="comment">// &#39;.&#39; and &#39;,&#39; can&#39;t be used interchangeably! It depends on the language setting</span></div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;<span class="comment">// of the user.</span></div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f"> 897</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f">remmina_file_editor_double_setting_filter</a>(GtkEditable *editable, <span class="keyword">const</span> gchar *text,</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; gint length, gint *position, gpointer data)</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160;{</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; length; i++) {</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keywordflow">if</span> (!isdigit(text[i]) &amp;&amp; text[i] != <span class="charliteral">&#39;-&#39;</span> &amp;&amp; text[i] != <span class="charliteral">&#39;.&#39;</span> &amp;&amp; text[i] != <span class="charliteral">&#39;,&#39;</span>) {</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; g_signal_stop_emission_by_name(G_OBJECT(editable), <span class="stringliteral">&quot;insert-text&quot;</span>);</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; }</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; }</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;</div><div class="line"><a name="l00908"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0"> 908</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0">remmina_file_editor_create_int</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; gint row, gint col, <span class="keyword">const</span> gchar *label, <span class="keyword">const</span> gint value,</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; gint left, gint right, gchar *setting_name)</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;{</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; gtk_widget_set_margin_start(widget, left);</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; gtk_widget_set_margin_end(widget, right);</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; gtk_widget_set_margin_left(widget, left);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; gtk_widget_set_margin_right(widget, right);</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col, row, 1, 1);</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; widget = gtk_entry_new();</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col + 1, row, 1, 1);</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; gtk_widget_set_name(widget, setting_name);</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="comment">// Convert int to str.</span></div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordtype">int</span> length = snprintf(NULL, 0, <span class="stringliteral">&quot;%d&quot;</span>, value) + 1; <span class="comment">// +1 &#39;\0&#39; byte</span></div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordtype">char</span> *str = malloc(length);</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; snprintf(str, length, <span class="stringliteral">&quot;%d&quot;</span>, value);</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), str);</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; free(str);</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;insert-text&quot;</span>,</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0">remmina_file_editor_int_setting_filter</a>), NULL);</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keywordflow">return</span> widget;</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"><a class="line" href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80"> 950</a></span>&#160;<span class="keyword">static</span> GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80">remmina_file_editor_create_double</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe,</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; GtkWidget *grid, gint row, gint col,</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keyword">const</span> gchar *label, gdouble value, gint left,</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; gint right, gchar *setting_name)</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;{</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160;</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; widget = gtk_label_new(label);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 12, 0)</span></div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; gtk_widget_set_margin_start(widget, left);</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; gtk_widget_set_margin_end(widget, right);</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; gtk_widget_set_margin_left(widget, left);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; gtk_widget_set_margin_right(widget, right);</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col, row, 1, 1);</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; widget = gtk_entry_new();</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, col + 1, row, 1, 1);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="keywordflow">if</span> (setting_name)</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; gtk_widget_set_name(widget, setting_name);</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="comment">// Convert double to str.</span></div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordtype">int</span> length = snprintf(NULL, 0, <span class="stringliteral">&quot;%.8g&quot;</span>, value) + 1; <span class="comment">// +1 &#39;\0&#39; byte</span></div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordtype">char</span> *str = malloc(length);</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; snprintf(str, length, <span class="stringliteral">&quot;%f&quot;</span>, value);</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; gtk_entry_set_text(GTK_ENTRY(widget), str);</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; free(str);</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;insert-text&quot;</span>,</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f">remmina_file_editor_double_setting_filter</a>), NULL);</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">return</span> widget;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;}</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;</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"><a class="line" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d"> 995</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, GtkWidget *grid,</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *settings)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; gint grid_row = 0;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; gint grid_column = 0;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; gchar **strarr;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; gchar *setting_name;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keyword">const</span> gchar *escaped;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">while</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; setting_name = (gchar *)(<a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(settings));</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <span class="keywordflow">switch</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a>) {</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92">REMMINA_PROTOCOL_SETTING_TYPE_SERVER</a>:</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae">remmina_file_editor_create_server</a>(gfe, settings, grid, grid_row);</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa">REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD</a>:</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; setting_name);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; grid_row++;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350aa045109309280606ff11a9de1862e2ba">REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION</a>:</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <a class="code" href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5">remmina_file_editor_create_resolution</a>(gfe, settings, grid, grid_row);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; grid_row ++;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a16a83c00dba8d929cce531d5a0181a2d">REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE</a>:</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586">remmina_file_editor_create_assistance</a>(gfe, settings, grid, grid_row);</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; grid_row += 3;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425">REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP</a>:</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; strarr = <a class="code" href="remmina__pref_8c.html#a745bbef1d48a7462f8db997821742395">remmina_pref_keymap_groups</a>();</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; priv-&gt;keymap_combo = <a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(gfe, grid,</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; grid_row + 1, 0,</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; _(<span class="stringliteral">&quot;Keyboard mapping&quot;</span>), (<span class="keyword">const</span> gpointer *)strarr,</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;keymap&quot;</span>),</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; setting_name);</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; g_strfreev(strarr);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; grid_row++;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a>:</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; setting_name);</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; grid_row++;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350aadb70e5d52a6eccc1aaf6f1428c1fb11">REMMINA_PROTOCOL_SETTING_TYPE_TEXTAREA</a>:</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; escaped = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; escaped = g_uri_unescape_string(escaped, NULL);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7">remmina_file_editor_create_textarea</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>), escaped,</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; setting_name);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; grid_row++;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a>:</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; (<span class="keyword">const</span> gpointer *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>,</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; setting_name);</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ae2237632b23d3c90a842bc5bc8302ec5">REMMINA_PROTOCOL_SETTING_TYPE_COMBO</a>:</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965">remmina_file_editor_create_combo</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; (<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">opt1</a>,</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; setting_name);</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a>:</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(gfe, grid, grid_row, grid_column,</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, setting_name, FALSE),</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; setting_name);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a31ee66fffaa245ae411aba0c296ad9da">REMMINA_PROTOCOL_SETTING_TYPE_FILE</a>:</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; GTK_FILE_CHOOSER_ACTION_OPEN, setting_name);</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a68b440d346168aadb6fd728ea394607f">REMMINA_PROTOCOL_SETTING_TYPE_FOLDER</a>:</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, setting_name),</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; setting_name);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ab4c68b7df42ebd08e953cc72c5b97583">REMMINA_PROTOCOL_SETTING_TYPE_INT</a>:</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0">remmina_file_editor_create_int</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, setting_name, 0),</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; 0, 40, setting_name);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; grid_row++;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350a25c4af05ecfc7053db40ed0997389b91">REMMINA_PROTOCOL_SETTING_TYPE_DOUBLE</a>:</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80">remmina_file_editor_create_double</a>(gfe, grid, grid_row, 0,</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; g_dgettext(priv-&gt;plugin-&gt;domain, settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">label</a>),</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <a class="code" href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da">remmina_file_get_double</a>(priv-&gt;remmina_file, setting_name, 0.0f),</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; 0, 40, setting_name);</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, setting_name, widget);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>)</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; gtk_widget_set_tooltip_text(widget, _((<span class="keyword">const</span> gchar *)settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">opt2</a>));</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; grid_row++;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">/* If the setting wants compactness, move to the next column */</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">if</span> (settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ab434990a6fe70b7e8a4a8b11129527a6">compact</a>)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; grid_column++;</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="comment">/* Add a new settings row and move to the first column</span></div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;<span class="comment"> * if the setting doesn’t want the compactness</span></div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;<span class="comment"> * or we already have two columns */</span></div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keywordflow">if</span> (!settings-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ab434990a6fe70b7e8a4a8b11129527a6">compact</a> || grid_column &gt; 1) {</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; grid_row++;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; grid_column = 0;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; }</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; settings++;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;}</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;</div><div class="line"><a name="l01155"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c"> 1155</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c">remmina_file_editor_create_behavior_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;{</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keyword">const</span> gchar *cs;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="comment">/* The Behavior tab (implementation) */</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Behavior&quot;</span>), 20, 2);</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="comment">/* Execute Command frame */</span></div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;Execute a Command&quot;</span>), 0, 1, 2);</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="comment">/* PRE connection command */</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;precommand&quot;</span>);</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(gfe, grid, 2, 0, _(<span class="stringliteral">&quot;Before connecting&quot;</span>), cs, 24, 26, <span class="stringliteral">&quot;precommand&quot;</span>);</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; priv-&gt;behavior_precommand_entry = widget;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; gtk_entry_set_placeholder_text(GTK_ENTRY(widget), _(<span class="stringliteral">&quot;command %h %u %t %U %p %g --option&quot;</span>));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; gtk_widget_set_tooltip_markup(widget, _(cmd_tips));</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">/* POST connection command */</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;postcommand&quot;</span>);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a>(gfe, grid, 3, 0, _(<span class="stringliteral">&quot;After connecting&quot;</span>), cs, 24, 16, <span class="stringliteral">&quot;postcommand&quot;</span>);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; priv-&gt;behavior_postcommand_entry = widget;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; gtk_entry_set_placeholder_text(GTK_ENTRY(widget), _(<span class="stringliteral">&quot;/path/to/command -opt1 arg %h %u %t -opt2 %U %p %g&quot;</span>));</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; gtk_widget_set_tooltip_markup(widget, _(cmd_tips));</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="comment">/* Startup frame */</span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;Start-up&quot;</span>), 4, 1, 2);</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="comment">/* Autostart profile option */</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; priv-&gt;behavior_autostart_check = <a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(gfe, grid, 6, 1, _(<span class="stringliteral">&quot;Auto-start this profile&quot;</span>),</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;enable-autostart&quot;</span>, FALSE), <span class="stringliteral">&quot;enable-autostart&quot;</span>);</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="comment">/* Startup frame */</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;Connection profile security&quot;</span>), 8, 1, 2);</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <span class="comment">/* Autostart profile option */</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; priv-&gt;behavior_lock_check = <a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(gfe, grid, 10, 1, _(<span class="stringliteral">&quot;Require password to connect or edit the profile&quot;</span>),</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;profile-lock&quot;</span>, FALSE), <span class="stringliteral">&quot;profile-lock&quot;</span>);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="comment">/* Startup frame */</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;Unexpected disconnect&quot;</span>), 12, 1, 2);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="comment">/* Autostart profile option */</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; priv-&gt;behavior_disconnect = <a class="code" href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a>(gfe, grid, 16, 1, _(<span class="stringliteral">&quot;Keep window from closing if not disconnected by Remmina&quot;</span>),</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;disconnect-prompt&quot;</span>, FALSE), <span class="stringliteral">&quot;disconnect-prompt&quot;</span>);</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;}</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01206"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7"> 1206</a></span>&#160;<span class="keyword">static</span> gpointer <a class="code" href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7">ssh_tunnel_auth_list</a>[] =</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;{</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="stringliteral">&quot;0&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Password&quot;</span>),</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="stringliteral">&quot;1&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;SSH identity file&quot;</span>),</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="stringliteral">&quot;2&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;SSH agent&quot;</span>),</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="stringliteral">&quot;3&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Public key (automatic)&quot;</span>),</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="stringliteral">&quot;4&quot;</span>, <a class="code" href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a>(<span class="stringliteral">&quot;Kerberos (GSSAPI)&quot;</span>),</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; NULL</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;};</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;</div><div class="line"><a name="l01217"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23"> 1217</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23">remmina_file_editor_create_ssh_tunnel_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe, <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7">RemminaProtocolSSHSetting</a> ssh_setting)</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;{</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keyword">const</span> gchar *cs;</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; gchar *s;</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; gchar *p;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; gint row = 0;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a8f910597287a73453a5f09ca0037d093">REMMINA_PROTOCOL_SSH_SETTING_NONE</a>)</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="comment">/* The SSH tab (implementation) */</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL,</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; _(<span class="stringliteral">&quot;SSH Tunnel&quot;</span>), 9, 3);</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; widget = gtk_toggle_button_new_with_label(_(<span class="stringliteral">&quot;Enable SSH tunnel&quot;</span>));</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;toggled&quot;</span>,</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a>), gfe);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; priv-&gt;ssh_tunnel_enabled_check = widget;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; widget = gtk_check_button_new_with_label(_(<span class="stringliteral">&quot;Tunnel via loopback address&quot;</span>));</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 2, 1);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; priv-&gt;ssh_tunnel_loopback_check = widget;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <span class="comment">// 1</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; row++;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="comment">/* SSH Server group */</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keywordflow">switch</span> (ssh_setting) {</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a>:</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Same server at port %i&quot;</span>), DEFAULT_SSH_PORT);</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; widget = gtk_radio_button_new_with_label(NULL, s);</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; g_free(s);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 3, 1);</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = widget;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="comment">// 2</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; row++;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; widget = gtk_radio_button_new_with_label_from_widget(</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; GTK_RADIO_BUTTON(priv-&gt;ssh_tunnel_server_default_radio), _(<span class="stringliteral">&quot;Custom&quot;</span>));</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;toggled&quot;</span>,</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a>), gfe);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = widget;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 100);</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; gtk_widget_set_tooltip_markup(widget, _(server_tips2));</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 2, 1);</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; priv-&gt;ssh_tunnel_server_entry = widget;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="comment">// 3</span></div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; row++;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a>:</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = NULL;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = NULL;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; priv-&gt;ssh_tunnel_server_entry = <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, 1, 0,</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; _(<span class="stringliteral">&quot;Server&quot;</span>), NULL, <span class="stringliteral">&quot;ssh_reverse_tunnel_server&quot;</span>);</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; gtk_widget_set_tooltip_markup(priv-&gt;ssh_tunnel_server_entry, _(server_tips));</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="comment">// 2</span></div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; row++;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a113aff9a0339ebe347ddf738d8c1f371">REMMINA_PROTOCOL_SSH_SETTING_SSH</a>:</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">case</span> <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7aef0536e2d0186b8cb8d8ba7a4a1a51c3">REMMINA_PROTOCOL_SSH_SETTING_SFTP</a>:</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = NULL;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = NULL;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; priv-&gt;ssh_tunnel_server_entry = NULL;</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="comment">/* This is not used? */</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; p = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo));</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7aef0536e2d0186b8cb8d8ba7a4a1a51c3">REMMINA_PROTOCOL_SSH_SETTING_SFTP</a>) {</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, row, 1,</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; _(<span class="stringliteral">&quot;Start-up path&quot;</span>), NULL, <span class="stringliteral">&quot;start-up-path&quot;</span>);</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;execpath&quot;</span>);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; g_hash_table_insert(priv-&gt;setting_widgets, <span class="stringliteral">&quot;execpath&quot;</span>, widget);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="comment">// 2</span></div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; row++;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; }</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="comment">/* SSH Authentication frame */</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <a class="code" href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a>(GTK_GRID(grid), _(<span class="stringliteral">&quot;SSH Authentication&quot;</span>), row, 6, 1);</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="comment">// 5</span></div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; row += 2;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; priv-&gt;ssh_tunnel_auth_combo = <a class="code" href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; _(<span class="stringliteral">&quot;Authentication type&quot;</span>),</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; (<span class="keyword">const</span> gpointer *)<a class="code" href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7">ssh_tunnel_auth_list</a>,</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>), <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>);</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; row++;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a> ||</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a>) {</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; priv-&gt;ssh_tunnel_username_entry =</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; _(<span class="stringliteral">&quot;Username&quot;</span>), NULL, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>);</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="comment">// 5</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; row++;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; }</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; widget = <a class="code" href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; _(<span class="stringliteral">&quot;Password&quot;</span>),</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>),</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; priv-&gt;ssh_tunnel_auth_password = widget;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; row++;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; priv-&gt;ssh_tunnel_privatekey_chooser = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; _(<span class="stringliteral">&quot;SSH private key file&quot;</span>),</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>),</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; GTK_FILE_CHOOSER_ACTION_OPEN, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>);</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; row++;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; priv-&gt;ssh_tunnel_certfile_chooser = <a class="code" href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a>(gfe, grid, row, 0,</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; _(<span class="stringliteral">&quot;SSH certificate file&quot;</span>),</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>),</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; GTK_FILE_CHOOSER_ACTION_OPEN, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; row++;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Password to unlock private key&quot;</span>));</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, row, 2, 1);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 300);</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; gtk_widget_set_hexpand(widget, TRUE);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; priv-&gt;ssh_tunnel_passphrase = widget;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; row++;</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <span class="comment">/* Set the values */</span></div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a>) {</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_enabled_check),</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE));</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_loopback_check),</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>, FALSE));</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cs ? priv-&gt;ssh_tunnel_server_custom_radio : priv-&gt;ssh_tunnel_server_default_radio), TRUE);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; gtk_entry_set_text(GTK_ENTRY(priv-&gt;ssh_tunnel_server_entry),</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ssh_setting == <a class="code" href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a>) {</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_enabled_check),</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE));</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_loopback_check),</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>, FALSE));</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; gtk_entry_set_text(GTK_ENTRY(priv-&gt;ssh_tunnel_server_entry),</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; }</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a>(NULL, gfe, ssh_setting);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; gtk_widget_show_all(grid);</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; g_free(p);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;}</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;</div><div class="line"><a name="l01385"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38"> 1385</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38">remmina_file_editor_create_all_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;{</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> notes_settings[] =</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; {</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350aadb70e5d52a6eccc1aaf6f1428c1fb11">REMMINA_PROTOCOL_SETTING_TYPE_TEXTAREA</a>, <span class="stringliteral">&quot;notes_text&quot;</span>, NULL, FALSE, NULL, NULL },</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; { <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>, NULL, NULL, FALSE, NULL, NULL }</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; };</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea">remmina_file_editor_create_notebook_container</a>(gfe);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="comment">/* The Basic tab */</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="keywordflow">if</span> (priv-&gt;plugin-&gt;basic_settings) {</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Basic&quot;</span>), 20, 2);</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(gfe, grid, priv-&gt;plugin-&gt;basic_settings);</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; }</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="comment">/* The Advanced tab */</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="keywordflow">if</span> (priv-&gt;plugin-&gt;advanced_settings) {</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Advanced&quot;</span>), 20, 2);</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(gfe, grid, priv-&gt;plugin-&gt;advanced_settings);</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; }</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="comment">/* The Behavior tab */</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c">remmina_file_editor_create_behavior_tab</a>(gfe);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <span class="comment">/* The SSH tab */</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <a class="code" href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23">remmina_file_editor_create_ssh_tunnel_tab</a>(gfe, priv-&gt;plugin-&gt;ssh_setting);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <span class="comment">/* Notes tab */</span></div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; grid = <a class="code" href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a>(gfe, NULL, _(<span class="stringliteral">&quot;Notes&quot;</span>), 1, 1);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a>(gfe, grid, notes_settings);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;}</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01422"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16"> 1422</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a>(GtkComboBox *combo, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;{</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; gchar *protocol;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keywordflow">if</span> (priv-&gt;config_container) {</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; gtk_widget_destroy(priv-&gt;config_container);</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; priv-&gt;config_container = NULL;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; gtk_widget_destroy(priv-&gt;config_viewport);</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; priv-&gt;config_viewport = NULL;</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; gtk_widget_destroy(priv-&gt;config_scrollable);</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; priv-&gt;config_scrollable = NULL;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; }</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; priv-&gt;server_combo = NULL;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; priv-&gt;resolution_iws_radio = NULL;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; priv-&gt;resolution_auto_radio = NULL;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; priv-&gt;resolution_custom_radio = NULL;</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; priv-&gt;resolution_custom_combo = NULL;</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; priv-&gt;keymap_combo = NULL;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; priv-&gt;ssh_tunnel_enabled_check = NULL;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; priv-&gt;ssh_tunnel_loopback_check = NULL;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; priv-&gt;ssh_tunnel_server_default_radio = NULL;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; priv-&gt;ssh_tunnel_server_custom_radio = NULL;</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; priv-&gt;ssh_tunnel_server_entry = NULL;</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; priv-&gt;ssh_tunnel_username_entry = NULL;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; priv-&gt;ssh_tunnel_auth_combo = NULL;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; priv-&gt;ssh_tunnel_auth_password = NULL;</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; priv-&gt;ssh_tunnel_privatekey_chooser = NULL;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; priv-&gt;ssh_tunnel_certfile_chooser = NULL;</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; g_hash_table_remove_all(priv-&gt;setting_widgets);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; protocol = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(combo);</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">if</span> (protocol) {</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; priv-&gt;plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; protocol);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; g_free(protocol);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38">remmina_file_editor_create_all_settings</a>(gfe);</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; }</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;}</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;</div><div class="line"><a name="l01466"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb"> 1466</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb">remmina_file_editor_save_behavior_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;{</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;precommand&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;behavior_precommand_entry)));</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;postcommand&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;behavior_postcommand_entry)));</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; gboolean autostart_enabled = (priv-&gt;behavior_autostart_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;behavior_autostart_check)) : FALSE);</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;enable-autostart&quot;</span>, autostart_enabled);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; gboolean lock_enabled = (priv-&gt;behavior_lock_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;behavior_lock_check)) : FALSE);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;profile-lock&quot;</span>, lock_enabled);</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; gboolean disconect_prompt = (priv-&gt;behavior_disconnect ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;behavior_disconnect)) : FALSE);</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;disconnect-prompt&quot;</span>, disconect_prompt);</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;}</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7"> 1482</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7">remmina_file_editor_save_ssh_tunnel_tab</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;{</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; gboolean ssh_tunnel_enabled;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="keywordtype">int</span> ssh_tunnel_auth;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; ssh_tunnel_enabled = (priv-&gt;ssh_tunnel_enabled_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_enabled_check)) : FALSE);</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file,</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>,</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; (priv-&gt;ssh_tunnel_loopback_check ? gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_loopback_check)) : FALSE));</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, ssh_tunnel_enabled);</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>,</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;ssh_tunnel_auth_combo)));</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>,</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; (ssh_tunnel_enabled ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_username_entry)) : NULL));</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>,</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; (ssh_tunnel_enabled &amp;&amp; priv-&gt;ssh_tunnel_server_entry &amp;&amp; (priv-&gt;ssh_tunnel_server_custom_radio == NULL || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;ssh_tunnel_server_custom_radio))) ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_server_entry)) : NULL));</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; ssh_tunnel_auth = gtk_combo_box_get_active(GTK_COMBO_BOX(priv-&gt;ssh_tunnel_auth_combo));</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span>,</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; ssh_tunnel_auth);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; </div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="comment">// If box is unchecked for private key and certfile file choosers,</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="comment">// set the string to NULL in the remmina file </span></div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">if</span> (gtk_widget_get_sensitive(priv-&gt;ssh_tunnel_privatekey_chooser)) {</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>,</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; (priv-&gt;ssh_tunnel_privatekey_chooser ? gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(priv-&gt;ssh_tunnel_privatekey_chooser)) : NULL));</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; }</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span>, NULL);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; }</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; </div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; <span class="keywordflow">if</span> (gtk_widget_get_sensitive(priv-&gt;ssh_tunnel_certfile_chooser)) {</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>,</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; (priv-&gt;ssh_tunnel_certfile_chooser ? gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(priv-&gt;ssh_tunnel_certfile_chooser)) : NULL));</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; }</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span>, NULL);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; }</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>,</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; (ssh_tunnel_enabled &amp;&amp; (ssh_tunnel_auth == <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>)) ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_auth_password)) : NULL);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; priv-&gt;remmina_file,</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span>,</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; (ssh_tunnel_enabled &amp;&amp; (ssh_tunnel_auth == <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a> || ssh_tunnel_auth == <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a>)) ? gtk_entry_get_text(GTK_ENTRY(priv-&gt;ssh_tunnel_passphrase)) : NULL);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;}</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;</div><div class="line"><a name="l01543"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca"> 1543</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; gchar * setting_name_to_validate,</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; gconstpointer value,</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; GError ** err)</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;{</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="keywordflow">if</span> (!setting_name_to_validate || !value || !gfe) {</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">if</span> (!setting_name_to_validate) {</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; g_critical(_(<span class="stringliteral">&quot;(%s: %i): Can&#39;t validate setting &#39;%s&#39; since &#39;value&#39; or &#39;gfe&#39; &quot;</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <span class="stringliteral">&quot;are NULL!&quot;</span>),</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; __func__, __LINE__, setting_name_to_validate);</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; g_critical(_(<span class="stringliteral">&quot;(%s: %i): Can&#39;t validate user input since &quot;</span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="stringliteral">&quot;&#39;setting_name_to_validate&#39;, &#39;value&#39; or &#39;gfe&#39; are NULL!&quot;</span>),</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; __func__, __LINE__);</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; g_set_error(err, 1, 1, _(<span class="stringliteral">&quot;Internal error.&quot;</span>));</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; }</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keywordflow">if</span> (strcmp(setting_name_to_validate, <span class="stringliteral">&quot;notes_text&quot;</span>) == 0) {</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; <span class="comment">// Not a plugin setting. Bail out early.</span></div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; }</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting_iter;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; protocol_plugin = priv-&gt;plugin;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; setting_iter = protocol_plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">basic_settings</a>;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="comment">// gboolean found = FALSE;</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="keywordflow">while</span> (setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="keywordflow">if</span> (setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a> == NULL) {</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; g_error(<span class="stringliteral">&quot;Internal error: a setting name in protocol plugin %s is &quot;</span></div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="stringliteral">&quot;null. Please fix RemminaProtocolSetting struct content.&quot;</span>,</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; protocol_plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a>);</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((gchar *)setting_name_to_validate) {</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="keywordflow">if</span> (strcmp((gchar *)setting_name_to_validate, setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>) == 0) {</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <span class="comment">// found = TRUE;</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; gpointer validator_data = setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a6086b43049072a3a3245c4a45f43dbc5">validator_data</a>;</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; GCallback validator = setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#a94df87db138d4e44e81b3e6c99148ed3">validator</a>;</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="comment">// Default behaviour is that everything is valid,</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <span class="comment">// except a validator is given and its returned GError is not NULL.</span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; GError *err_ret = NULL;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; g_debug(<span class="stringliteral">&quot;Checking setting &#39;%s&#39; for validation.&quot;</span>, setting_iter-&gt;<a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>);</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <span class="keywordflow">if</span> (validator != NULL) {</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="comment">// Looks weird but it calls the setting&#39;s validator</span></div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="comment">// function using setting_name_to_validate, value and</span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; <span class="comment">// validator_data as parameters and it returns a GError*.</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; err_ret = ((GError * (*)(gpointer, gconstpointer, gpointer)) validator)(setting_name_to_validate, value, validator_data);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; }</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; <span class="keywordflow">if</span> (err_ret) {</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; g_debug(<span class="stringliteral">&quot;it has a validator function and it had an error!&quot;</span>);</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; <span class="comment">// pass err (returned value) to function caller.</span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; *err = err_ret;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; }</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; }</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; }</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; setting_iter++;</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; }</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="comment">// if (!found) {</span></div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="comment">// TOO VERBOSE:</span></div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <span class="comment">// g_warning(&quot;%s is not a plugin setting!&quot;, setting_name_to_validate);</span></div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; }</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;}</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;</div><div class="line"><a name="l01621"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9"> 1621</a></span>&#160;<span class="keyword">static</span> GError *<a class="code" href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9">remmina_file_editor_update_settings</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; GtkWidget ** failed_widget)</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;{</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; GHashTableIter iter;</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; gpointer key;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; gpointer widget;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; GtkTextBuffer *buffer;</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; gchar *escaped, *unescaped;</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; GtkTextIter start, end;</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; GError *err = NULL;</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; *failed_widget = NULL;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; g_hash_table_iter_init(&amp;iter, priv-&gt;setting_widgets);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keywordflow">while</span> (g_hash_table_iter_next(&amp;iter, &amp;key, &amp;widget)) {</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; </div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="comment">// We don&#39;t want to save or validate grayed-out settings.</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="comment">// If widget is a file chooser, it was made not sensitive because</span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="comment">// the box was unchecked. In that case, don&#39;t continue. The </span></div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <span class="comment">// relevant file strings will be set to NULL in the remmina file.</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="keywordflow">if</span> (!gtk_widget_get_sensitive(GTK_WIDGET(widget)) &amp;&amp; !GTK_IS_FILE_CHOOSER(widget)) {</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; g_debug(<span class="stringliteral">&quot;Grayed-out setting-widget &#39;%s&#39; will not be saved.&quot;</span>,</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; gtk_widget_get_name(widget));</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; }</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="keywordflow">if</span> (GTK_IS_ENTRY(widget)) {</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="keyword">const</span> gchar *value = gtk_entry_get_text(GTK_ENTRY(widget));</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, value, &amp;err)) {</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; }</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_TEXT_VIEW(widget)) {</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; gtk_text_buffer_get_start_iter(buffer, &amp;start);</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; gtk_text_buffer_get_end_iter(buffer, &amp;end);</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; unescaped = gtk_text_buffer_get_text(buffer, &amp;start, &amp;end, FALSE);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; escaped = g_uri_escape_string(unescaped, NULL, TRUE);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, escaped, &amp;err)) {</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; }</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, escaped);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; g_free(escaped);</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_COMBO_BOX(widget)) {</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; gchar *value = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(widget));</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, value, &amp;err)) {</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; }</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_FILE_CHOOSER(widget)) {</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; gchar *value = gtk_widget_get_sensitive(GTK_WIDGET(widget)) ? gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)) : NULL;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; <span class="keywordflow">if</span> (!gtk_widget_get_sensitive(GTK_WIDGET(widget))) {</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; }</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, value, &amp;err)) {</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; g_free(value);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; }</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; g_free(value);</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (GTK_IS_TOGGLE_BUTTON(widget)) {</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a>(gfe, (gchar *)key, &amp;value, &amp;err)) {</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; <span class="comment">// Error while validating!</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <span class="comment">// err should be set now.</span></div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; *failed_widget = widget;</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; }</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, (gchar *)key, value);</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; }</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; }</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">return</span> err;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;}</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5"> 1726</a></span>&#160;<span class="keyword">static</span> GError *<a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> * gfe,</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; GtkWidget ** failed_widget)</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;{</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <span class="keywordtype">int</span> res_w, res_h;</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; gchar *custom_resolution;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78a">RemminaProtocolWidgetResolutionMode</a> res_mode;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;name&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;name_entry)));</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;labels&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;labels_entry)));</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;group&quot;</span>,</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; (priv-&gt;group_combo ? <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;group_combo)) : NULL));</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;protocol&quot;</span>,</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo)));</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;server&quot;</span>,</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; (priv-&gt;server_combo ? <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;server_combo)) : NULL));</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="keywordflow">if</span> (priv-&gt;resolution_auto_radio) {</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; <span class="keywordflow">if</span> (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;resolution_auto_radio))) {</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <span class="comment">/* Resolution is set to auto (which means: Use client fullscreen resolution, aka use client resolution) */</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; res_w = res_h = 0;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d">RES_USE_CLIENT</a>;</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;resolution_iws_radio))) {</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="comment">/* Resolution is set to initial window size */</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; res_w = res_h = 0;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <span class="comment">/* Resolution is set to a value from the list */</span></div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; custom_resolution = <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;resolution_custom_combo));</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__public_8c.html#aaf3fdb980c24cd06965b85ebcdd79173">remmina_public_split_resolution_string</a>(custom_resolution, &amp;res_w, &amp;res_h))</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>;</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; g_free(custom_resolution);</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; }</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;resolution_mode&quot;</span>, res_mode);</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;resolution_width&quot;</span>, res_w);</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;resolution_height&quot;</span>, res_h);</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; }</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; <span class="keywordflow">if</span> (priv-&gt;assistance_toggle){</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; <span class="keywordflow">if</span> (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv-&gt;assistance_toggle))) {</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_file&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;assistance_file)));</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_pass&quot;</span>, gtk_entry_get_text(GTK_ENTRY(priv-&gt;assistance_password)));</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_mode&quot;</span>, 1);</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; }<span class="keywordflow">else</span>{</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;assistance_mode&quot;</span>, 0);</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; }</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; </div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; }</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="keywordflow">if</span> (priv-&gt;keymap_combo)</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(priv-&gt;remmina_file, <span class="stringliteral">&quot;keymap&quot;</span>,</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; <a class="code" href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a>(GTK_COMBO_BOX(priv-&gt;keymap_combo)));</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb">remmina_file_editor_save_behavior_tab</a>(gfe);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7">remmina_file_editor_save_ssh_tunnel_tab</a>(gfe);</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9">remmina_file_editor_update_settings</a>(gfe, failed_widget);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;}</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;</div><div class="line"><a name="l01792"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6"> 1792</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6">remmina_file_editor_on_default</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;{</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *gf;</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; GtkWidget *dialog;</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; }</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; gf = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <a class="code" href="remmina__file_8c.html#ab03b042504c09c1ad880ac126a703114">remmina_file_set_filename</a>(gf, <a class="code" href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a>);</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <span class="comment">/* Clear properties that should never be default */</span></div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;name&quot;</span>, NULL);</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;server&quot;</span>, NULL);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;password&quot;</span>, NULL);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;precommand&quot;</span>, NULL);</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;postcommand&quot;</span>, NULL);</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>, NULL);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>, NULL);</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span>, NULL);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(gf);</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(gf);</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; dialog = gtk_message_dialog_new(GTK_WINDOW(gfe), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO,</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; GTK_BUTTONS_OK, _(<span class="stringliteral">&quot;Default settings saved.&quot;</span>));</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;}</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;</div><div class="line"><a name="l01830"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad"> 1830</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad">remmina_file_editor_on_save</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;{</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; }</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a>(gfe);</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; <a class="code" href="remmina__icon_8c.html#af80ed314f91d653237249d839c7fc3b2">remmina_icon_populate_menu</a>();</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;}</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25"> 1850</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25">remmina_file_editor_on_connect</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;{</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *gf;</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; }</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; gf = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; <span class="comment">/* Put server into name for &quot;Quick Connect&quot; */</span></div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(gf) == NULL)</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;name&quot;</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gf, <span class="stringliteral">&quot;server&quot;</span>));</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; gf-&gt;prevent_saving = TRUE;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <a class="code" href="rcw_8c.html#a1b7a771392e15e527005305e71cc2546">rcw_open_from_file</a>(gf);</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;}</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;</div><div class="line"><a name="l01872"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e"> 1872</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e">remmina_file_editor_on_save_connect</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;{</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *gf;</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; GtkWidget *failed_widget = NULL;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; GError *err = <a class="code" href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a>(gfe, &amp;failed_widget);</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; <span class="keywordflow">if</span> (err) {</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; g_warning(_(<span class="stringliteral">&quot;Couldn&#39;t validate user input. %s&quot;</span>), err-&gt;message);</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a>(gfe, failed_widget, err);</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; }</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a>(gfe);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; <a class="code" href="remmina__icon_8c.html#af80ed314f91d653237249d839c7fc3b2">remmina_icon_populate_menu</a>();</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; gf = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file);</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; <span class="comment">/* Put server into name for Quick Connect */</span></div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(gf) == NULL)</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(gf, <span class="stringliteral">&quot;name&quot;</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gf, <span class="stringliteral">&quot;server&quot;</span>));</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <a class="code" href="rcw_8c.html#a1b7a771392e15e527005305e71cc2546">rcw_open_from_file</a>(gf);</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;}</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;</div><div class="line"><a name="l01899"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3"> 1899</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3">remmina_file_editor_on_cancel</a>(GtkWidget *button, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;{</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; gtk_widget_destroy(GTK_WIDGET(gfe));</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;}</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;</div><div class="line"><a name="l01905"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a9afd8d41c66f547320930eb331f3124d"> 1905</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a9afd8d41c66f547320930eb331f3124d">remmina_file_editor_init</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;{</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; priv = g_new0(<a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a>, 1);</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a> = priv;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <span class="comment">/* Create the editor dialog */</span></div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; gtk_window_set_title(GTK_WINDOW(gfe), _(<span class="stringliteral">&quot;Remote Connection Profile&quot;</span>));</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;_Cancel&quot;</span>)), GTK_RESPONSE_CANCEL);</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3">remmina_file_editor_on_cancel</a>), gfe);</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; <span class="comment">/* Default button */</span></div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;Save as Default&quot;</span>)), GTK_RESPONSE_OK);</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; gtk_widget_set_tooltip_text(GTK_WIDGET(widget), _(<span class="stringliteral">&quot;Use the current settings as the default for all new connection profiles&quot;</span>));</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6">remmina_file_editor_on_default</a>), gfe);</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;_Save&quot;</span>)), GTK_RESPONSE_APPLY);</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad">remmina_file_editor_on_save</a>), gfe);</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; gtk_widget_set_sensitive(widget, FALSE);</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; priv-&gt;save_button = widget;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;Connect&quot;</span>)), GTK_RESPONSE_ACCEPT);</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25">remmina_file_editor_on_connect</a>), gfe);</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; widget = gtk_dialog_add_button(GTK_DIALOG(gfe), (_(<span class="stringliteral">&quot;_Save and Connect&quot;</span>)), GTK_RESPONSE_OK);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; gtk_widget_set_can_default(widget, TRUE);</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;clicked&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e">remmina_file_editor_on_save_connect</a>), gfe);</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; gtk_dialog_set_default_response(GTK_DIALOG(gfe), GTK_RESPONSE_OK);</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; gtk_window_set_default_size(GTK_WINDOW(gfe), 800, 600);</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; g_signal_connect(G_OBJECT(gfe), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f">remmina_file_editor_destroy</a>), NULL);</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; g_signal_connect(G_OBJECT(gfe), <span class="stringliteral">&quot;realize&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b">remmina_file_editor_on_realize</a>), NULL);</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; priv-&gt;setting_widgets = g_hash_table_new(g_str_hash, g_str_equal);</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; <a class="code" href="remmina__widget__pool_8c.html#ae3c9c9853eb5bedbfeadbfac1d495b95">remmina_widget_pool_register</a>(GTK_WIDGET(gfe));</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;}</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;</div><div class="line"><a name="l01948"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b"> 1948</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b">remmina_file_editor_iterate_protocol</a>(gchar *protocol, <a class="code" href="struct___remmina_plugin.html">RemminaPlugin</a> *plugin, gpointer data)</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;{</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe = REMMINA_FILE_EDITOR(data);</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; GtkListStore *store;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; GtkTreeIter iter;</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; gboolean first;</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;protocol_combo)));</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; first = !gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &amp;iter);</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; gtk_list_store_append(store, &amp;iter);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; gtk_list_store_set(store, &amp;iter, 0, protocol, 1, g_dgettext(plugin-&gt;<a class="code" href="struct___remmina_plugin.html#a024d3e6d752dd29828b31c60c8c7c201">domain</a>, plugin-&gt;<a class="code" href="struct___remmina_plugin.html#a4ac66b7ebefb9bd8167737eb1af83cde">description</a>), 2,</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; ((<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)plugin)-&gt;icon_name, -1);</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; <span class="keywordflow">if</span> (first || g_strcmp0(protocol, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;remmina_file, <span class="stringliteral">&quot;protocol&quot;</span>)) == 0)</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; gtk_combo_box_set_active_iter(GTK_COMBO_BOX(gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>-&gt;protocol_combo), &amp;iter);</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;}</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;</div><div class="line"><a name="l01970"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#add382dd8f40444b928e78b293a86a257"> 1970</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;{</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; gtk_widget_set_sensitive(priv-&gt;group_combo, TRUE);</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; gtk_widget_set_sensitive(priv-&gt;save_button, TRUE);</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;}</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;</div><div class="line"><a name="l01980"></a><span class="lineno"><a class="line" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b"> 1980</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a>(GtkEditable *editable, <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;{</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file) == NULL) {</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; <span class="comment">/* TODO: Probably to be removed */</span></div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(gfe);</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <a class="code" href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a>(<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file));</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(gfe);</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; }</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;}</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;</div><div class="line"><a name="l01997"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#a3866832d550ceac91d608900df4c8056"> 1997</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe)</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;{</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file) == NULL) {</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <a class="code" href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a>(<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(priv-&gt;remmina_file));</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(priv-&gt;remmina_file);</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; }</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;}</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;</div><div class="line"><a name="l02011"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#a08327d6951c345808628dbb5784aba06"> 2011</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;{</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; <a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> *priv;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; GtkWidget *grid;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; GtkWidget *widget;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; gchar *groups;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; gchar *s;</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; <span class="keyword">const</span> gchar *cs;</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; gfe = REMMINA_FILE_EDITOR(g_object_new(REMMINA_TYPE_FILE_EDITOR, NULL));</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; priv = gfe-&gt;<a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; priv-&gt;remmina_file = remminafile;</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile) == NULL)</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; gtk_dialog_set_response_sensitive(GTK_DIALOG(gfe), GTK_RESPONSE_APPLY, FALSE);</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; <span class="comment">/* Create the &quot;Profile&quot; group on the top (for name and protocol) */</span></div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; grid = gtk_grid_new();</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; gtk_widget_show(grid);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; gtk_grid_set_row_spacing(GTK_GRID(grid), 4);</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 8);</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; gtk_grid_set_column_homogeneous(GTK_GRID(grid), TRUE);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; gtk_container_set_border_width(GTK_CONTAINER(grid), 8);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(gfe))), grid, FALSE, FALSE, 2);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; <span class="comment">// remmina_public_create_group(GTK_GRID(grid), _(&quot;Profile&quot;), 0, 4, 3);</span></div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; gboolean profile_file_exists = (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile) != NULL);</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; <span class="comment">/* Profile: Name */</span></div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Name&quot;</span>));</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 3, 2, 1);</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 10);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, 3, 3, 1);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 100);</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; priv-&gt;name_entry = widget;</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; <span class="keywordflow">if</span> (!profile_file_exists) {</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), _(<span class="stringliteral">&quot;Quick Connect&quot;</span>));</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 16, 0)</span></div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; gtk_entry_grab_focus_without_selecting(GTK_ENTRY(widget));</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;changed&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a>), gfe);</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;name&quot;</span>);</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; }</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; <span class="comment">/* Profile: Group */</span></div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Group&quot;</span>));</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 6, 2, 1);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; groups = <a class="code" href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a>();</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; priv-&gt;group_combo = <a class="code" href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a>(groups, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;group&quot;</span>), FALSE);</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; g_free(groups);</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; gtk_widget_show(priv-&gt;group_combo);</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; gtk_grid_attach(GTK_GRID(grid), priv-&gt;group_combo, 1, 6, 3, 1);</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; gtk_widget_set_sensitive(priv-&gt;group_combo, FALSE);</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Use &#39;%s&#39; as subgroup delimiter&quot;</span>), <span class="stringliteral">&quot;/&quot;</span>);</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; gtk_widget_set_tooltip_text(priv-&gt;group_combo, s);</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; g_free(s);</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; <span class="comment">/* Profile: Labels */</span></div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Labels&quot;</span>));</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 9, 2, 1);</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; gtk_grid_set_column_spacing(GTK_GRID(grid), 10);</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; widget = gtk_entry_new();</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, 9, 3, 1);</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; gtk_entry_set_max_length(GTK_ENTRY(widget), 255);</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; priv-&gt;labels_entry = widget;</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; <span class="keywordflow">if</span> (!profile_file_exists) {</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; gtk_widget_set_tooltip_text(widget, _(<span class="stringliteral">&quot;Label1,Label2&quot;</span>));</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;<span class="preprocessor">#if GTK_CHECK_VERSION(3, 16, 0)</span></div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; gtk_entry_grab_focus_without_selecting(GTK_ENTRY(widget));</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;changed&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a>), gfe);</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; cs = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;labels&quot;</span>);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; gtk_entry_set_text(GTK_ENTRY(widget), cs ? cs : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; }</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; <span class="comment">/* Profile: Protocol */</span></div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; widget = gtk_label_new(_(<span class="stringliteral">&quot;Protocol&quot;</span>));</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; gtk_widget_set_valign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; gtk_widget_set_halign(widget, GTK_ALIGN_START);</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 0, 12, 2, 1);</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; widget = <a class="code" href="remmina__public_8c.html#ab4a593956dfe89aba3242a5c264a681f">remmina_public_create_combo</a>(TRUE);</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; gtk_grid_attach(GTK_GRID(grid), widget, 1, 12, 3, 1);</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; priv-&gt;protocol_combo = widget;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; <a class="code" href="remmina__plugin__manager_8c.html#a13f13a6a4280268656f258cb5aeff031">remmina_plugin_manager_for_each_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, <a class="code" href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b">remmina_file_editor_iterate_protocol</a>, gfe);</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;changed&quot;</span>, G_CALLBACK(<a class="code" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a>), gfe);</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <span class="comment">/* Create the &quot;Preference&quot; frame */</span></div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; widget = gtk_event_box_new();</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; gtk_widget_show(widget);</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(gfe))), widget, TRUE, TRUE, 2);</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; priv-&gt;config_box = widget;</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; priv-&gt;config_container = NULL;</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; priv-&gt;config_scrollable = NULL;</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; <a class="code" href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a>(GTK_COMBO_BOX(priv-&gt;protocol_combo), gfe);</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; <a class="code" href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(gfe);</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; <span class="keywordflow">return</span> GTK_WIDGET(gfe);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;}</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;</div><div class="line"><a name="l02140"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#aa4e8657ca722e4cce3f3c42c0cfec51e"> 2140</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;{</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a>(NULL, NULL);</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;}</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;</div><div class="line"><a name="l02146"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#ab563344276cbcdf0fcea05b0b64c7aeb"> 2146</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a>(<span class="keyword">const</span> gchar *server, <span class="keyword">const</span> gchar *protocol)</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;{</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; remminafile = <a class="code" href="remmina__file_8c.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a>();</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; <span class="keywordflow">if</span> (server)</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>, server);</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; <span class="keywordflow">if</span> (protocol)</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;protocol&quot;</span>, protocol);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(remminafile);</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;}</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;</div><div class="line"><a name="l02160"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#aa5c50852f8569f075eec5d5db30c2ebf"> 2160</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;{</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; GtkWidget *dialog;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; remminafile = <a class="code" href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a>(filename);</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(remminafile);</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; _(<span class="stringliteral">&quot;Could not find the file “%s”.&quot;</span>), filename);</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; }</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;}</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;</div><div class="line"><a name="l02179"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#aa9345cfe3fb32d326b652e96ee55eaea"> 2179</a></span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;{</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; remminafile = <a class="code" href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a>(filename);</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">&quot;profile-lock&quot;</span>, FALSE) &amp;&amp; <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(<a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>()) == 0)</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(remminafile);</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; GtkWidget *dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; _(<span class="stringliteral">&quot;Could not find the file “%s”.&quot;</span>), filename);</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; gtk_widget_destroy(dialog);</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; }</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;}</div><div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a579ed0f0f6624dd55a25665693c92a92">REMMINA_PROTOCOL_SETTING_TYPE_SERVER</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00100">types.h:100</a></div></div>
<div class="ttc" id="remmina__public_8c_html_af9c70a727bfeb32730b98ce5cf7a3739"><div class="ttname"><a href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a></div><div class="ttdeci">void remmina_public_create_group(GtkGrid *grid, const gchar *group, gint row, gint rows, gint cols)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00251">remmina_public.c:251</a></div></div>
<div class="ttc" id="remmina__plugin__manager_8c_html_af60b8edfa50563ae4c7593efc3deed55"><div class="ttname"><a href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a></div><div class="ttdeci">const gchar * remmina_plugin_manager_get_canonical_setting_name(const RemminaProtocolSetting *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00456">remmina_plugin_manager.c:456</a></div></div>
<div class="ttc" id="remmina__string__list_8c_html_a11147c41297537effe55f18a63ce9f7e"><div class="ttname"><a href="remmina__string__list_8c.html#a11147c41297537effe55f18a63ce9f7e">remmina_string_list_new</a></div><div class="ttdeci">GtkDialog * remmina_string_list_new(gboolean two_columns, const gchar *fields_separator)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__list_8c_source.html#l00280">remmina_string_list.c:280</a></div></div>
@@ -95,15 +95,15 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html',
<div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div>
<div class="ttc" id="remmina__pref_8c_html_a745bbef1d48a7462f8db997821742395"><div class="ttname"><a href="remmina__pref_8c.html#a745bbef1d48a7462f8db997821742395">remmina_pref_keymap_groups</a></div><div class="ttdeci">gchar ** remmina_pref_keymap_groups(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01054">remmina_pref.c:1054</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_afad358c6e3a5918416c6eb036157d8e5"><div class="ttname"><a href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5">remmina_file_editor_create_resolution</a></div><div class="ttdeci">static void remmina_file_editor_create_resolution(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, GtkWidget *grid, gint row)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00567">remmina_file_editor.c:567</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_afad358c6e3a5918416c6eb036157d8e5"><div class="ttname"><a href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5">remmina_file_editor_create_resolution</a></div><div class="ttdeci">static void remmina_file_editor_create_resolution(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, GtkWidget *grid, gint row)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00568">remmina_file_editor.c:568</a></div></div>
<div class="ttc" id="remmina__ssh_8h_html"><div class="ttname"><a href="remmina__ssh_8h.html">remmina_ssh.h</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350aadb70e5d52a6eccc1aaf6f1428c1fb11"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350aadb70e5d52a6eccc1aaf6f1428c1fb11">REMMINA_PROTOCOL_SETTING_TYPE_TEXTAREA</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00107">types.h:107</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_af253834273229ac38c6fdfe613626965"><div class="ttname"><a href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965">remmina_file_editor_create_combo</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_combo(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *list, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00793">remmina_file_editor.c:793</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_af253834273229ac38c6fdfe613626965"><div class="ttname"><a href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965">remmina_file_editor_create_combo</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_combo(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *list, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00794">remmina_file_editor.c:794</a></div></div>
<div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00071">remmina_file.h:71</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ab4c68b7df42ebd08e953cc72c5b97583"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ab4c68b7df42ebd08e953cc72c5b97583">REMMINA_PROTOCOL_SETTING_TYPE_INT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00113">types.h:113</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a3fb992fced83e0f1c4e4e3c8d2206be5"><div class="ttname"><a href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a></div><div class="ttdeci">RemminaFile * remmina_file_dup(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00865">remmina_file.c:865</a></div></div>
<div class="ttc" id="remmina__public_8c_html_a9ec86f1e9caea5ebc867a90230d6b51a"><div class="ttname"><a href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a></div><div class="ttdeci">GtkWidget * remmina_public_create_combo_entry(const gchar *text, const gchar *def, gboolean descending)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00065">remmina_public.c:65</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a73b8581fd1fd77532b748d91a2951f25"><div class="ttname"><a href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25">remmina_file_editor_on_connect</a></div><div class="ttdeci">static void remmina_file_editor_on_connect(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01840">remmina_file_editor.c:1840</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a73b8581fd1fd77532b748d91a2951f25"><div class="ttname"><a href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25">remmina_file_editor_on_connect</a></div><div class="ttdeci">static void remmina_file_editor_on_connect(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01850">remmina_file_editor.c:1850</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00110">types.h:110</a></div></div>
<div class="ttc" id="rcw_8c_html_af657fd4825d16d8d003a8b42fbd0c715"><div class="ttname"><a href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a></div><div class="ttdeci">gchar * remmina_pref_file</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00078">rcw.c:78</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a7740488de65c0e642895cc9dfba07b6e"><div class="ttname"><a href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a></div><div class="ttdeci">GtkWindow * remmina_main_get_window()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01736">remmina_main.c:1736</a></div></div>
@@ -112,32 +112,32 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html',
<div class="ttc" id="remmina__file__editor_8c_html_abb7466f51c11427405a54c94767a52de"><div class="ttname"><a href="remmina__file__editor_8c.html#abb7466f51c11427405a54c94767a52de">G_DEFINE_TYPE</a></div><div class="ttdeci">G_DEFINE_TYPE(RemminaFileEditor, remmina_file_editor, GTK_TYPE_DIALOG)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00058">remmina_file_editor.c:58</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00106">types.h:106</a></div></div>
<div class="ttc" id="remmina__file__manager_8h_html"><div class="ttname"><a href="remmina__file__manager_8h.html">remmina_file_manager.h</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ac47032c150cbdb7bf691059b4e3eb9d0"><div class="ttname"><a href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0">remmina_file_editor_create_int</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_int(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gint value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00907">remmina_file_editor.c:907</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a8a7f3ce69255bf413ef8fa841af3d019"><div class="ttname"><a href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_ssh_tunnel_enabled_check_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe, RemminaProtocolSSHSetting ssh_setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00394">remmina_file_editor.c:394</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ac47032c150cbdb7bf691059b4e3eb9d0"><div class="ttname"><a href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0">remmina_file_editor_create_int</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_int(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gint value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00908">remmina_file_editor.c:908</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a8a7f3ce69255bf413ef8fa841af3d019"><div class="ttname"><a href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_ssh_tunnel_enabled_check_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe, RemminaProtocolSSHSetting ssh_setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00395">remmina_file_editor.c:395</a></div></div>
<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a9266544ca3a532b9a02d985c18113e80"><div class="ttname"><a href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80">remmina_file_editor_create_double</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_double(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, gdouble value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00949">remmina_file_editor.c:949</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ac9b7c0ba5ece064548bcaf72d1b0425a"><div class="ttname"><a href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_select(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gpointer *list, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00771">remmina_file_editor.c:771</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a9266544ca3a532b9a02d985c18113e80"><div class="ttname"><a href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80">remmina_file_editor_create_double</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_double(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, gdouble value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00950">remmina_file_editor.c:950</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ac9b7c0ba5ece064548bcaf72d1b0425a"><div class="ttname"><a href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_select(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gpointer *list, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00772">remmina_file_editor.c:772</a></div></div>
<div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a333de350f1b07add2d0fd06320c80d16"><div class="ttname"><a href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a></div><div class="ttdeci">static void remmina_file_editor_protocol_combo_on_changed(GtkComboBox *combo, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01414">remmina_file_editor.c:1414</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a333de350f1b07add2d0fd06320c80d16"><div class="ttname"><a href="remmina__file__editor_8c.html#a333de350f1b07add2d0fd06320c80d16">remmina_file_editor_protocol_combo_on_changed</a></div><div class="ttdeci">static void remmina_file_editor_protocol_combo_on_changed(GtkComboBox *combo, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01422">remmina_file_editor.c:1422</a></div></div>
<div class="ttc" id="remmina__plugin__manager_8c_html_a13f13a6a4280268656f258cb5aeff031"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a13f13a6a4280268656f258cb5aeff031">remmina_plugin_manager_for_each_plugin</a></div><div class="ttdeci">void remmina_plugin_manager_for_each_plugin(RemminaPluginType type, RemminaPluginFunc func, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00472">remmina_plugin_manager.c:472</a></div></div>
<div class="ttc" id="remmina__widget__pool_8c_html_ae3c9c9853eb5bedbfeadbfac1d495b95"><div class="ttname"><a href="remmina__widget__pool_8c.html#ae3c9c9853eb5bedbfeadbfac1d495b95">remmina_widget_pool_register</a></div><div class="ttdeci">void remmina_widget_pool_register(GtkWidget *widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__widget__pool_8c_source.html#l00056">remmina_widget_pool.c:56</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa">REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00101">types.h:101</a></div></div>
<div class="ttc" id="remmina__widget__pool_8h_html"><div class="ttname"><a href="remmina__widget__pool_8h.html">remmina_widget_pool.h</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a16a83c00dba8d929cce531d5a0181a2d"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a16a83c00dba8d929cce531d5a0181a2d">REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00103">types.h:103</a></div></div>
<div class="ttc" id="plugin_8h_html_aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24"><div class="ttname"><a href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00047">plugin.h:47</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a6eb0bcee764064d6a7dd84c015d9ed4f"><div class="ttname"><a href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f">remmina_file_editor_destroy</a></div><div class="ttdeci">static void remmina_file_editor_destroy(GtkWidget *widget, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00293">remmina_file_editor.c:293</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a6eb0bcee764064d6a7dd84c015d9ed4f"><div class="ttname"><a href="remmina__file__editor_8c.html#a6eb0bcee764064d6a7dd84c015d9ed4f">remmina_file_editor_destroy</a></div><div class="ttdeci">static void remmina_file_editor_destroy(GtkWidget *widget, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00294">remmina_file_editor.c:294</a></div></div>
<div class="ttc" id="remmina__public_8c_html_af1679d83834c8409f23e00c555d677fb"><div class="ttname"><a href="remmina__public_8c.html#af1679d83834c8409f23e00c555d677fb">remmina_public_combo_get_active_text</a></div><div class="ttdeci">gchar * remmina_public_combo_get_active_text(GtkComboBox *combo)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00272">remmina_public.c:272</a></div></div>
<div class="ttc" id="remmina__trace__calls_8h_html"><div class="ttname"><a href="remmina__trace__calls_8h.html">remmina_trace_calls.h</a></div></div>
<div class="ttc" id="remmina__public_8c_html_a098786d3aa6991aeba43a61e29d534d0"><div class="ttname"><a href="remmina__public_8c.html#a098786d3aa6991aeba43a61e29d534d0">remmina_public_resolution_validation_func</a></div><div class="ttdeci">gboolean remmina_public_resolution_validation_func(const gchar *new_str, gchar **error)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00598">remmina_public.c:598</a></div></div>
<div class="ttc" id="struct___remmina_plugin_html_a024d3e6d752dd29828b31c60c8c7c201"><div class="ttname"><a href="struct___remmina_plugin.html#a024d3e6d752dd29828b31c60c8c7c201">_RemminaPlugin::domain</a></div><div class="ttdeci">const gchar * domain</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00060">plugin.h:60</a></div></div>
<div class="ttc" id="remmina__pref_8c_html_a0208d5dc8197423da67e5967aafb7a05"><div class="ttname"><a href="remmina__pref_8c.html#a0208d5dc8197423da67e5967aafb7a05">remmina_pref_get_recent</a></div><div class="ttdeci">gchar * remmina_pref_get_recent(const gchar *protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l00980">remmina_pref.c:980</a></div></div>
<div class="ttc" id="remmina__pref__dialog_8h_html"><div class="ttname"><a href="remmina__pref__dialog_8h.html">remmina_pref_dialog.h</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_af7edb004da0ecc48277c1b656f2649ae"><div class="ttname"><a href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae">remmina_file_editor_create_server</a></div><div class="ttdeci">static void remmina_file_editor_create_server(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, GtkWidget *grid, gint row)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00451">remmina_file_editor.c:451</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_af7edb004da0ecc48277c1b656f2649ae"><div class="ttname"><a href="remmina__file__editor_8c.html#af7edb004da0ecc48277c1b656f2649ae">remmina_file_editor_create_server</a></div><div class="ttdeci">static void remmina_file_editor_create_server(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, GtkWidget *grid, gint row)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00452">remmina_file_editor.c:452</a></div></div>
<div class="ttc" id="remmina__icon_8c_html_af80ed314f91d653237249d839c7fc3b2"><div class="ttname"><a href="remmina__icon_8c.html#af80ed314f91d653237249d839c7fc3b2">remmina_icon_populate_menu</a></div><div class="ttdeci">void remmina_icon_populate_menu(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__icon_8c_source.html#l00256">remmina_icon.c:256</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ae2237632b23d3c90a842bc5bc8302ec5"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ae2237632b23d3c90a842bc5bc8302ec5">REMMINA_PROTOCOL_SETTING_TYPE_COMBO</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00109">types.h:109</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ab563344276cbcdf0fcea05b0b64c7aeb"><div class="ttname"><a href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_full(const gchar *server, const gchar *protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02136">remmina_file_editor.c:2136</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ab563344276cbcdf0fcea05b0b64c7aeb"><div class="ttname"><a href="remmina__file__editor_8c.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_full(const gchar *server, const gchar *protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02146">remmina_file_editor.c:2146</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a4e31f91e2398f16844f58c1cf13582da"><div class="ttname"><a href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da">remmina_file_get_double</a></div><div class="ttdeci">gdouble remmina_file_get_double(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00629">remmina_file.c:629</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a9afd8d41c66f547320930eb331f3124d"><div class="ttname"><a href="remmina__file__editor_8c.html#a9afd8d41c66f547320930eb331f3124d">remmina_file_editor_init</a></div><div class="ttdeci">static void remmina_file_editor_init(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01895">remmina_file_editor.c:1895</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a9afd8d41c66f547320930eb331f3124d"><div class="ttname"><a href="remmina__file__editor_8c.html#a9afd8d41c66f547320930eb331f3124d">remmina_file_editor_init</a></div><div class="ttdeci">static void remmina_file_editor_init(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01905">remmina_file_editor.c:1905</a></div></div>
<div class="ttc" id="struct___remmina_pref_html_a59eebf1d365ef192de8e14da2c381f37"><div class="ttname"><a href="struct___remmina_pref.html#a59eebf1d365ef192de8e14da2c381f37">_RemminaPref::resolutions</a></div><div class="ttdeci">gchar * resolutions</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00145">remmina_pref.h:145</a></div></div>
<div class="ttc" id="remmina__file_8c_html_ac952f8ddb715314f11cef1ccc513fb7e"><div class="ttname"><a href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a></div><div class="ttdeci">void remmina_file_generate_filename(RemminaFile *remminafile)</div><div class="ttdoc">Generate a new Remmina connection profile file name. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00114">remmina_file.c:114</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_a55a12c6ed9ab21954208e0e83165f770"><div class="ttname"><a href="struct___remmina_protocol_setting.html#a55a12c6ed9ab21954208e0e83165f770">_RemminaProtocolSetting::opt2</a></div><div class="ttdeci">gpointer opt2</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00123">types.h:123</a></div></div>
@@ -147,22 +147,22 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html',
<div class="ttc" id="remmina__public_8c_html_aaf3fdb980c24cd06965b85ebcdd79173"><div class="ttname"><a href="remmina__public_8c.html#aaf3fdb980c24cd06965b85ebcdd79173">remmina_public_split_resolution_string</a></div><div class="ttdeci">int remmina_public_split_resolution_string(const char *resolution_string, int *w, int *h)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00697">remmina_public.c:697</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_ab434990a6fe70b7e8a4a8b11129527a6"><div class="ttname"><a href="struct___remmina_protocol_setting.html#ab434990a6fe70b7e8a4a8b11129527a6">_RemminaProtocolSetting::compact</a></div><div class="ttdeci">gboolean compact</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00121">types.h:121</a></div></div>
<div class="ttc" id="types_8h_html_a373ddef8221457d86c64830c26d3f78a"><div class="ttname"><a href="types_8h.html#a373ddef8221457d86c64830c26d3f78a">RemminaProtocolWidgetResolutionMode</a></div><div class="ttdeci">RemminaProtocolWidgetResolutionMode</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00148">types.h:148</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a2808be66552b252210e1c3b76530cd11"><div class="ttname"><a href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a></div><div class="ttdeci">static void remmina_file_editor_show_validation_error_popup(RemminaFileEditor *gfe, GtkWidget *failed_widget, GError *err)</div><div class="ttdoc">Shows a tooltip-like window which tells the user what they did wrong to trigger the validation functi...</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00164">remmina_file_editor.c:164</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a2808be66552b252210e1c3b76530cd11"><div class="ttname"><a href="remmina__file__editor_8c.html#a2808be66552b252210e1c3b76530cd11">remmina_file_editor_show_validation_error_popup</a></div><div class="ttdeci">static void remmina_file_editor_show_validation_error_popup(RemminaFileEditor *gfe, GtkWidget *failed_widget, GError *err)</div><div class="ttdoc">Shows a tooltip-like window which tells the user what they did wrong to trigger the validation functi...</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00165">remmina_file_editor.c:165</a></div></div>
<div class="ttc" id="remmina__public_8c_html_a616258d3226ec1f1ecee6ce18aba535b"><div class="ttname"><a href="remmina__public_8c.html#a616258d3226ec1f1ecee6ce18aba535b">remmina_public_create_combo_map</a></div><div class="ttdeci">GtkWidget * remmina_public_create_combo_map(const gpointer *key_value_list, const gchar *def, gboolean use_icon, const gchar *domain)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00211">remmina_public.c:211</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ab5d28ebef67a21099e99268bd6fa04aa"><div class="ttname"><a href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_chooser(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gint type, gchar *setting_name)</div><div class="ttdoc">Create checkbox + gtk_file_chooser for open files and select folders. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00844">remmina_file_editor.c:844</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ab5d28ebef67a21099e99268bd6fa04aa"><div class="ttname"><a href="remmina__file__editor_8c.html#ab5d28ebef67a21099e99268bd6fa04aa">remmina_file_editor_create_chooser</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_chooser(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gint type, gchar *setting_name)</div><div class="ttdoc">Create checkbox + gtk_file_chooser for open files and select folders. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00845">remmina_file_editor.c:845</a></div></div>
<div class="ttc" id="types_8h_html_a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d"><div class="ttname"><a href="types_8h.html#a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d">RES_USE_CLIENT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00151">types.h:151</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a54d3b1890fcf67c2f7615e37f27f7583"><div class="ttname"><a href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_password(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00502">remmina_file_editor.c:502</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a54d3b1890fcf67c2f7615e37f27f7583"><div class="ttname"><a href="remmina__file__editor_8c.html#a54d3b1890fcf67c2f7615e37f27f7583">remmina_file_editor_create_password</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_password(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00503">remmina_file_editor.c:503</a></div></div>
<div class="ttc" id="remmina__file_8c_html_ab03b042504c09c1ad880ac126a703114"><div class="ttname"><a href="remmina__file_8c.html#ab03b042504c09c1ad880ac126a703114">remmina_file_set_filename</a></div><div class="ttdeci">void remmina_file_set_filename(RemminaFile *remminafile, const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00182">remmina_file.c:182</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aadf4d0ab51fe09231b48d4a2939564f7"><div class="ttname"><a href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7">ssh_tunnel_auth_list</a></div><div class="ttdeci">static gpointer ssh_tunnel_auth_list[]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01198">remmina_file_editor.c:1198</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aadf4d0ab51fe09231b48d4a2939564f7"><div class="ttname"><a href="remmina__file__editor_8c.html#aadf4d0ab51fe09231b48d4a2939564f7">ssh_tunnel_auth_list</a></div><div class="ttdeci">static gpointer ssh_tunnel_auth_list[]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01206">remmina_file_editor.c:1206</a></div></div>
<div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7a113aff9a0339ebe347ddf738d8c1f371"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a113aff9a0339ebe347ddf738d8c1f371">REMMINA_PROTOCOL_SSH_SETTING_SSH</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00131">types.h:131</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ac4aed08e645f690ef347adec9cdbb9b9"><div class="ttname"><a href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9">remmina_file_editor_update_settings</a></div><div class="ttdeci">static GError * remmina_file_editor_update_settings(RemminaFileEditor *gfe, GtkWidget **failed_widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01611">remmina_file_editor.c:1611</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ac4aed08e645f690ef347adec9cdbb9b9"><div class="ttname"><a href="remmina__file__editor_8c.html#ac4aed08e645f690ef347adec9cdbb9b9">remmina_file_editor_update_settings</a></div><div class="ttdeci">static GError * remmina_file_editor_update_settings(RemminaFileEditor *gfe, GtkWidget **failed_widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01621">remmina_file_editor.c:1621</a></div></div>
<div class="ttc" id="remmina__icon_8h_html"><div class="ttname"><a href="remmina__icon_8h.html">remmina_icon.h</a></div></div>
<div class="ttc" id="remmina__public_8h_html"><div class="ttname"><a href="remmina__public_8h.html">remmina_public.h</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_ae1cc5b9d910f68aa5909e3cf483c1d1d"><div class="ttname"><a href="struct___remmina_protocol_setting.html#ae1cc5b9d910f68aa5909e3cf483c1d1d">_RemminaProtocolSetting::opt1</a></div><div class="ttdeci">gpointer opt1</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00122">types.h:122</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_add382dd8f40444b928e78b293a86a257"><div class="ttname"><a href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a></div><div class="ttdeci">void remmina_file_editor_check_profile(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01960">remmina_file_editor.c:1960</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_add382dd8f40444b928e78b293a86a257"><div class="ttname"><a href="remmina__file__editor_8c.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a></div><div class="ttdeci">void remmina_file_editor_check_profile(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01970">remmina_file_editor.c:1970</a></div></div>
<div class="ttc" id="remmina__public_8c_html_a3796b536244067e9a85923b1cefa6cde"><div class="ttname"><a href="remmina__public_8c.html#a3796b536244067e9a85923b1cefa6cde">remmina_public_create_combo_text_d</a></div><div class="ttdeci">GtkWidget * remmina_public_create_combo_text_d(const gchar *text, const gchar *def, const gchar *empty_choice)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00117">remmina_public.c:117</a></div></div>
<div class="ttc" id="remmina__file__editor_8h_html_abbeeb0b88810f1f479ffb1fadfbf6530"><div class="ttname"><a href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a></div><div class="ttdeci">struct _RemminaFileEditorPriv RemminaFileEditorPriv</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00054">remmina_file_editor.h:54</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aecbc005c39cdf4fab4779090f11a3556"><div class="ttname"><a href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_notebook_tab(RemminaFileEditor *gfe, const gchar *stock_id, const gchar *label, gint rows, gint cols)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00329">remmina_file_editor.c:329</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aecbc005c39cdf4fab4779090f11a3556"><div class="ttname"><a href="remmina__file__editor_8c.html#aecbc005c39cdf4fab4779090f11a3556">remmina_file_editor_create_notebook_tab</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_notebook_tab(RemminaFileEditor *gfe, const gchar *stock_id, const gchar *label, gint rows, gint cols)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00330">remmina_file_editor.c:330</a></div></div>
<div class="ttc" id="remmina__public_8c_html_ab4a593956dfe89aba3242a5c264a681f"><div class="ttname"><a href="remmina__public_8c.html#ab4a593956dfe89aba3242a5c264a681f">remmina_public_create_combo</a></div><div class="ttdeci">GtkWidget * remmina_public_create_combo(gboolean use_icon)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00181">remmina_public.c:181</a></div></div>
<div class="ttc" id="types_8h_html_a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef"><div class="ttname"><a href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00152">types.h:152</a></div></div>
<div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00130">types.h:130</a></div></div>
@@ -170,24 +170,24 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html',
<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00108">types.h:108</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00911">remmina_file.c:911</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a287b79ac0e199393f391655ab5cbb55b"><div class="ttname"><a href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a></div><div class="ttdeci">static void remmina_file_editor_entry_on_changed(GtkEditable *editable, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01970">remmina_file_editor.c:1970</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a8cec1e80676c945f10bf39aca671d0a0"><div class="ttname"><a href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_text2(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00695">remmina_file_editor.c:695</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a287b79ac0e199393f391655ab5cbb55b"><div class="ttname"><a href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a></div><div class="ttdeci">static void remmina_file_editor_entry_on_changed(GtkEditable *editable, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01980">remmina_file_editor.c:1980</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a8cec1e80676c945f10bf39aca671d0a0"><div class="ttname"><a href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_text2(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00696">remmina_file_editor.c:696</a></div></div>
<div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00069">remmina_file.h:69</a></div></div>
<div class="ttc" id="struct___remmina_protocol_plugin_html_aae09a7e2c978cc36e85d0f295518978d"><div class="ttname"><a href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">_RemminaProtocolPlugin::basic_settings</a></div><div class="ttdeci">const RemminaProtocolSetting * basic_settings</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00074">plugin.h:74</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a2a31c93bd54489f8bb3c8fe0dff033d6"><div class="ttname"><a href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_check(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint top, const gchar *label, gboolean value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00816">remmina_file_editor.c:816</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a6415f73260076747c4f933af7f9f4b38"><div class="ttname"><a href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38">remmina_file_editor_create_all_settings</a></div><div class="ttdeci">static void remmina_file_editor_create_all_settings(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01377">remmina_file_editor.c:1377</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a3df3718727200d865f9f977435db30ea"><div class="ttname"><a href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea">remmina_file_editor_create_notebook_container</a></div><div class="ttdeci">static void remmina_file_editor_create_notebook_container(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00307">remmina_file_editor.c:307</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a2a31c93bd54489f8bb3c8fe0dff033d6"><div class="ttname"><a href="remmina__file__editor_8c.html#a2a31c93bd54489f8bb3c8fe0dff033d6">remmina_file_editor_create_check</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_check(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint top, const gchar *label, gboolean value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00817">remmina_file_editor.c:817</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a6415f73260076747c4f933af7f9f4b38"><div class="ttname"><a href="remmina__file__editor_8c.html#a6415f73260076747c4f933af7f9f4b38">remmina_file_editor_create_all_settings</a></div><div class="ttdeci">static void remmina_file_editor_create_all_settings(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01385">remmina_file_editor.c:1385</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a3df3718727200d865f9f977435db30ea"><div class="ttname"><a href="remmina__file__editor_8c.html#a3df3718727200d865f9f977435db30ea">remmina_file_editor_create_notebook_container</a></div><div class="ttdeci">static void remmina_file_editor_create_notebook_container(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00308">remmina_file_editor.c:308</a></div></div>
<div class="ttc" id="remmina__file__editor_8h_html"><div class="ttname"><a href="remmina__file__editor_8h.html">remmina_file_editor.h</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a08327d6951c345808628dbb5784aba06"><div class="ttname"><a href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_file(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02001">remmina_file_editor.c:2001</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a08327d6951c345808628dbb5784aba06"><div class="ttname"><a href="remmina__file__editor_8c.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_file(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02011">remmina_file_editor.c:2011</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_a6086b43049072a3a3245c4a45f43dbc5"><div class="ttname"><a href="struct___remmina_protocol_setting.html#a6086b43049072a3a3245c4a45f43dbc5">_RemminaProtocolSetting::validator_data</a></div><div class="ttdeci">gpointer validator_data</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00124">types.h:124</a></div></div>
<div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7aef0536e2d0186b8cb8d8ba7a4a1a51c3"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7aef0536e2d0186b8cb8d8ba7a4a1a51c3">REMMINA_PROTOCOL_SSH_SETTING_SFTP</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00133">types.h:133</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa1e0d966a2100175a8eab3a1497306c0"><div class="ttname"><a href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0">remmina_file_editor_int_setting_filter</a></div><div class="ttdeci">void remmina_file_editor_int_setting_filter(GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00882">remmina_file_editor.c:882</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa1e0d966a2100175a8eab3a1497306c0"><div class="ttname"><a href="remmina__file__editor_8c.html#aa1e0d966a2100175a8eab3a1497306c0">remmina_file_editor_int_setting_filter</a></div><div class="ttdeci">void remmina_file_editor_int_setting_filter(GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00883">remmina_file_editor.c:883</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a25c4af05ecfc7053db40ed0997389b91"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a25c4af05ecfc7053db40ed0997389b91">REMMINA_PROTOCOL_SETTING_TYPE_DOUBLE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00114">types.h:114</a></div></div>
<div class="ttc" id="remmina__string__list_8c_html_ab1bacc097f59c20b477d954bb863a5e0"><div class="ttname"><a href="remmina__string__list_8c.html#ab1bacc097f59c20b477d954bb863a5e0">remmina_string_list_set_text</a></div><div class="ttdeci">void remmina_string_list_set_text(const gchar *text, const gboolean clear_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__list_8c_source.html#l00171">remmina_string_list.c:171</a></div></div>
<div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7a8f910597287a73453a5f09ca0037d093"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a8f910597287a73453a5f09ca0037d093">REMMINA_PROTOCOL_SSH_SETTING_NONE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00129">types.h:129</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02169">remmina_file_editor.c:2169</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02179">remmina_file_editor.c:2179</a></div></div>
<div class="ttc" id="types_8h_html_a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd"><div class="ttname"><a href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00150">types.h:150</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ab6e562792eb63ec43ed7f9a4b6687c23"><div class="ttname"><a href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23">remmina_file_editor_create_ssh_tunnel_tab</a></div><div class="ttdeci">static void remmina_file_editor_create_ssh_tunnel_tab(RemminaFileEditor *gfe, RemminaProtocolSSHSetting ssh_setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01209">remmina_file_editor.c:1209</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ab6e562792eb63ec43ed7f9a4b6687c23"><div class="ttname"><a href="remmina__file__editor_8c.html#ab6e562792eb63ec43ed7f9a4b6687c23">remmina_file_editor_create_ssh_tunnel_tab</a></div><div class="ttdeci">static void remmina_file_editor_create_ssh_tunnel_tab(RemminaFileEditor *gfe, RemminaProtocolSSHSetting ssh_setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01217">remmina_file_editor.c:1217</a></div></div>
<div class="ttc" id="struct___remmina_file_editor_class_html"><div class="ttname"><a href="struct___remmina_file_editor_class.html">_RemminaFileEditorClass</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00062">remmina_file_editor.h:62</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_a6274d44b592a54162ff583135e55ffc9"><div class="ttname"><a href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">_RemminaProtocolSetting::type</a></div><div class="ttdeci">RemminaProtocolSettingType type</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00118">types.h:118</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html"><div class="ttname"><a href="struct___remmina_protocol_setting.html">_RemminaProtocolSetting</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00117">types.h:117</a></div></div>
@@ -196,58 +196,58 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html',
<div class="ttc" id="remmina__file_8c_html_a5e421ba636d34e21bba5ece463e98892"><div class="ttname"><a href="remmina__file_8c.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a></div><div class="ttdeci">RemminaFile * remmina_file_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00093">remmina_file.c:93</a></div></div>
<div class="ttc" id="remmina__string__list_8c_html_aa9ca6ccf40b954051a0daa5c1efeef87"><div class="ttname"><a href="remmina__string__list_8c.html#aa9ca6ccf40b954051a0daa5c1efeef87">remmina_string_list_set_titles</a></div><div class="ttdeci">void remmina_string_list_set_titles(gchar *title1, gchar *title2)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__list_8c_source.html#l00254">remmina_string_list.c:254</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_a94df87db138d4e44e81b3e6c99148ed3"><div class="ttname"><a href="struct___remmina_protocol_setting.html#a94df87db138d4e44e81b3e6c99148ed3">_RemminaProtocolSetting::validator</a></div><div class="ttdeci">GCallback validator</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00125">types.h:125</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a727f967cf81d4af3f953046b0c4cf08d"><div class="ttname"><a href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a></div><div class="ttdeci">static void remmina_file_editor_create_settings(RemminaFileEditor *gfe, GtkWidget *grid, const RemminaProtocolSetting *settings)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00994">remmina_file_editor.c:994</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a57224f3f69f04f398de563b71be6b18e"><div class="ttname"><a href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e">remmina_file_editor_on_save_connect</a></div><div class="ttdeci">static void remmina_file_editor_on_save_connect(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01862">remmina_file_editor.c:1862</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a727f967cf81d4af3f953046b0c4cf08d"><div class="ttname"><a href="remmina__file__editor_8c.html#a727f967cf81d4af3f953046b0c4cf08d">remmina_file_editor_create_settings</a></div><div class="ttdeci">static void remmina_file_editor_create_settings(RemminaFileEditor *gfe, GtkWidget *grid, const RemminaProtocolSetting *settings)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00995">remmina_file_editor.c:995</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a57224f3f69f04f398de563b71be6b18e"><div class="ttname"><a href="remmina__file__editor_8c.html#a57224f3f69f04f398de563b71be6b18e">remmina_file_editor_on_save_connect</a></div><div class="ttdeci">static void remmina_file_editor_on_save_connect(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01872">remmina_file_editor.c:1872</a></div></div>
<div class="ttc" id="rcw_8h_html"><div class="ttname"><a href="rcw_8h.html">rcw.h</a></div></div>
<div class="ttc" id="rcw_8c_html_a1b7a771392e15e527005305e71cc2546"><div class="ttname"><a href="rcw_8c.html#a1b7a771392e15e527005305e71cc2546">rcw_open_from_file</a></div><div class="ttdeci">void rcw_open_from_file(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l04470">rcw.c:4470</a></div></div>
<div class="ttc" id="rcw_8c_html_a29701ae152ba15f6d8921f395174d2df"><div class="ttname"><a href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a></div><div class="ttdeci">RemminaPref remmina_pref</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00079">rcw.c:79</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a3866832d550ceac91d608900df4c8056"><div class="ttname"><a href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a></div><div class="ttdeci">void remmina_file_editor_file_save(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01987">remmina_file_editor.c:1987</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a3866832d550ceac91d608900df4c8056"><div class="ttname"><a href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a></div><div class="ttdeci">void remmina_file_editor_file_save(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01997">remmina_file_editor.c:1997</a></div></div>
<div class="ttc" id="struct___remmina_file_editor_html"><div class="ttname"><a href="struct___remmina_file_editor.html">_RemminaFileEditor</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00056">remmina_file_editor.h:56</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02130">remmina_file_editor.c:2130</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a880e8e6aee571b91eeb7f5d2f60e210b"><div class="ttname"><a href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b">remmina_file_editor_on_realize</a></div><div class="ttdeci">static void remmina_file_editor_on_realize(GtkWidget *widget, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00276">remmina_file_editor.c:276</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a112a0fd5bf7d5693b9cb717c850637cb"><div class="ttname"><a href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_button_on_toggled(GtkToggleButton *togglebutton, GtkWidget *widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00301">remmina_file_editor.c:301</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aaa55ab55c6806aef6765eb01577365f3"><div class="ttname"><a href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3">remmina_file_editor_on_cancel</a></div><div class="ttdeci">static void remmina_file_editor_on_cancel(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01889">remmina_file_editor.c:1889</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02140">remmina_file_editor.c:2140</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a880e8e6aee571b91eeb7f5d2f60e210b"><div class="ttname"><a href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b">remmina_file_editor_on_realize</a></div><div class="ttdeci">static void remmina_file_editor_on_realize(GtkWidget *widget, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00277">remmina_file_editor.c:277</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a112a0fd5bf7d5693b9cb717c850637cb"><div class="ttname"><a href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_button_on_toggled(GtkToggleButton *togglebutton, GtkWidget *widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00302">remmina_file_editor.c:302</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aaa55ab55c6806aef6765eb01577365f3"><div class="ttname"><a href="remmina__file__editor_8c.html#aaa55ab55c6806aef6765eb01577365f3">remmina_file_editor_on_cancel</a></div><div class="ttdeci">static void remmina_file_editor_on_cancel(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01899">remmina_file_editor.c:1899</a></div></div>
<div class="ttc" id="remmina__plugin__manager_8c_html_a3872c8656a8a3d5147bcc603471c1932"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a></div><div class="ttdeci">RemminaPlugin * remmina_plugin_manager_get_plugin(RemminaPluginType type, const gchar *name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00441">remmina_plugin_manager.c:441</a></div></div>
<div class="ttc" id="remmina__pref_8h_html"><div class="ttname"><a href="remmina__pref_8h.html">remmina_pref.h</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ad9418344a7f597351e3cc5639be78425">REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00104">types.h:104</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_ac2a5cf9cdcf640986e245eb04be9c4ad"><div class="ttname"><a href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad">remmina_file_editor_on_save</a></div><div class="ttdeci">static void remmina_file_editor_on_save(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01820">remmina_file_editor.c:1820</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_afcc5ee6fcd22686b716fbe595cb210a6"><div class="ttname"><a href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6">remmina_file_editor_on_default</a></div><div class="ttdeci">static void remmina_file_editor_on_default(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01782">remmina_file_editor.c:1782</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a3da83a35788891fa1fede4b063e1d0e6"><div class="ttname"><a href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_assistance_enabled_check_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00375">remmina_file_editor.c:375</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_ac2a5cf9cdcf640986e245eb04be9c4ad"><div class="ttname"><a href="remmina__file__editor_8c.html#ac2a5cf9cdcf640986e245eb04be9c4ad">remmina_file_editor_on_save</a></div><div class="ttdeci">static void remmina_file_editor_on_save(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01830">remmina_file_editor.c:1830</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_afcc5ee6fcd22686b716fbe595cb210a6"><div class="ttname"><a href="remmina__file__editor_8c.html#afcc5ee6fcd22686b716fbe595cb210a6">remmina_file_editor_on_default</a></div><div class="ttdeci">static void remmina_file_editor_on_default(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01792">remmina_file_editor.c:1792</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a3da83a35788891fa1fede4b063e1d0e6"><div class="ttname"><a href="remmina__file__editor_8c.html#a3da83a35788891fa1fede4b063e1d0e6">remmina_file_editor_assistance_enabled_check_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_assistance_enabled_check_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00376">remmina_file_editor.c:376</a></div></div>
<div class="ttc" id="struct___remmina_protocol_plugin_html_a6e04143450eeb71e3d0b2c14983860a4"><div class="ttname"><a href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">_RemminaProtocolPlugin::name</a></div><div class="ttdeci">const gchar * name</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00067">plugin.h:67</a></div></div>
<div class="ttc" id="remmina__main_8c_html_aac3fe305e456dfa7bb55aa2f057e8cb0"><div class="ttname"><a href="remmina__main_8c.html#aac3fe305e456dfa7bb55aa2f057e8cb0">remmina_main_toggle_password_view</a></div><div class="ttdeci">void remmina_main_toggle_password_view(GtkWidget *widget, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01161">remmina_main.c:1161</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aed69ba3823f68580d5acea459c5c890f"><div class="ttname"><a href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f">remmina_file_editor_double_setting_filter</a></div><div class="ttdeci">void remmina_file_editor_double_setting_filter(GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00896">remmina_file_editor.c:896</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aed69ba3823f68580d5acea459c5c890f"><div class="ttname"><a href="remmina__file__editor_8c.html#aed69ba3823f68580d5acea459c5c890f">remmina_file_editor_double_setting_filter</a></div><div class="ttdeci">void remmina_file_editor_double_setting_filter(GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00897">remmina_file_editor.c:897</a></div></div>
<div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00068">remmina_file.h:68</a></div></div>
<div class="ttc" id="remmina__file__manager_8c_html_a536edeef371d907ab3936f4d65c3003d"><div class="ttname"><a href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a></div><div class="ttdeci">gchar * remmina_file_manager_get_groups(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00210">remmina_file_manager.c:210</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a31ee66fffaa245ae411aba0c296ad9da"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a31ee66fffaa245ae411aba0c296ad9da">REMMINA_PROTOCOL_SETTING_TYPE_FILE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00111">types.h:111</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a072de27e64368581e8507d3b795bfbf4"><div class="ttname"><a href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_text(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00729">remmina_file_editor.c:729</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a072de27e64368581e8507d3b795bfbf4"><div class="ttname"><a href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_text(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00730">remmina_file_editor.c:730</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a4c16a6793828893598bc0a158bb13cbb"><div class="ttname"><a href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb">remmina_file_editor_save_behavior_tab</a></div><div class="ttdeci">static void remmina_file_editor_save_behavior_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01458">remmina_file_editor.c:1458</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a9bcaeec3ba26d31c6333f35fe1381a8c"><div class="ttname"><a href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c">remmina_file_editor_create_behavior_tab</a></div><div class="ttdeci">static void remmina_file_editor_create_behavior_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01154">remmina_file_editor.c:1154</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a4c16a6793828893598bc0a158bb13cbb"><div class="ttname"><a href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb">remmina_file_editor_save_behavior_tab</a></div><div class="ttdeci">static void remmina_file_editor_save_behavior_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01466">remmina_file_editor.c:1466</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a9bcaeec3ba26d31c6333f35fe1381a8c"><div class="ttname"><a href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c">remmina_file_editor_create_behavior_tab</a></div><div class="ttdeci">static void remmina_file_editor_create_behavior_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01155">remmina_file_editor.c:1155</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00730">remmina_file.c:730</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a51b9fe336d9068ffc488ef55adc9eac4"><div class="ttname"><a href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4">remmina_file_editor_browse_resolution</a></div><div class="ttdeci">static void remmina_file_editor_browse_resolution(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00551">remmina_file_editor.c:551</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a8c1924fd32be943136d147e8dedb3eca"><div class="ttname"><a href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a></div><div class="ttdeci">static gboolean remmina_file_editor_validate_settings(RemminaFileEditor *gfe, gchar *setting_name_to_validate, gconstpointer value, GError **err)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01533">remmina_file_editor.c:1533</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a5ea3f796c3a46aeb01b2f13f4a3d40a9"><div class="ttname"><a href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00365">remmina_file_editor.c:365</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a51b9fe336d9068ffc488ef55adc9eac4"><div class="ttname"><a href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4">remmina_file_editor_browse_resolution</a></div><div class="ttdeci">static void remmina_file_editor_browse_resolution(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00552">remmina_file_editor.c:552</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a8c1924fd32be943136d147e8dedb3eca"><div class="ttname"><a href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a></div><div class="ttdeci">static gboolean remmina_file_editor_validate_settings(RemminaFileEditor *gfe, gchar *setting_name_to_validate, gconstpointer value, GError **err)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01543">remmina_file_editor.c:1543</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a5ea3f796c3a46aeb01b2f13f4a3d40a9"><div class="ttname"><a href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00366">remmina_file_editor.c:366</a></div></div>
<div class="ttc" id="remmina__file_8c_html_ac1685edf35a793a396ce039d7eec5343"><div class="ttname"><a href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a></div><div class="ttdeci">RemminaFile * remmina_file_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00217">remmina_file.c:217</a></div></div>
<div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00132">types.h:132</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a71dd793e231434cba784ae36be456586"><div class="ttname"><a href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586">remmina_file_editor_create_assistance</a></div><div class="ttdeci">static void remmina_file_editor_create_assistance(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, GtkWidget *grid, gint row)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00647">remmina_file_editor.c:647</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a71dd793e231434cba784ae36be456586"><div class="ttname"><a href="remmina__file__editor_8c.html#a71dd793e231434cba784ae36be456586">remmina_file_editor_create_assistance</a></div><div class="ttdeci">static void remmina_file_editor_create_assistance(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, GtkWidget *grid, gint row)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00648">remmina_file_editor.c:648</a></div></div>
<div class="ttc" id="remmina__file__manager_8c_html_af7b58659604660eb0cb40b0e0f8348ab"><div class="ttname"><a href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a></div><div class="ttdeci">RemminaFile * remmina_file_manager_load_file(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00356">remmina_file_manager.c:356</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_afc37e2e9dbe8f0c8bcf1a76d0c54ea1b"><div class="ttname"><a href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b">remmina_file_editor_iterate_protocol</a></div><div class="ttdeci">static gboolean remmina_file_editor_iterate_protocol(gchar *protocol, RemminaPlugin *plugin, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01938">remmina_file_editor.c:1938</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_adddb10632532560ce0a1f0c9ca1bcde5"><div class="ttname"><a href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a></div><div class="ttdeci">static GError * remmina_file_editor_update(RemminaFileEditor *gfe, GtkWidget **failed_widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01716">remmina_file_editor.c:1716</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_afc37e2e9dbe8f0c8bcf1a76d0c54ea1b"><div class="ttname"><a href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b">remmina_file_editor_iterate_protocol</a></div><div class="ttdeci">static gboolean remmina_file_editor_iterate_protocol(gchar *protocol, RemminaPlugin *plugin, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01948">remmina_file_editor.c:1948</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_adddb10632532560ce0a1f0c9ca1bcde5"><div class="ttname"><a href="remmina__file__editor_8c.html#adddb10632532560ce0a1f0c9ca1bcde5">remmina_file_editor_update</a></div><div class="ttdeci">static GError * remmina_file_editor_update(RemminaFileEditor *gfe, GtkWidget **failed_widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01726">remmina_file_editor.c:1726</a></div></div>
<div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00098">types.h:98</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa5c50852f8569f075eec5d5db30c2ebf"><div class="ttname"><a href="remmina__file__editor_8c.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02150">remmina_file_editor.c:2150</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa5c50852f8569f075eec5d5db30c2ebf"><div class="ttname"><a href="remmina__file__editor_8c.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02160">remmina_file_editor.c:2160</a></div></div>
<div class="ttc" id="struct___remmina_file_editor_html_a8517b06116569fad2bb71b99c2f75f6a"><div class="ttname"><a href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">_RemminaFileEditor::priv</a></div><div class="ttdeci">RemminaFileEditorPriv * priv</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00059">remmina_file_editor.h:59</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aef2803d3fc2558c9c3844ffac088e7d7"><div class="ttname"><a href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7">remmina_file_editor_create_textarea</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_textarea(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00738">remmina_file_editor.c:738</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa3acf0470349d706d15fa751e982fd05"><div class="ttname"><a href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05">remmina_file_editor_browse_avahi</a></div><div class="ttdeci">static void remmina_file_editor_browse_avahi(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00242">remmina_file_editor.c:242</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aef2803d3fc2558c9c3844ffac088e7d7"><div class="ttname"><a href="remmina__file__editor_8c.html#aef2803d3fc2558c9c3844ffac088e7d7">remmina_file_editor_create_textarea</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_textarea(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00739">remmina_file_editor.c:739</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa3acf0470349d706d15fa751e982fd05"><div class="ttname"><a href="remmina__file__editor_8c.html#aa3acf0470349d706d15fa751e982fd05">remmina_file_editor_browse_avahi</a></div><div class="ttdeci">static void remmina_file_editor_browse_avahi(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00243">remmina_file_editor.c:243</a></div></div>
<div class="ttc" id="types_8h_html_a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724"><div class="ttname"><a href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00149">types.h:149</a></div></div>
<div class="ttc" id="remmina__unlock_8c_html_a81e79e5c1c230b7e2bf27b2457801d4e"><div class="ttname"><a href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a></div><div class="ttdeci">gint remmina_unlock_new(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__unlock_8c_source.html#l00113">remmina_unlock.c:113</a></div></div>
<div class="ttc" id="remmina__unlock_8h_html"><div class="ttname"><a href="remmina__unlock_8h.html">remmina_unlock.h</a></div></div>
<div class="ttc" id="remmina__public_8c_html_aa5eacff7c9dab7457dd65525d01047f8"><div class="ttname"><a href="remmina__public_8c.html#aa5eacff7c9dab7457dd65525d01047f8">remmina_public_load_combo_text_d</a></div><div class="ttdeci">void remmina_public_load_combo_text_d(GtkWidget *combo, const gchar *text, const gchar *def, const gchar *empty_choice)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00136">remmina_public.c:136</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a51a45d872a9e7a0b06d25aef592a6e3a"><div class="ttname"><a href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a">remmina_file_editor_update_resolution</a></div><div class="ttdeci">static void remmina_file_editor_update_resolution(GtkWidget *widget, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00539">remmina_file_editor.c:539</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a51a45d872a9e7a0b06d25aef592a6e3a"><div class="ttname"><a href="remmina__file__editor_8c.html#a51a45d872a9e7a0b06d25aef592a6e3a">remmina_file_editor_update_resolution</a></div><div class="ttdeci">static void remmina_file_editor_update_resolution(GtkWidget *widget, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00540">remmina_file_editor.c:540</a></div></div>
<div class="ttc" id="vnc__plugin_8c_html_ab96ef9227ecef94018f2729f72e7651e"><div class="ttname"><a href="vnc__plugin_8c.html#ab96ef9227ecef94018f2729f72e7651e">N_</a></div><div class="ttdeci">N_(&quot;Unable to connect to VNC server&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="vnc__plugin_8c_source.html#l00953">vnc_plugin.c:953</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a7f1406c817183d78a801668a10d73e0b"><div class="ttname"><a href="remmina__file__editor_8c.html#a7f1406c817183d78a801668a10d73e0b">remmina_file_editor_class_init</a></div><div class="ttdeci">static void remmina_file_editor_class_init(RemminaFileEditorClass *klass)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00144">remmina_file_editor.c:144</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a7f1406c817183d78a801668a10d73e0b"><div class="ttname"><a href="remmina__file__editor_8c.html#a7f1406c817183d78a801668a10d73e0b">remmina_file_editor_class_init</a></div><div class="ttdeci">static void remmina_file_editor_class_init(RemminaFileEditorClass *klass)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00145">remmina_file_editor.c:145</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_a7a5b063deb126422c461203c074a3dc4"><div class="ttname"><a href="struct___remmina_protocol_setting.html#a7a5b063deb126422c461203c074a3dc4">_RemminaProtocolSetting::label</a></div><div class="ttdeci">const gchar * label</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00120">types.h:120</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_a99984deb4b5a3b873b26c0c9cf8268b7"><div class="ttname"><a href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7">remmina_file_editor_save_ssh_tunnel_tab</a></div><div class="ttdeci">static void remmina_file_editor_save_ssh_tunnel_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01472">remmina_file_editor.c:1472</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_a99984deb4b5a3b873b26c0c9cf8268b7"><div class="ttname"><a href="remmina__file__editor_8c.html#a99984deb4b5a3b873b26c0c9cf8268b7">remmina_file_editor_save_ssh_tunnel_tab</a></div><div class="ttdeci">static void remmina_file_editor_save_ssh_tunnel_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01482">remmina_file_editor.c:1482</a></div></div>
<div class="ttc" id="remmina__file_8h_html"><div class="ttname"><a href="remmina__file_8h.html">remmina_file.h</a></div></div>
<div class="ttc" id="remmina__string__list_8c_html_a74058eac0af28c05a55d041103457aec"><div class="ttname"><a href="remmina__string__list_8c.html#a74058eac0af28c05a55d041103457aec">remmina_string_list_get_text</a></div><div class="ttdeci">gchar * remmina_string_list_get_text(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__list_8c_source.html#l00205">remmina_string_list.c:205</a></div></div>
<div class="ttc" id="struct___remmina_protocol_setting_html_ac4cd339607204c5f478727e2a0c04857"><div class="ttname"><a href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">_RemminaProtocolSetting::name</a></div><div class="ttdeci">const gchar * name</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00119">types.h:119</a></div></div>
diff --git a/public/remmina__file__editor_8h.html b/public/remmina__file__editor_8h.html
index 57712f700..db97e0a81 100644
--- a/public/remmina__file__editor_8h.html
+++ b/public/remmina__file__editor_8h.html
@@ -190,7 +190,7 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01960">1960</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01970">1970</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -210,7 +210,7 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01987">1987</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l01997">1997</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -248,7 +248,7 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02130">2130</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02140">2140</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -268,7 +268,7 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02150">2150</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02160">2160</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -288,7 +288,7 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02001">2001</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02011">2011</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -308,7 +308,7 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02169">2169</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02179">2179</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
@@ -338,7 +338,7 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02136">2136</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
+<p class="definition">Definition at line <a class="el" href="remmina__file__editor_8c_source.html#l02146">2146</a> of file <a class="el" href="remmina__file__editor_8c_source.html">remmina_file_editor.c</a>.</p>
</div>
</div>
diff --git a/public/remmina__file__editor_8h_source.html b/public/remmina__file__editor_8h_source.html
index bb4af98a2..8c402cf98 100644
--- a/public/remmina__file__editor_8h_source.html
+++ b/public/remmina__file__editor_8h_source.html
@@ -89,19 +89,19 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8h_source.html',
<a href="remmina__file__editor_8h.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) 2009-2011 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-2023 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">#pragma once</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;stdarg.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;glib/gi18n.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &lt;gtk/gtk.h&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file_8h.html">remmina_file.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;G_BEGIN_DECLS</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#define REMMINA_TYPE_FILE_EDITOR (remmina_file_editor_get_type())</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#define REMMINA_FILE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), REMMINA_TYPE_FILE_EDITOR, RemminaFileEditor))</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#define REMMINA_FILE_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), REMMINA_TYPE_FILE_EDITOR, RemminaFileEditorClass))</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#define REMMINA_IS_FILE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), REMMINA_TYPE_FILE_EDITOR))</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#define REMMINA_IS_FILE_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), REMMINA_TYPE_FILE_EDITOR))</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#define REMMINA_FILE_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), REMMINA_TYPE_FILE_EDITOR, RemminaFileEditorClass))</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530"> 54</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>_RemminaFileEditorPriv <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="struct___remmina_file_editor.html"> 56</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct___remmina_file_editor.html">_RemminaFileEditor</a> {</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="struct___remmina_file_editor.html#ad33dd514275a054042ab1ac258092872"> 57</a></span>&#160; GtkDialog <a class="code" href="struct___remmina_file_editor.html#ad33dd514275a054042ab1ac258092872">dialog</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a"> 59</a></span>&#160; <a class="code" href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a> * <a class="code" href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">priv</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;} <a class="code" href="remmina__file__editor_8h.html#a16a58b48a99ec5a073a5fc6f5b0d9498">RemminaFileEditor</a>;</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"><a class="line" href="struct___remmina_file_editor_class.html"> 62</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct___remmina_file_editor_class.html">_RemminaFileEditorClass</a> {</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="struct___remmina_file_editor_class.html#a3c652db10d3aab6c698273c846fc743f"> 63</a></span>&#160; GtkDialogClass <a class="code" href="struct___remmina_file_editor_class.html#a3c652db10d3aab6c698273c846fc743f">parent_class</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;} <a class="code" href="remmina__file__editor_8h.html#ad2662b100a2d321db52fc1280c899208">RemminaFileEditorClass</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;GType <a class="code" href="remmina__file__editor_8h.html#ac5b20a46b2d95b1e5e4e09006e0ee04f">remmina_file_editor_get_type</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;G_GNUC_CONST;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">/* Base constructor */</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8h.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">/* Create new file */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8h.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8h.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a>(<span class="keyword">const</span> gchar *server, <span class="keyword">const</span> gchar *protocol);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8h.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a>(<span class="keyword">const</span> gchar *filename);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">/* Open existing file */</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;GtkWidget *<a class="code" href="remmina__file__editor_8h.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a>(<span class="keyword">const</span> gchar *filename);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8h.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__file__editor_8h.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a>(<a class="code" href="struct___remmina_file_editor.html">RemminaFileEditor</a> *gfe);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;G_END_DECLS</div><div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div>
<div class="ttc" id="remmina__file__editor_8h_html_a16a58b48a99ec5a073a5fc6f5b0d9498"><div class="ttname"><a href="remmina__file__editor_8h.html#a16a58b48a99ec5a073a5fc6f5b0d9498">RemminaFileEditor</a></div><div class="ttdeci">struct _RemminaFileEditor RemminaFileEditor</div></div>
<div class="ttc" id="struct___remmina_file_editor_html_ad33dd514275a054042ab1ac258092872"><div class="ttname"><a href="struct___remmina_file_editor.html#ad33dd514275a054042ab1ac258092872">_RemminaFileEditor::dialog</a></div><div class="ttdeci">GtkDialog dialog</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00057">remmina_file_editor.h:57</a></div></div>
-<div class="ttc" id="remmina__file__editor_8h_html_add382dd8f40444b928e78b293a86a257"><div class="ttname"><a href="remmina__file__editor_8h.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a></div><div class="ttdeci">void remmina_file_editor_check_profile(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01960">remmina_file_editor.c:1960</a></div></div>
+<div class="ttc" id="remmina__file__editor_8h_html_add382dd8f40444b928e78b293a86a257"><div class="ttname"><a href="remmina__file__editor_8h.html#add382dd8f40444b928e78b293a86a257">remmina_file_editor_check_profile</a></div><div class="ttdeci">void remmina_file_editor_check_profile(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01970">remmina_file_editor.c:1970</a></div></div>
<div class="ttc" id="struct___remmina_file_editor_class_html_a3c652db10d3aab6c698273c846fc743f"><div class="ttname"><a href="struct___remmina_file_editor_class.html#a3c652db10d3aab6c698273c846fc743f">_RemminaFileEditorClass::parent_class</a></div><div class="ttdeci">GtkDialogClass parent_class</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00063">remmina_file_editor.h:63</a></div></div>
<div class="ttc" id="remmina__file__editor_8h_html_abbeeb0b88810f1f479ffb1fadfbf6530"><div class="ttname"><a href="remmina__file__editor_8h.html#abbeeb0b88810f1f479ffb1fadfbf6530">RemminaFileEditorPriv</a></div><div class="ttdeci">struct _RemminaFileEditorPriv RemminaFileEditorPriv</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00054">remmina_file_editor.h:54</a></div></div>
-<div class="ttc" id="remmina__file__editor_8h_html_a3866832d550ceac91d608900df4c8056"><div class="ttname"><a href="remmina__file__editor_8h.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a></div><div class="ttdeci">void remmina_file_editor_file_save(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01987">remmina_file_editor.c:1987</a></div></div>
-<div class="ttc" id="remmina__file__editor_8h_html_aa5c50852f8569f075eec5d5db30c2ebf"><div class="ttname"><a href="remmina__file__editor_8h.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02150">remmina_file_editor.c:2150</a></div></div>
+<div class="ttc" id="remmina__file__editor_8h_html_a3866832d550ceac91d608900df4c8056"><div class="ttname"><a href="remmina__file__editor_8h.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a></div><div class="ttdeci">void remmina_file_editor_file_save(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01997">remmina_file_editor.c:1997</a></div></div>
+<div class="ttc" id="remmina__file__editor_8h_html_aa5c50852f8569f075eec5d5db30c2ebf"><div class="ttname"><a href="remmina__file__editor_8h.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02160">remmina_file_editor.c:2160</a></div></div>
<div class="ttc" id="remmina__file__editor_8h_html_ad2662b100a2d321db52fc1280c899208"><div class="ttname"><a href="remmina__file__editor_8h.html#ad2662b100a2d321db52fc1280c899208">RemminaFileEditorClass</a></div><div class="ttdeci">struct _RemminaFileEditorClass RemminaFileEditorClass</div></div>
-<div class="ttc" id="remmina__file__editor_8h_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8h.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02130">remmina_file_editor.c:2130</a></div></div>
+<div class="ttc" id="remmina__file__editor_8h_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8h.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02140">remmina_file_editor.c:2140</a></div></div>
<div class="ttc" id="struct___remmina_file_editor_class_html"><div class="ttname"><a href="struct___remmina_file_editor_class.html">_RemminaFileEditorClass</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00062">remmina_file_editor.h:62</a></div></div>
<div class="ttc" id="struct___remmina_file_editor_html"><div class="ttname"><a href="struct___remmina_file_editor.html">_RemminaFileEditor</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00056">remmina_file_editor.h:56</a></div></div>
<div class="ttc" id="remmina__file__editor_8h_html_ac5b20a46b2d95b1e5e4e09006e0ee04f"><div class="ttname"><a href="remmina__file__editor_8h.html#ac5b20a46b2d95b1e5e4e09006e0ee04f">remmina_file_editor_get_type</a></div><div class="ttdeci">GType remmina_file_editor_get_type(void) G_GNUC_CONST</div></div>
-<div class="ttc" id="remmina__file__editor_8h_html_a08327d6951c345808628dbb5784aba06"><div class="ttname"><a href="remmina__file__editor_8h.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_file(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02001">remmina_file_editor.c:2001</a></div></div>
-<div class="ttc" id="remmina__file__editor_8h_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8h.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02169">remmina_file_editor.c:2169</a></div></div>
-<div class="ttc" id="remmina__file__editor_8h_html_ab563344276cbcdf0fcea05b0b64c7aeb"><div class="ttname"><a href="remmina__file__editor_8h.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_full(const gchar *server, const gchar *protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02136">remmina_file_editor.c:2136</a></div></div>
+<div class="ttc" id="remmina__file__editor_8h_html_a08327d6951c345808628dbb5784aba06"><div class="ttname"><a href="remmina__file__editor_8h.html#a08327d6951c345808628dbb5784aba06">remmina_file_editor_new_from_file</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_file(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02011">remmina_file_editor.c:2011</a></div></div>
+<div class="ttc" id="remmina__file__editor_8h_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8h.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02179">remmina_file_editor.c:2179</a></div></div>
+<div class="ttc" id="remmina__file__editor_8h_html_ab563344276cbcdf0fcea05b0b64c7aeb"><div class="ttname"><a href="remmina__file__editor_8h.html#ab563344276cbcdf0fcea05b0b64c7aeb">remmina_file_editor_new_full</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_full(const gchar *server, const gchar *protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02146">remmina_file_editor.c:2146</a></div></div>
<div class="ttc" id="struct___remmina_file_editor_html_a8517b06116569fad2bb71b99c2f75f6a"><div class="ttname"><a href="struct___remmina_file_editor.html#a8517b06116569fad2bb71b99c2f75f6a">_RemminaFileEditor::priv</a></div><div class="ttdeci">RemminaFileEditorPriv * priv</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00059">remmina_file_editor.h:59</a></div></div>
<div class="ttc" id="remmina__file_8h_html"><div class="ttname"><a href="remmina__file_8h.html">remmina_file.h</a></div></div>
</div><!-- fragment --></div><!-- contents -->
diff --git a/public/remmina__main_8c_source.html b/public/remmina__main_8c_source.html
index a2d183ed8..6e0a17172 100644
--- a/public/remmina__main_8c_source.html
+++ b/public/remmina__main_8c_source.html
@@ -234,7 +234,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');});
<div class="ttc" id="struct___remmina_pref_html_ab43c3da7d8551c9df726996c540726f1"><div class="ttname"><a href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">_RemminaPref::view_file_mode</a></div><div class="ttdeci">gint view_file_mode</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00214">remmina_pref.h:214</a></div></div>
<div class="ttc" id="remmina__string__array_8c_html_aff90e964c6541b1af02adf7ea39e6e02"><div class="ttname"><a href="remmina__string__array_8c.html#aff90e964c6541b1af02adf7ea39e6e02">remmina_string_array_new</a></div><div class="ttdeci">RemminaStringArray * remmina_string_array_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00044">remmina_string_array.c:44</a></div></div>
<div class="ttc" id="remmina__file_8c_html_a3d19095f74e9b7c92d74f11bd5a39a8c"><div class="ttname"><a href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a></div><div class="ttdeci">void remmina_file_touch(RemminaFile *remminafile)</div><div class="ttdoc">Update the atime and mtime of a given filename. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01105">remmina_file.c:1105</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02169">remmina_file_editor.c:2169</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02179">remmina_file_editor.c:2179</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb"><div class="ttname"><a href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb">DATE_COLUMN</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00079">remmina_main.c:79</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a51880fc109db6457a5d0fc543c2deaf2"><div class="ttname"><a href="remmina__main_8c.html#a51880fc109db6457a5d0fc543c2deaf2">remmina_main_save_expanded_group_func</a></div><div class="ttdeci">static void remmina_main_save_expanded_group_func(GtkTreeView *tree_view, GtkTreePath *path, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00150">remmina_main.c:150</a></div></div>
<div class="ttc" id="remmina__main_8c_html_aa4d9b76d32fa500f4b9f39a19e4eaaf2"><div class="ttname"><a href="remmina__main_8c.html#aa4d9b76d32fa500f4b9f39a19e4eaaf2">remmina_main_on_show</a></div><div class="ttdeci">void remmina_main_on_show(GtkWidget *w, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01643">remmina_main.c:1643</a></div></div>
@@ -261,7 +261,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');});
<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a91f22c2834ac7f38d201d8d678f8c57b"><div class="ttname"><a href="remmina__main_8c.html#a91f22c2834ac7f38d201d8d678f8c57b">remmina_main_on_action_application_dark_theme</a></div><div class="ttdeci">void remmina_main_on_action_application_dark_theme(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01281">remmina_main.c:1281</a></div></div>
<div class="ttc" id="remmina__about_8c_html_a3ad768979e0945a162018c6d596c90f4"><div class="ttname"><a href="remmina__about_8c.html#a3ad768979e0945a162018c6d596c90f4">remmina_about_open</a></div><div class="ttdeci">void remmina_about_open(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__about_8c_source.html#l00044">remmina_about.c:44</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02130">remmina_file_editor.c:2130</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02140">remmina_file_editor.c:2140</a></div></div>
<div class="ttc" id="remmina__pref_8h_html_aac34dfe6c6b73b43a4656c9dce041034a46530ebfd659963a54b7dae5702af1df"><div class="ttname"><a href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034a46530ebfd659963a54b7dae5702af1df">REMMINA_VIEW_FILE_TREE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00055">remmina_pref.h:55</a></div></div>
<div class="ttc" id="remmina__exec_8h_html_ae9dfd6986f18cb3d846a4933ac792fd5a94dfcc0fcf38aa8060ff843e40799284"><div class="ttname"><a href="remmina__exec_8h.html#ae9dfd6986f18cb3d846a4933ac792fd5a94dfcc0fcf38aa8060ff843e40799284">REMMINA_CONDEXIT_ONQUIT</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8h_source.html#l00060">remmina_exec.h:60</a></div></div>
<div class="ttc" id="remmina__plugin__manager_8c_html_a3872c8656a8a3d5147bcc603471c1932"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a></div><div class="ttdeci">RemminaPlugin * remmina_plugin_manager_get_plugin(RemminaPluginType type, const gchar *name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00441">remmina_plugin_manager.c:441</a></div></div>
@@ -292,7 +292,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');});
<div class="ttc" id="remmina__main_8c_html_a8ccd8303ada6e26880504fc58812fbda"><div class="ttname"><a href="remmina__main_8c.html#a8ccd8303ada6e26880504fc58812fbda">remmina_drop_types</a></div><div class="ttdeci">static GtkTargetEntry remmina_drop_types[]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00126">remmina_main.c:126</a></div></div>
<div class="ttc" id="struct___remmina_main_html_aecb54d7c3dd1e86a16e24ea2e00d4ddd"><div class="ttname"><a href="struct___remmina_main.html#aecb54d7c3dd1e86a16e24ea2e00d4ddd">_RemminaMain::search_bar</a></div><div class="ttdeci">GtkSearchBar * search_bar</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00067">remmina_main.h:67</a></div></div>
<div class="ttc" id="remmina__main_8c_html_ab7c680e1f6ffeef21cb928a083d36d89"><div class="ttname"><a href="remmina__main_8c.html#ab7c680e1f6ffeef21cb928a083d36d89">remminamain</a></div><div class="ttdeci">static RemminaMain * remminamain</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00069">remmina_main.c:69</a></div></div>
-<div class="ttc" id="remmina__file__editor_8c_html_aa5c50852f8569f075eec5d5db30c2ebf"><div class="ttname"><a href="remmina__file__editor_8c.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02150">remmina_file_editor.c:2150</a></div></div>
+<div class="ttc" id="remmina__file__editor_8c_html_aa5c50852f8569f075eec5d5db30c2ebf"><div class="ttname"><a href="remmina__file__editor_8c.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02160">remmina_file_editor.c:2160</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a5445e5568a6fc04d08b620829a59334a"><div class="ttname"><a href="remmina__main_8c.html#a5445e5568a6fc04d08b620829a59334a">remmina_main_on_action_application_quit</a></div><div class="ttdeci">void remmina_main_on_action_application_quit(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01143">remmina_main.c:1143</a></div></div>
<div class="ttc" id="struct___remmina_main_html_ac2eff9c56cc7830bcf9ca4bfdf216095"><div class="ttname"><a href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">_RemminaMain::entry_quick_connect_server</a></div><div class="ttdeci">GtkEntry * entry_quick_connect_server</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00071">remmina_main.h:71</a></div></div>
<div class="ttc" id="remmina__unlock_8c_html_a81e79e5c1c230b7e2bf27b2457801d4e"><div class="ttname"><a href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a></div><div class="ttdeci">gint remmina_unlock_new(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__unlock_8c_source.html#l00113">remmina_unlock.c:113</a></div></div>
diff --git a/public/remmina__protocol__widget_8c_source.html b/public/remmina__protocol__widget_8c_source.html
index 6750ed4ca..b22dde5a5 100644
--- a/public/remmina__protocol__widget_8c_source.html
+++ b/public/remmina__protocol__widget_8c_source.html
@@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('remmina__protocol__widget_8c_source.ht
<div class="title">remmina_protocol_widget.c</div> </div>
</div><!--header-->
<div class="contents">
-<a href="remmina__protocol__widget_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) 2009-2011 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-2023 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 &quot;config.h&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;gtk/gtk.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;gtk/gtkx.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &lt;glib/gi18n.h&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &lt;gmodule.h&gt;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</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="preprocessor">#include &quot;<a class="code" href="remmina__chat__window_8h.html">remmina_chat_window.h</a>&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a>&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ext__exec_8h.html">remmina_ext_exec.h</a>&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>&quot;</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>&quot;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__protocol__widget_8h.html">remmina_protocol_widget.h</a>&quot;</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__public_8h.html">remmina_public.h</a>&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ssh_8h.html">remmina_ssh.h</a>&quot;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__log_8h.html">remmina_log.h</a>&quot;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>&quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#ifdef GDK_WINDOWING_WAYLAND</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;gdk/gdkwayland.h&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html"> 60</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct___remmina_protocol_widget_priv.html">_RemminaProtocolWidgetPriv</a> {</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec"> 61</a></span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * <a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0"> 62</a></span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> * <a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d"> 63</a></span>&#160; <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93"> 65</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380"> 66</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533"> 67</a></span>&#160; <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c"> 68</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d"> 70</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4"> 71</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642"> 72</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">/* ssh_tunnels is an array of RemminaSSHTunnel*</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> * the 1st one is the &quot;main&quot; tunnel, other tunnels are used for example in sftp commands */</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116"> 75</a></span>&#160; GPtrArray * <a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211"> 76</a></span>&#160; <a class="code" href="types_8h.html#a1ace68e95e55a30fcf8b991f52332501">RemminaTunnelInitFunc</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>;</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="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e"> 78</a></span>&#160; GtkWidget * <a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6"> 80</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326"> 82</a></span>&#160; <a class="code" href="remmina__protocol__widget_8h.html#ab89fba118812616a3e47504cfe4f3390">RemminaHostkeyFunc</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10"> 84</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10">profile_remote_width</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca"> 85</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca">profile_remote_height</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46"> 86</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483"> 88</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640"> 89</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a>;</div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b"> 90</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4"> 91</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a>;</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"> 93</span>&#160; <span class="comment">/* Data saved from the last message_panel when the user confirm */</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885"> 94</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7"> 95</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f"> 96</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791"> 97</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e"> 99</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4"> 100</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05"> 101</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0"> 102</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;};</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373"> 105</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373">panel_type</a> {</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c"> 106</a></span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>,</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65"> 107</a></span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>,</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed"> 108</a></span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;};</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a247c73c70d9c58427022a4dbcd638d32"> 111</a></span>&#160;<a class="code" href="remmina__protocol__widget_8c.html#a247c73c70d9c58427022a4dbcd638d32">G_DEFINE_TYPE</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a>, remmina_protocol_widget, GTK_TYPE_EVENT_BOX)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">enum</span> {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; CONNECT_SIGNAL,</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; DISCONNECT_SIGNAL,</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; DESKTOP_RESIZE_SIGNAL,</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; UPDATE_ALIGN_SIGNAL,</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; LOCK_DYNRES_SIGNAL,</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; UNLOCK_DYNRES_SIGNAL,</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="rcw_8c.html#adf764cbdea00d65edcd07bb9953ad2b7a0c34d85df8279641afad9e3c9b3a54ce">LAST_SIGNAL</a></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;};</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_signal_data.html"> 123</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct___remmina_protocol_widget_signal_data.html">_RemminaProtocolWidgetSignalData</a> {</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_signal_data.html#a7a8b9ad6fdff86250a5eef649693d64a"> 124</a></span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> * <a class="code" href="struct___remmina_protocol_widget_signal_data.html#a7a8b9ad6fdff86250a5eef649693d64a">gp</a>;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_signal_data.html#a2dfdc85f32d5eeed1d183088ac2a4ada"> 125</a></span>&#160; <span class="keyword">const</span> gchar * <a class="code" href="struct___remmina_protocol_widget_signal_data.html#a2dfdc85f32d5eeed1d183088ac2a4ada">signal_name</a>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;} <a class="code" href="remmina__protocol__widget_8c.html#a91d88c61dd84299369fe3c79e19821b1">RemminaProtocolWidgetSignalData</a>;</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"><a class="line" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130"> 128</a></span>&#160;<span class="keyword">static</span> guint <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[<a class="code" href="rcw_8c.html#adf764cbdea00d65edcd07bb9953ad2b7a0c34d85df8279641afad9e3c9b3a54ce">LAST_SIGNAL</a>] =</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{ 0 };</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"><a class="line" href="remmina__protocol__widget_8c.html#a8c125f58aa4fac0e4c88f293e4d4dd74"> 131</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a8c125f58aa4fac0e4c88f293e4d4dd74">remmina_protocol_widget_class_init</a>(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a> *klass)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[CONNECT_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;connect&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, connect), NULL, NULL,</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[DISCONNECT_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;disconnect&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, disconnect), NULL, NULL,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[DESKTOP_RESIZE_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;desktop-resize&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565">desktop_resize</a>), NULL, NULL,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[UPDATE_ALIGN_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;update-align&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a">update_align</a>), NULL, NULL,</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[LOCK_DYNRES_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;lock-dynres&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc">lock_dynres</a>), NULL, NULL,</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[UNLOCK_DYNRES_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;unlock-dynres&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e">unlock_dynres</a>), NULL, NULL,</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</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;</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1"> 155</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1">remmina_protocol_widget_close_all_tunnels</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>) {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len; i++) {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>((<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[i]);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;LibSSH support turned off, no need to free SSH tunnel data&quot;</span>);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; g_ptr_array_set_size(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, 0);</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;}</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a7e54d9bb42d2d337527d3af657ef1e1f"> 173</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a7e54d9bb42d2d337527d3af657ef1e1f">remmina_protocol_widget_destroy</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gpointer data)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a> = NULL;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a> = NULL;</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; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a> = NULL;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a> = NULL;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a> = NULL;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a> = NULL;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a> = NULL;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a> = NULL;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a> = NULL;</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; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a> = NULL;</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; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> = NULL;</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; <a class="code" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1">remmina_protocol_widget_close_all_tunnels</a>(gp);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>) {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; g_ptr_array_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, TRUE);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> = NULL;</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"> 216</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8h.html#a290eb68f0e86de1b7b82e2d98a1494d1"> 218</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a290eb68f0e86de1b7b82e2d98a1494d1">remmina_protocol_widget_grab_focus</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;{</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; GtkWidget *child;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; child = gtk_bin_get_child(GTK_BIN(gp));</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; <span class="keywordflow">if</span> (child) {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; gtk_widget_set_can_focus(child, TRUE);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; gtk_widget_grab_focus(child);</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"> 229</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8c.html#a0fcec40aae330e115d1bae66aeefb3df"> 231</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a0fcec40aae330e115d1bae66aeefb3df">remmina_protocol_widget_init</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="struct___remmina_protocol_widget_priv.html">RemminaProtocolWidgetPriv</a> *priv;</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; priv = g_new0(<a class="code" href="struct___remmina_protocol_widget_priv.html">RemminaProtocolWidgetPriv</a>, 1);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> = priv;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> = FALSE;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a> = TRUE;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> = g_ptr_array_new();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; g_signal_connect(G_OBJECT(gp), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a7e54d9bb42d2d337527d3af657ef1e1f">remmina_protocol_widget_destroy</a>), NULL);</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"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a76ad91e7f8648699f71c466e203aa6dd"> 245</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a76ad91e7f8648699f71c466e203aa6dd">remmina_protocol_widget_open_connection_real</a>(gpointer data)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</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"> 250</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Opening connection&quot;</span>);</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; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; gint num_plugin;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; gint num_ssh;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a> = FALSE;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; plugin = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a3d9e2f2eb2594411e6fe63cde443dfb2">init</a>(gp);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">for</span> (num_plugin = 0, feature = (<a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *)plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>; feature &amp;&amp; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a>; num_plugin++, feature++) {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</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; num_ssh = 0;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE))</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; num_ssh += 2;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span> (num_plugin + num_ssh == 0) {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a> = NULL;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a> = g_new0(<a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a>, num_plugin + num_ssh + 1);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; feature = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>) {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; memcpy(feature, plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>, <span class="keyword">sizeof</span>(<a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a>) * num_plugin);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; feature += num_plugin;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Have SSH&quot;</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (num_ssh) {</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> = <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a>;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a> = REMMINA_PROTOCOL_FEATURE_TOOL_SSH;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aa7ac5ec9d95867734619583a2049e952">opt1</a> = _(<span class="stringliteral">&quot;Connect via SSH from a new terminal&quot;</span>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a4b8ffd6e32126a9c4d2074521279b12b">opt1_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aab44850c13a7e5e20a02603ae173d53d">opt2</a> = <span class="stringliteral">&quot;utilities-terminal&quot;</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a006b0d6d883c6dd0da6c444991973ac7">opt2_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#ab3c15094a16418c5951c5382c8a44190">opt3</a> = NULL;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a9abdee80580cddd54405d0577e459c2c">opt3_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288ab774d380798d305b72f4301143d3f440">REMMINA_TYPEHINT_UNDEFINED</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; feature++;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> = <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a> = REMMINA_PROTOCOL_FEATURE_TOOL_SFTP;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aa7ac5ec9d95867734619583a2049e952">opt1</a> = _(<span class="stringliteral">&quot;Open SFTP transfer…&quot;</span>);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a4b8ffd6e32126a9c4d2074521279b12b">opt1_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aab44850c13a7e5e20a02603ae173d53d">opt2</a> = <span class="stringliteral">&quot;folder-remote&quot;</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a006b0d6d883c6dd0da6c444991973ac7">opt2_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#ab3c15094a16418c5951c5382c8a44190">opt3</a> = NULL;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a9abdee80580cddd54405d0577e459c2c">opt3_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288ab774d380798d305b72f4301143d3f440">REMMINA_TYPEHINT_UNDEFINED</a>;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; feature++;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> = <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a311d2a8dae8d3d7b9045b4b704f94fe4">REMMINA_PROTOCOL_FEATURE_TYPE_END</a>;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="preprocessor">#endif</span></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;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (!plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad2e965f3997d21a1e08d365c74e615bd">open_connection</a>(gp))</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>(gp);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;}</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a4fb4c2252289e8e891376db6279ef8f5"> 311</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a4fb4c2252289e8e891376db6279ef8f5">cancel_open_connection_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;{</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)cbdata;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>(gp);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;}</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a6399c3828908e36ed6202b5599bd206b"> 318</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a6399c3828908e36ed6202b5599bd206b">remmina_protocol_widget_open_connection</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;{</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; gchar *s;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">/* Exec precommand before everything else */</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, _(<span class="stringliteral">&quot;Executing external commands…&quot;</span>), NULL, NULL);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="remmina__ext__exec_8c.html#a7c81795162a70d06294fdf935ea210d7">remmina_ext_exec_new</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;precommand&quot;</span>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; name = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;name&quot;</span>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for the connection profile name</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to “%s”…&quot;</span>), (name ? name : <span class="stringliteral">&quot;*&quot;</span>));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, s, <a class="code" href="remmina__protocol__widget_8c.html#a4fb4c2252289e8e891376db6279ef8f5">cancel_open_connection_cb</a>, gp);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; g_free(s);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a> = mp;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a76ad91e7f8648699f71c466e203aa6dd">remmina_protocol_widget_open_connection_real</a>(gp);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;}</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c"> 346</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c">conn_closed_real</a>(gpointer data, <span class="keywordtype">int</span> button){</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="preprocessor"> #ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="comment">/* This will close all tunnels */</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1">remmina_protocol_widget_close_all_tunnels</a>(gp);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">/* Exec postcommand */</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="remmina__ext__exec_8c.html#a7c81795162a70d06294fdf935ea210d7">remmina_ext_exec_new</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;postcommand&quot;</span>);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">/* Notify listeners (usually rcw) that the connection is closed */</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;disconnect&quot;</span>);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</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;</div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a69757e0c39fa9fcf31800f6375772016"> 362</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a69757e0c39fa9fcf31800f6375772016">conn_closed</a>(gpointer data)</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;{</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> &amp;&amp; !gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a>){</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* msg = <span class="stringliteral">&quot;Plugin Disconnected&quot;</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a>){</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; msg = <a class="code" href="remmina__protocol__widget_8c.html#a508044024b303c286a0e643e44d85a29">remmina_protocol_widget_get_error_message</a>(gp);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, NULL);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> = FALSE;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; RemminaMessagePanel* mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ae01d27ae9f678dc5a4fa32f0b401f434">remmina_message_panel_setup_message</a>(mp, msg, (<a class="code" href="remmina__message__panel_8h.html#ae2923c94c1caf1ac4a7eb48361d2670a">RemminaMessagePanelCallback</a>)<a class="code" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c">conn_closed_real</a>, gp);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c">conn_closed_real</a>(gp, 0);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</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;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a1cae52cad394f317c712eb4fd709d261"> 385</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a1cae52cad394f317c712eb4fd709d261">remmina_protocol_widget_signal_connection_closed</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;{</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">/* User told us that they closed the connection,</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment"> * or the connection was closed with a known error,</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment"> * add async event to main thread to complete our close tasks */</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a> = TRUE;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#a69757e0c39fa9fcf31800f6375772016">conn_closed</a>, (gpointer)gp);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8c.html#af4a20ef0ff8cc86feeba345498179e48"> 395</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#af4a20ef0ff8cc86feeba345498179e48">conn_opened</a>(gpointer data)</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>) {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">for</span> (guint i = 0; i &lt; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len; i++)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="remmina__ssh_8h.html#ae9f52b1a3a545acae8c93007e20ec909">remmina_ssh_tunnel_cancel_accept</a>((<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[i]);</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="preprocessor">#endif</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a>) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a>);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a> = NULL;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a>) {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a> = NULL;</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> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a>) {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a>);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a> = NULL;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;connect&quot;</span>);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</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;</div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a05b5edfc3d3d0dcff1745d1d35aaca5c"> 422</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a05b5edfc3d3d0dcff1745d1d35aaca5c">remmina_protocol_widget_signal_connection_opened</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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; <span class="comment">/* Plugin told us that it opened the connection,</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="comment"> * add async event to main thread to complete our close tasks */</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#af4a20ef0ff8cc86feeba345498179e48">conn_opened</a>, (gpointer)gp);</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;</div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a"> 430</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a">update_align</a>(gpointer data)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;update-align&quot;</span>);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;}</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aa88afa1e3f04974974a8be324b0a930e"> 439</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aa88afa1e3f04974974a8be324b0a930e">remmina_protocol_widget_update_align</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a">update_align</a>, (gpointer)gp);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;}</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc"> 446</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc">lock_dynres</a>(gpointer data)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;lock-dynres&quot;</span>);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;}</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;</div><div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e"> 455</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e">unlock_dynres</a>(gpointer data)</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;{</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;unlock-dynres&quot;</span>);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;}</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a36e01bda95825ee6b5f164f52af7c457"> 464</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a36e01bda95825ee6b5f164f52af7c457">remmina_protocol_widget_lock_dynres</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;{</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc">lock_dynres</a>, (gpointer)gp);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;}</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2551dd6f53480609596d2695040fba5d"> 471</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a2551dd6f53480609596d2695040fba5d">remmina_protocol_widget_unlock_dynres</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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; <span class="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e">unlock_dynres</a>, (gpointer)gp);</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"><a class="line" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565"> 478</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565">desktop_resize</a>(gpointer data)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;desktop-resize&quot;</span>);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</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;</div><div class="line"><a name="l00487"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9acf045c5a3eec5b7f748678dee0d3ee"> 487</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a9acf045c5a3eec5b7f748678dee0d3ee">remmina_protocol_widget_desktop_resize</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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; <span class="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565">desktop_resize</a>, (gpointer)gp);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;}</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</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"><a class="line" href="remmina__protocol__widget_8h.html#aa41324b7175c46bb42b978332db95d22"> 495</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;{</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">/* kindly ask the protocol plugin to close the connection.</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="comment"> * Nothing else is done here. */</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span> (!GTK_IS_WIDGET(gp))</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>) {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; gtk_widget_destroy(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a> = NULL;</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;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a>) {</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">/* Connection is already closed by the plugin, but</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="comment"> * rcw is asking to close again (usually after an error panel)</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">/* Clear the current error, or &quot;disconnect&quot; signal func will reshow a panel */</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, NULL);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;disconnect&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span>;</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; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> = TRUE;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">/* Ask the plugin to close, async.</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="comment"> * The plugin will emit a &quot;disconnect&quot; signal on gp to call our</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="comment"> * remmina_protocol_widget_on_disconnected() when done */</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad4b21147a7592bf689c9f761d9e4fdc2">close_connection</a>(gp);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">return</span>;</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="l00531"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a480f842fac65440c367bf3c3d87d2601"> 531</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a480f842fac65440c367bf3c3d87d2601">remmina_protocol_widget_plugin_receives_keystrokes</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;{</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a92bb5524267ad4fe682fc07f778500d7">send_keystrokes</a> ? TRUE : FALSE;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;}</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#affb2413c00f0681fe08f90523f7e1471"> 539</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#affb2413c00f0681fe08f90523f7e1471">remmina_protocol_widget_send_keystrokes</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, GtkMenuItem *widget)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;{</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; gchar *keystrokes = g_object_get_data(G_OBJECT(widget), <span class="stringliteral">&quot;keystrokes&quot;</span>);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; guint *keyvals;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; gint i;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; gunichar character;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; guint keyval;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; GdkKeymapKey *keys;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; gint n_keys;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="comment">/* Single keystroke replace */</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">typedef</span> <span class="keyword">struct </span>_KeystrokeReplace {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; gchar * search;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; gchar * replace;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; guint keyval;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; } KeystrokeReplace;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">/* Special characters to replace */</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; KeystrokeReplace keystrokes_replaces[] =</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; { <span class="stringliteral">&quot;\\n&quot;</span>, <span class="stringliteral">&quot;\n&quot;</span>, GDK_KEY_Return },</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; { <span class="stringliteral">&quot;\\t&quot;</span>, <span class="stringliteral">&quot;\t&quot;</span>, GDK_KEY_Tab },</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; { <span class="stringliteral">&quot;\\b&quot;</span>, <span class="stringliteral">&quot;\b&quot;</span>, GDK_KEY_BackSpace },</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; { <span class="stringliteral">&quot;\\e&quot;</span>, <span class="stringliteral">&quot;\e&quot;</span>, GDK_KEY_Escape },</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; { <span class="stringliteral">&quot;\\\\&quot;</span>, <span class="stringliteral">&quot;\\&quot;</span>, GDK_KEY_backslash },</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; { NULL, NULL, 0 }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; };</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="comment">/* Keystrokes can only be sent to plugins that accepts them */</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__protocol__widget_8c.html#a480f842fac65440c367bf3c3d87d2601">remmina_protocol_widget_plugin_receives_keystrokes</a>(gp)) {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">/* Replace special characters */</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">for</span> (i = 0; keystrokes_replaces[i].replace; i++) {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Keystrokes before replacement is \&#39;%s\&#39;&quot;</span>, keystrokes);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; keystrokes = g_strdup(<a class="code" href="remmina__public_8c.html#a8d7d9b3c8050545469b1af9a35b043a2">remmina_public_str_replace_in_place</a>(keystrokes,</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; keystrokes_replaces[i].search,</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; keystrokes_replaces[i].replace));</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Keystrokes after replacement is \&#39;%s\&#39;&quot;</span>, keystrokes);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; gchar *iter = g_strdup(keystrokes);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; keyvals = (guint *)g_malloc(strlen(keystrokes));</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">while</span> (TRUE) {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="comment">/* Process each character in the keystrokes */</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; character = g_utf8_get_char_validated(iter, -1);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (character == 0)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; keyval = gdk_unicode_to_keyval(character);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">/* Replace all the special character with its keyval */</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">for</span> (i = 0; keystrokes_replaces[i].replace; i++) {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (character == keystrokes_replaces[i].replace[0]) {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; keys = g_new0(GdkKeymapKey, 1);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; keyval = keystrokes_replaces[i].keyval;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">/* A special character was generated, no keyval lookup needed */</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; character = 0;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">/* Decode character if it’s not a special character */</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">if</span> (character) {</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">/* get keyval without modifications */</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">if</span> (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &amp;keys, &amp;n_keys)) {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; g_warning(<span class="stringliteral">&quot;keyval 0x%04x has no keycode!&quot;</span>, keyval);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">/* Add modifier keys */</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; n_keys = 0;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 1)</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; keyvals[n_keys++] = GDK_KEY_Shift_L;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 2)</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; keyvals[n_keys++] = GDK_KEY_Alt_R;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; keyvals[n_keys++] = keyval;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">/* Send keystroke to the plugin */</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a92bb5524267ad4fe682fc07f778500d7">send_keystrokes</a>(gp, keyvals, n_keys);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; g_free(keys);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">/* Process next character in the keystrokes */</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; g_free(keyvals);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; g_free(keystrokes);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;}</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a2f5270c5e5007a8e95f4d460c11b2a06"> 630</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a2f5270c5e5007a8e95f4d460c11b2a06">remmina_protocol_widget_send_clip_strokes</a>(GtkClipboard *clipboard, <span class="keyword">const</span> gchar *clip_text, gpointer data)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;{</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; gchar *text = g_utf8_normalize(clip_text, -1, G_NORMALIZE_DEFAULT_COMPOSE);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; guint *keyvals;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; gint i;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; gunichar character;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; guint keyval;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; GdkKeymapKey *keys;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; gint n_keys;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="comment">/* Single keystroke replace */</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">typedef</span> <span class="keyword">struct </span>_KeystrokeReplace {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; gchar * search;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; gchar * replace;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; guint keyval;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; } KeystrokeReplace;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="comment">/* Special characters to replace */</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; KeystrokeReplace text_replaces[] =</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; { <span class="stringliteral">&quot;\\n&quot;</span>, <span class="stringliteral">&quot;\n&quot;</span>, GDK_KEY_Return },</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; { <span class="stringliteral">&quot;\\t&quot;</span>, <span class="stringliteral">&quot;\t&quot;</span>, GDK_KEY_Tab },</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; { <span class="stringliteral">&quot;\\b&quot;</span>, <span class="stringliteral">&quot;\b&quot;</span>, GDK_KEY_BackSpace },</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; { <span class="stringliteral">&quot;\\e&quot;</span>, <span class="stringliteral">&quot;\e&quot;</span>, GDK_KEY_Escape },</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; { <span class="stringliteral">&quot;\\\\&quot;</span>, <span class="stringliteral">&quot;\\&quot;</span>, GDK_KEY_backslash },</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; { NULL, NULL, 0 }</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;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__protocol__widget_8c.html#a480f842fac65440c367bf3c3d87d2601">remmina_protocol_widget_plugin_receives_keystrokes</a>(gp)) {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (text) {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="comment">/* Replace special characters */</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">for</span> (i = 0; text_replaces[i].replace; i++) {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Text clipboard before replacement is \&#39;%s\&#39;&quot;</span>, text);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; text = g_strdup(<a class="code" href="remmina__public_8c.html#a8d7d9b3c8050545469b1af9a35b043a2">remmina_public_str_replace_in_place</a>(text,</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; text_replaces[i].search,</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; text_replaces[i].replace));</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Text clipboard after replacement is \&#39;%s\&#39;&quot;</span>, text);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; gchar *iter = g_strdup(text);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Iter: %s&quot;</span>, iter),</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; keyvals = (guint *)g_malloc(strlen(text));</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">while</span> (TRUE) {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="comment">/* Process each character in the keystrokes */</span></div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; character = g_utf8_get_char_validated(iter, -1);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Char: U+%04&quot;</span> G_GINT32_FORMAT<span class="stringliteral">&quot;X&quot;</span>, character);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (character == 0)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; keyval = gdk_unicode_to_keyval(character);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Keyval: %u&quot;</span>, keyval);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">/* Replace all the special character with its keyval */</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">for</span> (i = 0; text_replaces[i].replace; i++) {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (character == text_replaces[i].replace[0]) {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; keys = g_new0(GdkKeymapKey, 1);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; keyval = text_replaces[i].keyval;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Special Keyval: %u&quot;</span>, keyval);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">/* A special character was generated, no keyval lookup needed */</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; character = 0;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">break</span>;</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; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">/* Decode character if it’s not a special character */</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span> (character) {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">/* get keyval without modifications */</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">if</span> (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &amp;keys, &amp;n_keys)) {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;keyval 0x%04x has no keycode!&quot;</span>, keyval);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">/* Add modifier keys */</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; n_keys = 0;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 1)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; keyvals[n_keys++] = GDK_KEY_Shift_L;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 2)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; keyvals[n_keys++] = GDK_KEY_Alt_R;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="comment"> * @fixme heap buffer overflow</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="comment"> * In some cases, for example sending \t as the only sequence</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="comment"> * may lead to a buffer overflow</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; keyvals[n_keys++] = keyval;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">/* Send keystroke to the plugin */</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a92bb5524267ad4fe682fc07f778500d7">send_keystrokes</a>(gp, keyvals, n_keys);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; g_free(keys);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="comment">/* Process next character in the keystrokes */</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; g_free(keyvals);</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"> 721</span>&#160; g_free(text);</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; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8h.html#ae9b1b1b9fbce0de9b0bbb678c0bf9403"> 726</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ae9b1b1b9fbce0de9b0bbb678c0bf9403">remmina_protocol_widget_send_clipboard</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, GObject*widget)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;{</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; GtkClipboard *clipboard;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="comment">/* Request the contents of the clipboard, contents_received will be</span></div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;<span class="comment"> * called when we do get the contents.</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; gtk_clipboard_request_text(clipboard,</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2f5270c5e5007a8e95f4d460c11b2a06">remmina_protocol_widget_send_clip_strokes</a>, gp);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;}</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a57ac13fc4a2653c40e0601183628c0ca"> 740</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a57ac13fc4a2653c40e0601183628c0ca">remmina_protocol_widget_plugin_screenshot</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="struct___remmina_plugin_screenshot_data.html">RemminaPluginScreenshotData</a> *rpsd)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad4778e62aa78baace7d46fb1c4a475c4">get_plugin_screenshot</a>) {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;plugin screenshot function is not implemented, using core Remmina functionality&quot;</span>);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</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; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad4778e62aa78baace7d46fb1c4a475c4">get_plugin_screenshot</a>(gp, rpsd);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;}</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a1585ea6908dd5c0a9b0f47d409916435"> 751</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a1585ea6908dd5c0a9b0f47d409916435">remmina_protocol_widget_map_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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"> 753</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ae0dc6952f8015848cf97950fcc7d9997">map_event</a>) {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Map plugin function not implemented&quot;</span>);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</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; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling plugin mapping function&quot;</span>);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ae0dc6952f8015848cf97950fcc7d9997">map_event</a>(gp);</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;</div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ac9da39853a32523057759a498bf6ac0a"> 763</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#ac9da39853a32523057759a498bf6ac0a">remmina_protocol_widget_unmap_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;{</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#abfb8cc172b53c16c8099eba7ab3bbc57">unmap_event</a>) {</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Unmap plugin function not implemented&quot;</span>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling plugin unmapping function&quot;</span>);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#abfb8cc172b53c16c8099eba7ab3bbc57">unmap_event</a>(gp);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8h.html#ac3e5a7f14aef4adb2e57d35e9c180b3b"> 775</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ac3e5a7f14aef4adb2e57d35e9c180b3b">remmina_protocol_widget_emit_signal</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *signal_name)</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;{</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Emitting signals should be used from the object itself, not from another object&quot;</span>);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keyword">raise</span>(SIGINT);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_EMIT_SIGNAL;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a46c919e7c8529074e19f46cf1b545f97">protocolwidget_emit_signal</a>.signal_name = signal_name;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a46c919e7c8529074e19f46cf1b545f97">protocolwidget_emit_signal</a>.gp = gp;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; g_free(d);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">return</span>;</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; g_signal_emit_by_name(G_OBJECT(gp), signal_name);</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;}</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;</div><div class="line"><a name="l00796"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#af9b6a2c2665010ab09a6d9943f9850bd"> 796</a></span>&#160;<span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *<a class="code" href="remmina__protocol__widget_8c.html#af9b6a2c2665010ab09a6d9943f9850bd">remmina_protocol_widget_get_features</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;{</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;}</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;</div><div class="line"><a name="l00802"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#adbe15328275677cb38bd8c8a2d5e039d"> 802</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#adbe15328275677cb38bd8c8a2d5e039d">remmina_protocol_widget_query_feature_by_type</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5">RemminaProtocolFeatureType</a> type)</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;{</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a> &amp;&amp;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE))</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">for</span> (feature = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>; feature &amp;&amp; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a>; feature++)</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">if</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> == type)</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;}</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;</div><div class="line"><a name="l00819"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a4017a800d7803a40d606ffce2578509a"> 819</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a4017a800d7803a40d606ffce2578509a">remmina_protocol_widget_query_feature_by_ref</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;{</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#aa49520ac95b505c111abfb7f3b7c55de">query_feature</a>(gp, feature);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;}</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a6a630e96e5b914d60d678ae8eaad4cd9"> 825</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a6a630e96e5b914d60d678ae8eaad4cd9">remmina_protocol_widget_call_feature_by_type</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5">RemminaProtocolFeatureType</a> type, gint <span class="keywordtype">id</span>)</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;{</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature;</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">for</span> (feature = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>; feature &amp;&amp; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a>; feature++) {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">if</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> == type &amp;&amp; (<span class="keywordtype">id</span> == 0 || feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a> == <span class="keywordtype">id</span>)) {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a605b69a9aa4393024369cc5070488692">remmina_protocol_widget_call_feature_by_ref</a>(gp, feature);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keywordflow">break</span>;</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"><a class="line" href="remmina__protocol__widget_8h.html#a605b69a9aa4393024369cc5070488692"> 838</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a605b69a9aa4393024369cc5070488692">remmina_protocol_widget_call_feature_by_ref</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;{</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">switch</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a>) {</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">case</span> REMMINA_PROTOCOL_FEATURE_TOOL_SSH:</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &gt; 0) {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <a class="code" href="rcw_8c.html#ad3c2fe67b137c757bd21b79ad5dcc5ff">rcw_open_from_file_full</a>(</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <a class="code" href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;SSH&quot;</span>), NULL,</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0], NULL);</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; }</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">case</span> REMMINA_PROTOCOL_FEATURE_TOOL_SFTP:</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &gt; 0) {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <a class="code" href="rcw_8c.html#ad3c2fe67b137c757bd21b79ad5dcc5ff">rcw_open_from_file_full</a>(</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <a class="code" href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;SFTP&quot;</span>), NULL,</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0], NULL);</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">return</span>;</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">break</span>;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; }</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a4908abc6c70c59c42e2757aecaa25cf1">call_feature</a>(gp, feature);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;}</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a1caaa7bea6ef53e5c7e8109f3d0814e1"> 867</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a1caaa7bea6ef53e5c7e8109f3d0814e1">remmina_protocol_widget_on_key_press</a>(GtkWidget *widget, GdkEventKey *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;{</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>)</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>(gp, event-&gt;keyval, FALSE);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">return</span> FALSE;</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"><a class="line" href="remmina__protocol__widget_8c.html#ac1f95eb1e31c05ae0bc4027496ceafb0"> 875</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#ac1f95eb1e31c05ae0bc4027496ceafb0">remmina_protocol_widget_on_key_release</a>(GtkWidget *widget, GdkEventKey *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;{</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>)</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>(gp, event-&gt;keyval, TRUE);</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"> 881</span>&#160; <span class="keywordflow">return</span> FALSE;</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;</div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a13e14fa81f7ca52942415a7caf5b932c"> 884</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a13e14fa81f7ca52942415a7caf5b932c">remmina_protocol_widget_register_hostkey</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, GtkWidget *widget)</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;key-press-event&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a1caaa7bea6ef53e5c7e8109f3d0814e1">remmina_protocol_widget_on_key_press</a>), gp);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;key-release-event&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#ac1f95eb1e31c05ae0bc4027496ceafb0">remmina_protocol_widget_on_key_release</a>), gp);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;}</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;</div><div class="line"><a name="l00891"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a5aaadd752a3275a0a8e0018a3dd669f8"> 891</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a5aaadd752a3275a0a8e0018a3dd669f8">remmina_protocol_widget_set_hostkey_func</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="remmina__protocol__widget_8h.html#ab89fba118812616a3e47504cfe4f3390">RemminaHostkeyFunc</a> func)</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;{</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a> = func;</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;}</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a78b123eca6709bceeacda7d791a94bf1"> 897</a></span>&#160;RemminaMessagePanel *<a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(<a class="code" href="struct___remmina_connection_object.html">RemminaConnectionObject</a> *cnnobj, <span class="keyword">const</span> gchar *msg, <a class="code" href="remmina__message__panel_8h.html#ae2923c94c1caf1ac4a7eb48361d2670a">RemminaMessagePanelCallback</a> response_callback, gpointer response_callback_data)</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; RemminaMessagePanel *mp;</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="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_MPPROGRESS;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.cnnobj = cnnobj;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.message = msg;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.response_callback = response_callback;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.response_callback_data = response_callback_data;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; mp = d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.ret_mp;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; g_free(d);</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">return</span> mp;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; }</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, msg, response_callback, response_callback_data);</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(cnnobj, mp);</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordflow">return</span> mp;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;}</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;</div><div class="line"><a name="l00922"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a97cba8208a4348446159bf465b3233f5"> 922</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(<a class="code" href="struct___remmina_connection_object.html">RemminaConnectionObject</a> *cnnobj, RemminaMessagePanel *mp)</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; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_MPDESTROY;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a75007c472a404959a00cdebd8efc951a">protocolwidget_mpdestroy</a>.cnnobj = cnnobj;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a75007c472a404959a00cdebd8efc951a">protocolwidget_mpdestroy</a>.mp = mp;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; g_free(d);</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">return</span>;</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; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(cnnobj, mp);</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;}</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00939"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a99ba55ddcb17c9e87ca233fa83787227"> 939</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a99ba55ddcb17c9e87ca233fa83787227">cancel_init_tunnel_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;{</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling an opening tunnel is not implemented\n&quot;</span>);</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;}</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;</div><div class="line"><a name="l00944"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3"> 944</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *<a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;{</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; gint ret;</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; gchar *msg;</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; gboolean partial = FALSE;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; gboolean cont = FALSE;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; tunnel = <a class="code" href="remmina__ssh_8h.html#abf04fd329ab77bbd4f6aa1cb1eaa349d">remmina_ssh_tunnel_new_from_file</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Creating SSH tunnel to “%s” via SSH…&quot;</span>, REMMINA_SSH(tunnel)-&gt;server);</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for an hostname or an IP address.</span></div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to “%s” via SSH…&quot;</span>), REMMINA_SSH(tunnel)-&gt;server);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#a99ba55ddcb17c9e87ca233fa83787227">cancel_init_tunnel_cb</a>, NULL);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; g_free(msg);</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">while</span> (1) {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">if</span> (!partial) {</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#a624b8ac30ddcd00ebda0b51d504f5a33">remmina_ssh_init_session</a>(REMMINA_SSH(tunnel))) {</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH Tunnel init session error: %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="comment">// exit the loop here: OK</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; }</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;</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; ret = <a class="code" href="remmina__ssh_8h.html#acf69725720378340e1a51c87e7638a7f">remmina_ssh_auth_gui</a>(REMMINA_SSH(tunnel), gp, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Tunnel auth returned %d&quot;</span>, ret);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>:</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication success&quot;</span>);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>:</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Continue with the next auth method&quot;</span>);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; partial = TRUE;</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="comment">// Continue the loop: OK</span></div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ad56c3878c4a651b51fdb3d0e8b9cebd7">REMMINA_SSH_AUTH_RECONNECT</a>:</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Reconnecting…&quot;</span>);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">if</span> (REMMINA_SSH(tunnel)-&gt;session) {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; ssh_disconnect(REMMINA_SSH(tunnel)-&gt;session);</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; ssh_free(REMMINA_SSH(tunnel)-&gt;session);</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; REMMINA_SSH(tunnel)-&gt;session = NULL;</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; g_free(REMMINA_SSH(tunnel)-&gt;callback);</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="comment">// Continue the loop: OK</span></div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>:</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Interrupted by the user&quot;</span>);</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="comment">// exit the loop here: OK</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keywordflow">goto</span> BREAK;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Error during the authentication: %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="comment">// exit the loop here: OK</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">goto</span> BREAK;</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; }</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; cont = TRUE;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#a624b8ac30ddcd00ebda0b51d504f5a33">remmina_ssh_init_session</a>(REMMINA_SSH(tunnel))) {</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot init SSH session with tunnel struct&quot;</span>);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; }</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; ret = <a class="code" href="remmina__ssh_8h.html#acf69725720378340e1a51c87e7638a7f">remmina_ssh_auth_gui</a>(REMMINA_SSH(tunnel), gp, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Tunnel auth returned %d&quot;</span>, ret);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">if</span> (ret != <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>) {</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">if</span> (ret != <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>)</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; }</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;BREAK:</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keywordflow">if</span> (!cont) {</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; }</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">return</span> tunnel;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;}</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01048"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a0a93da80662ff18b93270ced59243ce3"> 1048</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a0a93da80662ff18b93270ced59243ce3">cancel_start_direct_tunnel_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;{</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling start_direct_tunnel is not implemented\n&quot;</span>);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;}</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;</div><div class="line"><a name="l01053"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aecd801fbe5399bbeb5832657bce193cb"> 1053</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aecd801fbe5399bbeb5832657bce193cb">remmina_protocol_widget_tunnel_destroy</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;{</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; guint idx = 0;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="preprocessor">#if GLIB_CHECK_VERSION(2, 54, 0)</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; gboolean found = g_ptr_array_find(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel, &amp;idx);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; gboolean found = FALSE;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len; i++) {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">if</span> ((<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[i] == tunnel) {</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; found = TRUE;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; idx = i;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; printf(<span class="stringliteral">&quot;Tunnel %s found at idx = %d\n&quot;</span>, found ? <span class="stringliteral">&quot;yes&quot;</span>: <span class="stringliteral">&quot;not&quot;</span>, idx);</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span> (found) {</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;[Tunnel with idx %u has been disconnected&quot;</span>, idx);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; g_ptr_array_remove(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; }</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;}</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;</div><div class="line"><a name="l01089"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9d55210413d6a313478f81cf76ecf1b7"> 1089</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a9d55210413d6a313478f81cf76ecf1b7">remmina_protocol_widget_start_direct_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint default_port, gboolean port_plus)</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;{</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="keyword">const</span> gchar *server;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keyword">const</span> gchar *ssh_tunnel_server;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; gchar *ssh_tunnel_host, *srv_host, *dest;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; gint srv_port, ssh_tunnel_port = 0;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH tunnel initialization…&quot;</span>);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; ssh_tunnel_server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (!server)</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keywordflow">return</span> g_strdup(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">if</span> (strstr(g_strdup(server), <span class="stringliteral">&quot;unix:///&quot;</span>) != NULL) {</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;%s is a UNIX socket&quot;</span>, server);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">return</span> g_strdup(server);</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, default_port, &amp;srv_host, &amp;srv_port);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port (tunnel)&quot;</span>);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(ssh_tunnel_server, 22, &amp;ssh_tunnel_host, &amp;ssh_tunnel_port);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server: %s, port: %d&quot;</span>, srv_host, srv_port);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">if</span> (port_plus &amp;&amp; srv_port &lt; 100)</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="comment">/* Protocols like VNC supports using instance number :0, :1, etc. as port number. */</span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; srv_port += default_port;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; gchar *msg;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE)) {</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; dest = g_strdup_printf(<span class="stringliteral">&quot;[%s]:%i&quot;</span>, srv_host, srv_port);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">return</span> dest;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; }</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; tunnel = <a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(gp);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">if</span> (!tunnel) {</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;remmina_protocol_widget_init_tunnel failed with error is %s&quot;</span>,</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a508044024b303c286a0e643e44d85a29">remmina_protocol_widget_get_error_message</a>(gp));</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for an hostname or an IP address.</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to “%s” via SSH…&quot;</span>), server);</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#a0a93da80662ff18b93270ced59243ce3">cancel_start_direct_tunnel_cb</a>, NULL);</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; g_free(msg);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>, FALSE)) {</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; ssh_tunnel_host = NULL;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; srv_host = g_strdup(<span class="stringliteral">&quot;127.0.0.1&quot;</span>);</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Starting tunnel to: %s, port: %d&quot;</span>, ssh_tunnel_host, ssh_tunnel_port);</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#a52b3f47eac79f2781ba81d61505f4f53">remmina_ssh_tunnel_open</a>(tunnel, srv_host, srv_port, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#af348bb968fd98ba269c4e253750e2400">sshtunnel_port</a>)) {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; }</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a1e1f1bfaec497b1365ea70ebe795d778">destroy_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#aecd801fbe5399bbeb5832657bce193cb">remmina_protocol_widget_tunnel_destroy</a>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a33ae9b7cd8cb3dcd85223017dfd13795">destroy_func_callback_data</a> = (gpointer)gp;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; g_ptr_array_add(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">return</span> g_strdup_printf(<span class="stringliteral">&quot;127.0.0.1:%i&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#af348bb968fd98ba269c4e253750e2400">sshtunnel_port</a>);</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; dest = g_strdup_printf(<span class="stringliteral">&quot;[%s]:%i&quot;</span>, srv_host, srv_port);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">return</span> dest;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;}</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01184"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aeffe07c6412286d99ba04f05fe74aeac"> 1184</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aeffe07c6412286d99ba04f05fe74aeac">cancel_start_reverse_tunnel_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;{</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling start_reverse_tunnel is not implemented\n&quot;</span>);</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;}</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aa6d9f2f558fcd9e7fe58eefcde1c3c5c"> 1191</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#aa6d9f2f558fcd9e7fe58eefcde1c3c5c">remmina_protocol_widget_start_reverse_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint local_port)</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;{</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; gchar *msg;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE))</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="keywordflow">if</span> (!(tunnel = <a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(gp)))</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="comment">// TRANSLATORS: “%i” is a placeholder for a TCP port number.</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Awaiting incoming SSH connection on port %i…&quot;</span>), <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;listenport&quot;</span>, 0));</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#aeffe07c6412286d99ba04f05fe74aeac">cancel_start_reverse_tunnel_cb</a>, NULL);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; g_free(msg);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#ae47c8270267b02b9c0ff5b36074101c2">remmina_ssh_tunnel_reverse</a>(tunnel, <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;listenport&quot;</span>, 0), local_port)) {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; }</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; g_ptr_array_add(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;}</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a12eddf3428a53201ee0a2ec422d2fa4a"> 1222</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a12eddf3428a53201ee0a2ec422d2fa4a">remmina_protocol_widget_ssh_exec</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gboolean wait, <span class="keyword">const</span> gchar *fmt, ...)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;{</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; ssh_channel channel;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; gint status;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; gboolean ret = FALSE;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; gchar *cmd, *ptr;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; va_list args;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &lt; 1)</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0];</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; if ((channel = ssh_channel_new(REMMINA_SSH(tunnel)-&gt;session)) == NULL)</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; va_start(args, fmt);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; cmd = g_strdup_vprintf(fmt, args);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; va_end(args);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">if</span> (ssh_channel_open_session(channel) == SSH_OK &amp;&amp;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; ssh_channel_request_exec(channel, cmd) == SSH_OK) {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keywordflow">if</span> (wait) {</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; status = ssh_channel_get_exit_status(channel);</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; ptr = strchr(cmd, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">if</span> (ptr) *ptr = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">switch</span> (status) {</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; ret = TRUE;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">case</span> 127:</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a place holder for a unix command path.</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel),</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; _(<span class="stringliteral">&quot;The “%s” command is not available on the SSH server.&quot;</span>), cmd);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a place holder for a unix command path. “%i” is a placeholder for an error code number.</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel),</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; _(<span class="stringliteral">&quot;Could not run the “%s” command on the SSH server (status = %i).&quot;</span>), cmd, status);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; }</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; ret = TRUE;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; }</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="comment">// TRANSLATORS: %s is a placeholder for an error message</span></div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not run command. %s&quot;</span>));</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; }</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; g_free(cmd);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">if</span> (wait)</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;}</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01288"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aeaa588b63800d3762b738fbbfd4a1736"> 1288</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aeaa588b63800d3762b738fbbfd4a1736">remmina_protocol_widget_xport_tunnel_init_callback</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;{</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; gchar *server;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; gint port;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; gboolean ret;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>), 177, &amp;server, &amp;port);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; ret = ((<a class="code" href="types_8h.html#afae2f546eaf9ef8a816a804e830055bf">RemminaXPortTunnelInitFunc</a>)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>)(gp,</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a>, (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> ? <span class="stringliteral">&quot;localhost&quot;</span> : server), port);</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; g_free(server);</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;}</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;</div><div class="line"><a name="l01305"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#adfac12e7a563dc06fb2f0c8307f40fee"> 1305</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#adfac12e7a563dc06fb2f0c8307f40fee">remmina_protocol_widget_xport_tunnel_connect_callback</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;{</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;}</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;</div><div class="line"><a name="l01311"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a450fbca7e27c952b6aaba6e33192051d"> 1311</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a450fbca7e27c952b6aaba6e33192051d">remmina_protocol_widget_xport_tunnel_disconnect_callback</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;{</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="keywordflow">if</span> (REMMINA_SSH(tunnel)-&gt;error)</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, <span class="stringliteral">&quot;%s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; IDLE_ADD((GSourceFunc)<a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>, gp);</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;}</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01324"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a05f9694efc84de6273efa46d232b84f9"> 1324</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a05f9694efc84de6273efa46d232b84f9">cancel_connect_xport_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;{</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling an XPort connection is not implemented\n&quot;</span>);</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;}</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01329"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a172fa9cf2ce196c9846a3e47ea9036b4"> 1329</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a172fa9cf2ce196c9846a3e47ea9036b4">remmina_protocol_widget_start_xport_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#afae2f546eaf9ef8a816a804e830055bf">RemminaXPortTunnelInitFunc</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>)</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;{</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; gboolean bindlocalhost;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; gchar *server;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; gchar *msg;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="keywordflow">if</span> (!(tunnel = <a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(gp))) <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for a hostname or IP address.</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to %s via SSH…&quot;</span>), <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>));</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#a05f9694efc84de6273efa46d232b84f9">cancel_connect_xport_cb</a>, NULL);</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; g_free(msg);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#aeaa588b63800d3762b738fbbfd4a1736">remmina_protocol_widget_xport_tunnel_init_callback</a>;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#adfac12e7a563dc06fb2f0c8307f40fee">remmina_protocol_widget_xport_tunnel_connect_callback</a>;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#a450fbca7e27c952b6aaba6e33192051d">remmina_protocol_widget_xport_tunnel_disconnect_callback</a>;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a> = gp;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>), 0, &amp;server, NULL);</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; bindlocalhost = (g_strcmp0(REMMINA_SSH(tunnel)-&gt;server, server) == 0);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; g_free(server);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#aba49db2ced40e21e8adfad69dcfda2c4">remmina_ssh_tunnel_xport</a>(tunnel, bindlocalhost)) {</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, <span class="stringliteral">&quot;Could not open channel, %s&quot;</span>,</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; ssh_get_error(REMMINA_SSH(tunnel)-&gt;session));</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; g_ptr_array_add(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;}</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;</div><div class="line"><a name="l01374"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a15368afcbeb770f8cf25941bd49e7b54"> 1374</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a15368afcbeb770f8cf25941bd49e7b54">remmina_protocol_widget_set_display</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint display)</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;{</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &lt; 1)</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0];</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; if (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>) g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>);</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a> = g_strdup_printf(<span class="stringliteral">&quot;unix:%i&quot;</span>, display);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;}</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab4c6435ef92e34a94270069ce1861907"> 1387</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ab4c6435ef92e34a94270069ce1861907">remmina_protocol_widget_get_profile_remote_width</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;{</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="comment">/* Returns the width of remote desktop as chosen by the user profile */</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10">profile_remote_width</a>;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;}</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#abdf99138612d02bc3921b0b77bdc89cb"> 1394</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#abdf99138612d02bc3921b0b77bdc89cb">remmina_protocol_widget_get_multimon</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;{</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="comment">/* Returns ehenever multi monitor is enabled (1) */</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;multimon&quot;</span>, -1);</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Multi monitor is set to %d&quot;</span>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a>);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a>;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;}</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div><div class="line"><a name="l01403"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ad8df6a87e19b7751b26820ef4a668de9"> 1403</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ad8df6a87e19b7751b26820ef4a668de9">remmina_protocol_widget_get_profile_remote_height</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;{</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="comment">/* Returns the height of remote desktop as chosen by the user profile */</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca">profile_remote_height</a>;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;}</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab224a0f643d291f86ede54e373bd0a6f"> 1410</a></span>&#160;<span class="keyword">const</span> gchar* <a class="code" href="remmina__protocol__widget_8c.html#ab224a0f643d291f86ede54e373bd0a6f">remmina_protocol_widget_get_name</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;{</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="keywordflow">return</span> gp ? gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aa7b9f54b6bb8bb01c24a8740b9c3633c">plugin</a> ? gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aa7b9f54b6bb8bb01c24a8740b9c3633c">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a> : NULL : NULL;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;}</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01416"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aaf355ea7103fc57a4cbc7b815cde2995"> 1416</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#aaf355ea7103fc57a4cbc7b815cde2995">remmina_protocol_widget_get_width</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;{</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;}</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01422"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a41b62f211a8a8e960bc80aa1ba6b0380"> 1422</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a41b62f211a8a8e960bc80aa1ba6b0380">remmina_protocol_widget_set_width</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint <a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>)</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;{</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;}</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01428"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ae609b351fff17c235251b0ba7c480da5"> 1428</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ae609b351fff17c235251b0ba7c480da5">remmina_protocol_widget_get_height</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;{</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;}</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;</div><div class="line"><a name="l01434"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aadd106cec729a80405c6097e4c662044"> 1434</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aadd106cec729a80405c6097e4c662044">remmina_protocol_widget_set_height</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint <a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>)</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;{</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;}</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;</div><div class="line"><a name="l01440"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a5ec62969da54155e24edcb1d998f93f7"> 1440</a></span>&#160;<a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="remmina__protocol__widget_8c.html#a5ec62969da54155e24edcb1d998f93f7">remmina_protocol_widget_get_current_scale_mode</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;{</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;}</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ad6e2d00646e8268aa0e8bbe31b77db48"> 1446</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ad6e2d00646e8268aa0e8bbe31b77db48">remmina_protocol_widget_set_current_scale_mode</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>)</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;{</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;}</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;</div><div class="line"><a name="l01452"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a25bcb2ae99449624fed6f770218e3d25"> 1452</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a25bcb2ae99449624fed6f770218e3d25">remmina_protocol_widget_get_expand</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;{</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a>;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;}</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;</div><div class="line"><a name="l01458"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a0b19dbe685e4465e7f06706270e120fa"> 1458</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a0b19dbe685e4465e7f06706270e120fa">remmina_protocol_widget_set_expand</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gboolean expand)</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;{</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a> = expand;</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;}</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;</div><div class="line"><a name="l01465"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aab2f304822ccfd4979854ef1afd81771"> 1465</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#aab2f304822ccfd4979854ef1afd81771">remmina_protocol_widget_has_error</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;{</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a>;</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;}</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div><div class="line"><a name="l01471"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a508044024b303c286a0e643e44d85a29"> 1471</a></span>&#160;<span class="keyword">const</span> gchar *<a class="code" href="remmina__protocol__widget_8c.html#a508044024b303c286a0e643e44d85a29">remmina_protocol_widget_get_error_message</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;{</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;}</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;</div><div class="line"><a name="l01477"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a95088334da86faf9520383629fff48af"> 1477</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *fmt, ...)</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;{</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; va_list args;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>) g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>);</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="keywordflow">if</span> (fmt == NULL) {</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a> = FALSE;</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a> = NULL;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; }</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; va_start(args, fmt);</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a> = g_strdup_vprintf(fmt, args);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; va_end(args);</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a> = TRUE;</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;}</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;</div><div class="line"><a name="l01497"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2830f756dfc3d735b57b0c5753c429e3"> 1497</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a2830f756dfc3d735b57b0c5753c429e3">remmina_protocol_widget_is_closed</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;{</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a>;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;}</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;</div><div class="line"><a name="l01503"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2506e80d482c34532d0e534856452069"> 1503</a></span>&#160;<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *<a class="code" href="remmina__protocol__widget_8c.html#a2506e80d482c34532d0e534856452069">remmina_protocol_widget_get_file</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;{</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;}</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;</div><div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html"> 1509</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> {</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="comment">/* Input data */</span></div><div class="line"><a name="l01511"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a"> 1511</a></span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01512"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74"> 1512</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>;</div><div class="line"><a name="l01513"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28"> 1513</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>;</div><div class="line"><a name="l01514"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850"> 1514</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>;</div><div class="line"><a name="l01515"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361"> 1515</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>;</div><div class="line"><a name="l01516"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544"> 1516</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a>;</div><div class="line"><a name="l01517"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7"> 1517</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373">panel_type</a> dtype;</div><div class="line"><a name="l01518"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8"> 1518</a></span>&#160; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486">RemminaMessagePanelFlags</a> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>;</div><div class="line"><a name="l01519"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f"> 1519</a></span>&#160; gboolean <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a>;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="comment">/* Running status */</span></div><div class="line"><a name="l01521"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf"> 1521</a></span>&#160; pthread_mutex_t <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>;</div><div class="line"><a name="l01522"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda"> 1522</a></span>&#160; pthread_cond_t <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; <span class="comment">/* Output/retval */</span></div><div class="line"><a name="l01524"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5"> 1524</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;};</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb"> 1527</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>(<span class="keywordtype">void</span> *user_data, <span class="keywordtype">int</span> button)</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;{</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *d = (<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *)user_data;</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a> = button;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="keywordflow">if</span> (button == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>) {</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a> = <a class="code" href="remmina__message__panel_8c.html#a44054d029d4615092ae8a2ee1bf81db4">remmina_message_panel_field_get_string</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a1d61170572fba5e968305c2ea3b0f9f6">REMMINA_MESSAGE_PANEL_PASSWORD</a>);</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a> = <a class="code" href="remmina__message__panel_8c.html#a44054d029d4615092ae8a2ee1bf81db4">remmina_message_panel_field_get_string</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a5c66a04852163126a3b494abe3e07e25">REMMINA_MESSAGE_PANEL_USERNAME</a>);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a> = <a class="code" href="remmina__message__panel_8c.html#a44054d029d4615092ae8a2ee1bf81db4">remmina_message_panel_field_get_string</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a9efe2bb3f139ed0baf3833880fc2369a">REMMINA_MESSAGE_PANEL_DOMAIN</a>);</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a> = <a class="code" href="remmina__message__panel_8c.html#a80bc2fcb39c236da739593c2134c73fa">remmina_message_panel_field_get_switch_state</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a>) {</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a10531307d859706670fb6ce4aa7308c7">REMMINA_MESSAGE_PANEL_CACERTFILE</a>);</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a703afb1dece981649f9497a9e910b779">REMMINA_MESSAGE_PANEL_CACRLFILE</a>);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a26a6d6b3ac3f4e64662b0c72dc3982f7">REMMINA_MESSAGE_PANEL_CLIENTCERTFILE</a>);</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a34c1441f93d50321cbabcfb45918c6e3">REMMINA_MESSAGE_PANEL_CLIENTKEYFILE</a>);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; }</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; }</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a>) {</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="comment">/* Hide and destroy message panel, we can do it now because we are on the main thread */</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="comment">/* Awake the locked subthread, when called from subthread */</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; pthread_mutex_lock(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; pthread_cond_signal(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>);</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; pthread_mutex_unlock(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="comment">/* Signal completion, when called from main thread. Message panel will be destroyed by the caller */</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <a class="code" href="remmina__message__panel_8c.html#af7db7b9f49fe6b83b17471116d363d40">remmina_message_panel_response</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, button);</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;}</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;</div><div class="line"><a name="l01560"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113"> 1560</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113">remmina_protocol_widget_dialog_mt_setup</a>(gpointer user_data)</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;{</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *d = (<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *)user_data;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <span class="keyword">const</span> gchar *s;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a> == NULL)</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>) {</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ae2cec8bc8216154388727b7e35200667">remmina_message_panel_setup_auth</a>(mp, <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>, d, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>);</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a0e20944d484c95036eeb6b5d7775c901">remmina_message_panel_field_set_string</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a5c66a04852163126a3b494abe3e07e25">REMMINA_MESSAGE_PANEL_USERNAME</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a> &amp; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a46ac68f2dea71082d090ae63c5c4505c">REMMINA_MESSAGE_PANEL_FLAG_DOMAIN</a>)</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a0e20944d484c95036eeb6b5d7775c901">remmina_message_panel_field_set_string</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a9efe2bb3f139ed0baf3833880fc2369a">REMMINA_MESSAGE_PANEL_DOMAIN</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a0e20944d484c95036eeb6b5d7775c901">remmina_message_panel_field_set_string</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a1d61170572fba5e968305c2ea3b0f9f6">REMMINA_MESSAGE_PANEL_PASSWORD</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>);</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a> &amp; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>)</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a67a48217d44350e028ed95b1b55f0b0f">remmina_message_panel_field_set_switch</a>(mp, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>, (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a> == NULL || d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>[0] == 0) ? FALSE: TRUE);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>) {</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ae5b1825b5d4e56ecc2f25c28bb042c32">remmina_message_panel_setup_question</a>(mp, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>, <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>, d);</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a>) {</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ac10f450f856ca7d9c0b6896261e9c407">remmina_message_panel_setup_auth_x509</a>(mp, <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>, d);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;cacert&quot;</span>)) != NULL)</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a10531307d859706670fb6ce4aa7308c7">REMMINA_MESSAGE_PANEL_CACERTFILE</a>, s);</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;cacrl&quot;</span>)) != NULL)</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a703afb1dece981649f9497a9e910b779">REMMINA_MESSAGE_PANEL_CACRLFILE</a>, s);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;clientcert&quot;</span>)) != NULL)</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a26a6d6b3ac3f4e64662b0c72dc3982f7">REMMINA_MESSAGE_PANEL_CLIENTCERTFILE</a>, s);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;clientkey&quot;</span>)) != NULL)</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a34c1441f93d50321cbabcfb45918c6e3">REMMINA_MESSAGE_PANEL_CLIENTKEYFILE</a>, s);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; }</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a> = mp;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;}</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;</div><div class="line"><a name="l01601"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html"> 1601</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l01602"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5"> 1602</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>;</div><div class="line"><a name="l01603"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079"> 1603</a></span>&#160; GMainLoop * <a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>;</div><div class="line"><a name="l01604"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904"> 1604</a></span>&#160; gint <a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a>;</div><div class="line"><a name="l01605"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91"> 1605</a></span>&#160; gboolean <a class="code" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91">destroyed</a>;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;} <a class="code" href="struct_mp_run_info.html">MpRunInfo</a>;</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;</div><div class="line"><a name="l01608"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572"> 1608</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri)</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;{</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">if</span> (g_main_loop_is_running(mpri-&gt;<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>))</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; g_main_loop_quit(mpri-&gt;<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>);</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;}</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;</div><div class="line"><a name="l01614"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a122e28e59acb89200937ff823b82ddaf"> 1614</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a122e28e59acb89200937ff823b82ddaf">run_response_handler</a>(RemminaMessagePanel *mp, gint response_id, gpointer data)</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;{</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri = (<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *)data;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a> = response_id;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(mpri);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;}</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;</div><div class="line"><a name="l01622"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#ac9abaedb8cc35838ef1444423a81507d"> 1622</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ac9abaedb8cc35838ef1444423a81507d">run_unmap_handler</a>(RemminaMessagePanel *mp, gpointer data)</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;{</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri = (<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *)data;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a> = GTK_RESPONSE_CANCEL;</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(mpri);</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;}</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;</div><div class="line"><a name="l01630"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a7b1e83afd68c2b7301fc4d6da6a8f6d8"> 1630</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a7b1e83afd68c2b7301fc4d6da6a8f6d8">run_destroy_handler</a>(RemminaMessagePanel *mp, gpointer data)</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;{</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri = (<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *)data;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91">destroyed</a> = TRUE;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a> = GTK_RESPONSE_CANCEL;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(mpri);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;}</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;</div><div class="line"><a name="l01639"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54"> 1639</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<span class="keyword">enum</span> <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373">panel_type</a> dtype, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486">RemminaMessagePanelFlags</a> pflags,</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="keyword">const</span> gchar *title, <span class="keyword">const</span> gchar *default_username, <span class="keyword">const</span> gchar *default_password, <span class="keyword">const</span> gchar *default_domain,</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="keyword">const</span> gchar *strpasswordlabel)</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;{</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; <span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *d = (<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *)g_malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a>));</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordtype">int</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a> = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a> = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>;</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a>;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a> = g_strdup(title);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a> = g_strdup(strpasswordlabel);</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a> = g_strdup(default_username);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a> = g_strdup(default_password);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a> = g_strdup(default_domain);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a> = FALSE;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="comment">/* Run the MessagePanel in main thread, in a very similar way of gtk_dialog_run() */</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> mpri = { NULL, NULL, GTK_RESPONSE_CANCEL, FALSE };</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; gulong unmap_handler;</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; gulong destroy_handler;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; gulong response_handler;</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113">remmina_protocol_widget_dialog_mt_setup</a>(d);</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a> = d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="keywordflow">if</span> (!gtk_widget_get_visible(GTK_WIDGET(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>)))</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; gtk_widget_show(GTK_WIDGET(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>));</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; response_handler = g_signal_connect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, <span class="stringliteral">&quot;response&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a122e28e59acb89200937ff823b82ddaf">run_response_handler</a>), &amp;mpri);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; unmap_handler = g_signal_connect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, <span class="stringliteral">&quot;unmap&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#ac9abaedb8cc35838ef1444423a81507d">run_unmap_handler</a>), &amp;mpri);</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; destroy_handler = g_signal_connect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a7b1e83afd68c2b7301fc4d6da6a8f6d8">run_destroy_handler</a>), &amp;mpri);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; g_object_ref(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>);</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; mpri.<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a> = g_main_loop_new(NULL, FALSE);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; g_main_loop_run(mpri.<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>);</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; g_main_loop_unref(mpri.<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keywordflow">if</span> (!mpri.<a class="code" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91">destroyed</a>) {</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; g_signal_handler_disconnect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, response_handler);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; g_signal_handler_disconnect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, destroy_handler);</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; g_signal_handler_disconnect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, unmap_handler);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; }</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; g_object_unref(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>);</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; rcbutton = mpri.<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a>;</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a> = TRUE;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="comment">// pthread_cleanup_push(ptcleanup, (void*)d);</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; pthread_cond_init(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>, NULL);</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; pthread_mutex_init(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>, NULL);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113">remmina_protocol_widget_dialog_mt_setup</a>, d);</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; pthread_mutex_lock(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; pthread_cond_wait(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>, &amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="comment">// pthread_cleanup_pop(0);</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; pthread_mutex_destroy(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; pthread_cond_destroy(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>);</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; rcbutton = d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; }</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a>);</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>);</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; g_free(d);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;}</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9092c29f585fdabaf0ce7e865670053b"> 1716</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#a9092c29f585fdabaf0ce7e865670053b">remmina_protocol_widget_panel_question_yesno</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;{</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>, gp, 0, msg, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;}</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;</div><div class="line"><a name="l01721"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aebc7c7d34c470081a52aa35d998ce868"> 1721</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486">RemminaMessagePanelFlags</a> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>,</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>, <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>, <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>, <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>, <span class="keyword">const</span> gchar *password_prompt)</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;{</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>, gp, pflags, title, default_username,</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; default_password, default_domain, password_prompt == NULL ? _(<span class="stringliteral">&quot;Password&quot;</span>) : password_prompt);</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;}</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;</div><div class="line"><a name="l01729"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ad637ec849c497e4a0d4c723396aa6fba"> 1729</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ad637ec849c497e4a0d4c723396aa6fba">remmina_protocol_widget_panel_authuserpwd_ssh_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, gboolean want_domain, gboolean allow_password_saving)</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;{</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keyword">const</span> gchar *<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>, *<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; pflags = <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a10be0730fc3ea326856019ae139a922a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME</a>;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile) != NULL &amp;&amp;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; !remminafile-&gt;prevent_saving &amp;&amp; allow_password_saving)</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; pflags |= <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; username = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>);</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; password = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>);</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>, gp, pflags, _(<span class="stringliteral">&quot;Type in SSH username and password.&quot;</span>), username,</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; password, NULL, _(<span class="stringliteral">&quot;Password&quot;</span>));</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;}</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;<span class="comment"> * gint remmina_protocol_widget_panel_authpwd(RemminaProtocolWidget* gp, RemminaAuthpwdType authpwd_type, gboolean allow_password_saving)</span></div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment"> * {</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="comment"> * TRACE_CALL(__func__);</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="comment"> * unsigned pflags;</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;<span class="comment"> * RemminaFile* remminafile = gp-&gt;priv-&gt;remmina_file;</span></div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;<span class="comment"> * char *password_prompt;</span></div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;<span class="comment"> * int rc;</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;<span class="comment"> * pflags = 0;</span></div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;<span class="comment"> * if (remmina_file_get_filename(remminafile) != NULL &amp;&amp;</span></div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;<span class="comment"> * !remminafile-&gt;prevent_saving &amp;&amp; allow_password_saving)</span></div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;<span class="comment"> * pflags |= REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD;</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;<span class="comment"> * switch (authpwd_type) {</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;<span class="comment"> * case REMMINA_AUTHPWD_TYPE_PROTOCOL:</span></div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;<span class="comment"> * password_prompt = g_strdup_printf(_(&quot;%s password&quot;), remmina_file_get_string(remminafile, &quot;protocol&quot;));</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="comment"> * case REMMINA_AUTHPWD_TYPE_SSH_PWD:</span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;<span class="comment"> * password_prompt = g_strdup(_(&quot;SSH password&quot;));</span></div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;<span class="comment"> * case REMMINA_AUTHPWD_TYPE_SSH_PRIVKEY:</span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;<span class="comment"> * password_prompt = g_strdup(_(&quot;SSH private key passphrase&quot;));</span></div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;<span class="comment"> * default:</span></div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="comment"> * password_prompt = g_strdup(_(&quot;Password&quot;));</span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;<span class="comment"> * rc = remmina_protocol_widget_dialog(RPWDT_AUTH, gp, pflags, password_prompt);</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="comment"> * g_free(password_prompt);</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="comment"> * return rc;</span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01783"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aa674c14f3a46dd5eb6b53d6f8ce6bd31"> 1783</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#aa674c14f3a46dd5eb6b53d6f8ce6bd31">remmina_protocol_widget_panel_authx509</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;{</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a>, gp, 0, NULL, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;}</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;</div><div class="line"><a name="l01791"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a262d75d6b535bd8c623e607805db4084"> 1791</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#a262d75d6b535bd8c623e607805db4084">remmina_protocol_widget_panel_new_certificate</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> gchar *subject, <span class="keyword">const</span> gchar *issuer, <span class="keyword">const</span> gchar *fingerprint)</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;{</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; gchar *s;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="keywordtype">int</span> rc;</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">&quot;trust_all&quot;</span>)) {</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; <span class="comment">/* For compatibility with plugin API: The plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; <a class="code" href="remmina__public_8c.html#a893f0cfe2d694ab700975f4f427ee2f6">remmina_public_send_notification</a>(<span class="stringliteral">&quot;remmina-security-trust-all-id&quot;</span>, _(<span class="stringliteral">&quot;Fingerprint automatically accepted&quot;</span>), fingerprint);</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; rc = GTK_RESPONSE_OK;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; <span class="keywordflow">return</span> rc;</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; }</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; <span class="comment">// For markup see https://developer.gnome.org/pygtk/stable/pango-markup-language.html</span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; s = g_strdup_printf(</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; <span class="stringliteral">&quot;&lt;big&gt;%s&lt;/big&gt;\n\n%s %s\n%s %s\n%s %s\n\n&lt;big&gt;%s&lt;/big&gt;&quot;</span>,</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to verify a new SSL certificate.</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; _(<span class="stringliteral">&quot;Certificate details:&quot;</span>),</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate subject is usually the remote server the user connect to.</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; _(<span class="stringliteral">&quot;Subject:&quot;</span>), subject,</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <span class="comment">// TRANSLATORS: The name or email of the entity that have issued the SSL certificate</span></div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; _(<span class="stringliteral">&quot;Issuer:&quot;</span>), issuer,</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate fingerprint, is a hash of a certificate calculated on all certificate&#39;s data and its signature.</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; _(<span class="stringliteral">&quot;Fingerprint:&quot;</span>), fingerprint,</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to accept or refuse a new SSL certificate.</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; _(<span class="stringliteral">&quot;Accept certificate?&quot;</span>));</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; rc = <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>, gp, 0, s, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; g_free(s);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; <span class="comment">/* For compatibility with plugin API: the plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <span class="keywordflow">return</span> rc == GTK_RESPONSE_YES ? GTK_RESPONSE_OK : rc;</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;}</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01823"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#acf75fd4bac28a3d53da064b2905f23c1"> 1823</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#acf75fd4bac28a3d53da064b2905f23c1">remmina_protocol_widget_panel_changed_certificate</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> gchar *subject, <span class="keyword">const</span> gchar *issuer, <span class="keyword">const</span> gchar *new_fingerprint, <span class="keyword">const</span> gchar *old_fingerprint)</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;{</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; gchar *s;</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; <span class="keywordtype">int</span> rc;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">&quot;trust_all&quot;</span>)) {</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; <span class="comment">/* For compatibility with plugin API: The plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <a class="code" href="remmina__public_8c.html#a893f0cfe2d694ab700975f4f427ee2f6">remmina_public_send_notification</a>(<span class="stringliteral">&quot;remmina-security-trust-all-id&quot;</span>, _(<span class="stringliteral">&quot;Fingerprint automatically accepted&quot;</span>), new_fingerprint);</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; rc = GTK_RESPONSE_OK;</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="keywordflow">return</span> rc;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; }</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <span class="comment">// For markup see https://developer.gnome.org/pygtk/stable/pango-markup-language.html</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; s = g_strdup_printf(</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <span class="stringliteral">&quot;&lt;big&gt;%s&lt;/big&gt;\n\n%s %s\n%s %s\n%s %s\n%s %s\n\n&lt;big&gt;%s&lt;/big&gt;&quot;</span>,</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to verify a new SSL certificate.</span></div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; _(<span class="stringliteral">&quot;The certificate changed! Details:&quot;</span>),</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate subject is usually the remote server the user connect to.</span></div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; _(<span class="stringliteral">&quot;Subject:&quot;</span>), subject,</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; <span class="comment">// TRANSLATORS: The name or email of the entity that have issued the SSL certificate</span></div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; _(<span class="stringliteral">&quot;Issuer:&quot;</span>), issuer,</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate fingerprint, is a hash of a certificate calculated on all certificate&#39;s data and its signature.</span></div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; _(<span class="stringliteral">&quot;Old fingerprint:&quot;</span>), old_fingerprint,</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate fingerprint, is a hash of a certificate calculated on all certificate&#39;s data and its signature.</span></div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; _(<span class="stringliteral">&quot;New fingerprint:&quot;</span>), new_fingerprint,</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to accept or refuse a new SSL certificate.</span></div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; _(<span class="stringliteral">&quot;Accept changed certificate?&quot;</span>));</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; rc = <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>, gp, 0, s, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; g_free(s);</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <span class="comment">/* For compatibility with plugin API: The plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="keywordflow">return</span> rc == GTK_RESPONSE_YES ? GTK_RESPONSE_OK : rc;</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;}</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;</div><div class="line"><a name="l01857"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a96159bd8e9d70c74967e666e2f188df0"> 1857</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a96159bd8e9d70c74967e666e2f188df0">remmina_protocol_widget_get_username</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;{</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; <span class="keywordflow">return</span> g_strdup(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>);</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;}</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;</div><div class="line"><a name="l01863"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a3fc52d61f77327534286f57e563e0923"> 1863</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;{</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; <span class="keywordflow">return</span> g_strdup(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>);</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;}</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;</div><div class="line"><a name="l01869"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a7c15fa81642c52ef382e1dbe34ffb6ac"> 1869</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a7c15fa81642c52ef382e1dbe34ffb6ac">remmina_protocol_widget_get_domain</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;{</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <span class="keywordflow">return</span> g_strdup(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a>);</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;}</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9ed3110b7b030bccd0ff9ed70e86da2d"> 1875</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;{</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a>;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;}</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;</div><div class="line"><a name="l01881"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9473da27fd10eb46ef8360f9ad4be86d"> 1881</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a9473da27fd10eb46ef8360f9ad4be86d">remmina_protocol_widget_get_cacert</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;{</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; gchar *s;</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>;</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;}</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;</div><div class="line"><a name="l01890"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a70aecb9af2ea35527e8d058d1d87a0d3"> 1890</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a70aecb9af2ea35527e8d058d1d87a0d3">remmina_protocol_widget_get_cacrl</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;{</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; gchar *s;</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>;</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;}</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;</div><div class="line"><a name="l01899"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab9632c73b32531b7bea976e10204670b"> 1899</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#ab9632c73b32531b7bea976e10204670b">remmina_protocol_widget_get_clientcert</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;{</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; gchar *s;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;}</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;</div><div class="line"><a name="l01908"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a08d312825fc0de9f9286279d99f763a1"> 1908</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a08d312825fc0de9f9286279d99f763a1">remmina_protocol_widget_get_clientkey</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;{</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; gchar *s;</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>;</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;}</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;</div><div class="line"><a name="l01917"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab863cc1442a992adfa323bc77ab88504"> 1917</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ab863cc1442a992adfa323bc77ab88504">remmina_protocol_widget_save_cred</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;{</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; gchar *s;</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; gboolean save = FALSE;</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_INIT_SAVE_CRED;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a00585ef650a083f1e8270cbdf05d437f">init_save_creds</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; g_free(d);</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; }</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <span class="comment">/* Save username and certificates if any; save the password if it’s requested to do so */</span></div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>, s);</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; save = TRUE;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; }</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>;</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;cacert&quot;</span>, s);</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; save = TRUE;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; }</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>;</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;cacrl&quot;</span>, s);</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; save = TRUE;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; }</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;clientcert&quot;</span>, s);</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; save = TRUE;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; }</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;clientkey&quot;</span>, s);</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; save = TRUE;</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; }</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a>) {</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>);</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; save = TRUE;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; }</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <span class="keywordflow">if</span> (save)</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(remminafile);</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;}</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;</div><div class="line"><a name="l01971"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a278e13b53a4fdb65498e00e908edb98d"> 1971</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a278e13b53a4fdb65498e00e908edb98d">remmina_protocol_widget_panel_show_listen</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, gint port)</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;{</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; gchar *s;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_PANELSHOWLISTEN;</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a2852b6a6de556164946570c4d7786ece">protocolwidget_panelshowlisten</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a2852b6a6de556164946570c4d7786ece">protocolwidget_panelshowlisten</a>.port = port;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; g_free(d);</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; }</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; s = g_strdup_printf(</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <span class="comment">// TRANSLATORS: “%i” is a placeholder for a port number. “%s” is a placeholder for a protocol name (VNC).</span></div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; _(<span class="stringliteral">&quot;Listening on port %i for an incoming %s connection…&quot;</span>), port,</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;protocol&quot;</span>));</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, s, NULL, NULL);</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; g_free(s);</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a> = mp;</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;}</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;</div><div class="line"><a name="l02000"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a7ed85f4ea19e0660dbf46f4f3dc4b895"> 2000</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a7ed85f4ea19e0660dbf46f4f3dc4b895">remmina_protocol_widget_panel_show_retry</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;{</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_MPSHOWRETRY;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af47270db94513116a8c0f7658848c4af">protocolwidget_mpshowretry</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; g_free(d);</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; }</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, _(<span class="stringliteral">&quot;Could not authenticate, attempting reconnection…&quot;</span>), NULL, NULL);</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a> = mp;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;}</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;</div><div class="line"><a name="l02022"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a843c2455a10c9382aee454515f9e7f8b"> 2022</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a843c2455a10c9382aee454515f9e7f8b">remmina_protocol_widget_panel_show</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;{</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; printf(<span class="stringliteral">&quot;Remmina: The %s function is not implemented, and is left here only for plugin API compatibility.\n&quot;</span>, __func__);</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;}</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;</div><div class="line"><a name="l02028"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a8ef0523afadadc9984d53fb02ecc01ad"> 2028</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a8ef0523afadadc9984d53fb02ecc01ad">remmina_protocol_widget_panel_hide</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;{</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; printf(<span class="stringliteral">&quot;Remmina: The %s function is not implemented, and is left here only for plugin API compatibility.\n&quot;</span>, __func__);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;}</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;</div><div class="line"><a name="l02034"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a04f0a11e50cdbd98ab80984fd5aca16d"> 2034</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a04f0a11e50cdbd98ab80984fd5aca16d">remmina_protocol_widget_chat_on_destroy</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;{</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a> = NULL;</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;}</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;</div><div class="line"><a name="l02040"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a66263e6e7da79357ceb80d32b191d9f2"> 2040</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a66263e6e7da79357ceb80d32b191d9f2">remmina_protocol_widget_chat_open</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> gchar *name,</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <span class="keywordtype">void</span> (*on_send)(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *text), <span class="keywordtype">void</span> (*on_destroy)(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp))</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;{</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>) {</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; gtk_window_present(GTK_WINDOW(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>));</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a> = <a class="code" href="remmina__chat__window_8c.html#a5e4fa655fddf361fed13bbd759bea24f">remmina_chat_window_new</a>(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(gp))), name);</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; g_signal_connect_swapped(G_OBJECT(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), <span class="stringliteral">&quot;send&quot;</span>, G_CALLBACK(on_send), gp);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; g_signal_connect_swapped(G_OBJECT(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), <span class="stringliteral">&quot;destroy&quot;</span>,</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a04f0a11e50cdbd98ab80984fd5aca16d">remmina_protocol_widget_chat_on_destroy</a>), gp);</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; g_signal_connect_swapped(G_OBJECT(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(on_destroy), gp);</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; gtk_widget_show(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; }</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;}</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;</div><div class="line"><a name="l02056"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a4a3a9ba7422fc302b0b412ac771c9953"> 2056</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a4a3a9ba7422fc302b0b412ac771c9953">remmina_protocol_widget_chat_close</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;{</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>)</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; gtk_widget_destroy(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>);</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;}</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;</div><div class="line"><a name="l02063"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ae2522242b3f39ee84ee8cf75170de0c0"> 2063</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ae2522242b3f39ee84ee8cf75170de0c0">remmina_protocol_widget_chat_receive</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *text)</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;{</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; <span class="comment">/* This function can be called from a non main thread */</span></div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>) {</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_CHAT_RECEIVE;</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a6a00bf7132ed6d4923bd239acb073ace">chat_receive</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a6a00bf7132ed6d4923bd239acb073ace">chat_receive</a>.text = text;</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; g_free(d);</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; }</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; <a class="code" href="remmina__chat__window_8c.html#a45724aed5474dd741563ffbf89237022">remmina_chat_window_receive</a>(REMMINA_CHAT_WINDOW(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), _(<span class="stringliteral">&quot;Server&quot;</span>), text);</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; gtk_window_present(GTK_WINDOW(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>));</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; }</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;}</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;</div><div class="line"><a name="l02085"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ac705ffa194e3c3457e9a0a1bd6c79be8"> 2085</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ac705ffa194e3c3457e9a0a1bd6c79be8">remmina_protocol_widget_setup</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <a class="code" href="struct___remmina_connection_object.html">RemminaConnectionObject</a> *cnnobj)</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;{</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a> = remminafile;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a> = cnnobj;</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="comment">/* Locate the protocol plugin */</span></div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;protocol&quot;</span>));</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <span class="keywordflow">if</span> (!plugin || !plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a3d9e2f2eb2594411e6fe63cde443dfb2">init</a> || !plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad2e965f3997d21a1e08d365c74e615bd">open_connection</a>) {</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for a protocol name, like “RDP”.</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, _(<span class="stringliteral">&quot;Install the %s protocol plugin first.&quot;</span>),</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;protocol&quot;</span>));</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a> = NULL;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; }</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aa7b9f54b6bb8bb01c24a8740b9c3633c">plugin</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;scale&quot;</span>, FALSE);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;scaler_expand&quot;</span>, FALSE);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;}</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;</div><div class="line"><a name="l02110"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a8127b4cc7c278216dff87a7e4a336dfb"> 2110</a></span>&#160;GtkWindow *<a class="code" href="remmina__protocol__widget_8c.html#a8127b4cc7c278216dff87a7e4a336dfb">remmina_protocol_widget_get_gtkwindow</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;{</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="rcw_8c.html#affd4a8e1c05f88299990bb0f3d5d1b9d">rcw_get_gtkwindow</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>);</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;}</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;</div><div class="line"><a name="l02115"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2067c19b160eb43bddda6c6c6e8d6045"> 2115</a></span>&#160;GtkWidget *<a class="code" href="remmina__protocol__widget_8c.html#a2067c19b160eb43bddda6c6c6e8d6045">remmina_protocol_widget_gtkviewport</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;{</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; <span class="keywordflow">return</span> <a class="code" href="rcw_8c.html#a96f1d274dafe5e4953da52beb75f7d14">rcw_get_gtkviewport</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>);</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;}</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;</div><div class="line"><a name="l02120"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a5c2137462d3168e90c812f1ce75a6e62"> 2120</a></span>&#160;GtkWidget *<a class="code" href="remmina__protocol__widget_8c.html#a5c2137462d3168e90c812f1ce75a6e62">remmina_protocol_widget_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;{</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <span class="keywordflow">return</span> GTK_WIDGET(g_object_new(REMMINA_TYPE_PROTOCOL_WIDGET, NULL));</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;}</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;<span class="comment">/* Send one or more keystrokes to a specific widget by firing key-press and</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="comment"> * key-release events.</span></div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="comment"> * GdkEventType action can be GDK_KEY_PRESS or GDK_KEY_RELEASE or both to</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<span class="comment"> * press the keys and release them in reversed order. */</span></div><div class="line"><a name="l02129"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9bcd0d356c7215dc0f791c9744360705"> 2129</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a9bcd0d356c7215dc0f791c9744360705">remmina_protocol_widget_send_keys_signals</a>(GtkWidget *widget, <span class="keyword">const</span> guint *keyvals, <span class="keywordtype">int</span> keyvals_length, GdkEventType action)</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;{</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; GdkEventKey event;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; gboolean result;</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; <span class="keyword">event</span>.window = gtk_widget_get_window(widget);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; <span class="keyword">event</span>.send_event = TRUE;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; <span class="keyword">event</span>.time = GDK_CURRENT_TIME;</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; <span class="keyword">event</span>.state = 0;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; <span class="keyword">event</span>.length = 0;</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; <span class="keyword">event</span>.string = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; <span class="keyword">event</span>.group = 0;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; <span class="keywordflow">if</span> (action &amp; GDK_KEY_PRESS) {</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; <span class="comment">/* Press the requested buttons */</span></div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; <span class="keyword">event</span>.type = GDK_KEY_PRESS;</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; keyvals_length; i++) {</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; <span class="keyword">event</span>.keyval = keyvals[i];</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; <span class="keyword">event</span>.hardware_keycode = <a class="code" href="remmina__public_8c.html#a95f1d68c7ab3e2a6b158db45f63538fb">remmina_public_get_keycode_for_keyval</a>(keymap, event.keyval);</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; <span class="keyword">event</span>.is_modifier = (int)<a class="code" href="remmina__public_8c.html#a1fac51670815da6a72700a10866c179a">remmina_public_get_modifier_for_keycode</a>(keymap, event.hardware_keycode);</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Sending keyval: %u, hardware_keycode: %u&quot;</span>, event.keyval, event.hardware_keycode);</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; g_signal_emit_by_name(G_OBJECT(widget), <span class="stringliteral">&quot;key-press-event&quot;</span>, &amp;event, &amp;result);</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; }</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; }</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; <span class="keywordflow">if</span> (action &amp; GDK_KEY_RELEASE) {</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; <span class="comment">/* Release the requested buttons in reverse order */</span></div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; <span class="keyword">event</span>.type = GDK_KEY_RELEASE;</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; <span class="keywordflow">for</span> (i = (keyvals_length - 1); i &gt;= 0; i--) {</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; <span class="keyword">event</span>.keyval = keyvals[i];</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; <span class="keyword">event</span>.hardware_keycode = <a class="code" href="remmina__public_8c.html#a95f1d68c7ab3e2a6b158db45f63538fb">remmina_public_get_keycode_for_keyval</a>(keymap, event.keyval);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; <span class="keyword">event</span>.is_modifier = (int)<a class="code" href="remmina__public_8c.html#a1fac51670815da6a72700a10866c179a">remmina_public_get_modifier_for_keycode</a>(keymap, event.hardware_keycode);</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; g_signal_emit_by_name(G_OBJECT(widget), <span class="stringliteral">&quot;key-release-event&quot;</span>, &amp;event, &amp;result);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; }</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; }</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;}</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a14684e3222e6afb1b43d77634a174767"> 2169</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a14684e3222e6afb1b43d77634a174767">remmina_protocol_widget_update_remote_resolution</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;{</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; GdkRectangle rect;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; gint w, h;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; gint wfile, hfile;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78a">RemminaProtocolWidgetResolutionMode</a> res_mode;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <a class="code" href="rcw_8c.html#aee06df544a91184cba1fe77c6991065a">rco_get_monitor_geometry</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, &amp;rect);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160; <span class="comment">/* Integrity check: check that we have a cnnwin visible and get t */</span></div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; res_mode = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;resolution_mode&quot;</span>, <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>);</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; scalemode = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;scale&quot;</span>, <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE</a>);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; wfile = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;resolution_width&quot;</span>, -1);</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; hfile = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;resolution_height&quot;</span>, -1);</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; <span class="comment">/* If resolution_mode is non-existent (-1), then we try to calculate it</span></div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;<span class="comment"> * as we did before having resolution_mode */</span></div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>) {</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; <span class="keywordflow">if</span> (wfile &lt;= 0 || hfile &lt;= 0)</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; }</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a> || scalemode == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES</a>) {</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; <span class="comment">/* Use internal window size as remote desktop size */</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; GtkAllocation al;</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; gtk_widget_get_allocation(GTK_WIDGET(gp), &amp;al);</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; <span class="comment">/* use a multiple of four to mitigate scaling when remote host rounds up */</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; w = al.width - al.width % 4;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; h = al.height - al.height % 4;</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; <span class="keywordflow">if</span> (w &lt; 10) {</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; printf(<span class="stringliteral">&quot;Remmina warning: %s RemminaProtocolWidget w=%d h=%d are too small, adjusting to 640x480\n&quot;</span>, __func__, w, h);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; w = 640;</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; h = 480;</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; }</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; <span class="comment">/* Due to approximations while GTK calculates scaling, (w x h) may exceed our monitor geometry</span></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;<span class="comment"> * Adjust to fit. */</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; <span class="keywordflow">if</span> (w &gt; rect.width)</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; w = rect.width;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; <span class="keywordflow">if</span> (h &gt; rect.height)</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; h = rect.height;</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d">RES_USE_CLIENT</a>) {</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; w = rect.width;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160; h = rect.height;</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; w = wfile;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; h = hfile;</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; }</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10">profile_remote_width</a> = w;</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca">profile_remote_height</a> = h;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;}</div><div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00110">remmina_ssh.h:110</a></div></div>
+<a href="remmina__protocol__widget_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) 2009-2011 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-2023 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 &quot;config.h&quot;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;gtk/gtk.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;gtk/gtkx.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &lt;glib/gi18n.h&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &lt;gmodule.h&gt;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</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="preprocessor">#include &quot;<a class="code" href="remmina__chat__window_8h.html">remmina_chat_window.h</a>&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a>&quot;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ext__exec_8h.html">remmina_ext_exec.h</a>&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>&quot;</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>&quot;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__protocol__widget_8h.html">remmina_protocol_widget.h</a>&quot;</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__public_8h.html">remmina_public.h</a>&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ssh_8h.html">remmina_ssh.h</a>&quot;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__log_8h.html">remmina_log.h</a>&quot;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>&quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#ifdef GDK_WINDOWING_WAYLAND</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;gdk/gdkwayland.h&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html"> 60</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct___remmina_protocol_widget_priv.html">_RemminaProtocolWidgetPriv</a> {</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec"> 61</a></span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * <a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0"> 62</a></span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> * <a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d"> 63</a></span>&#160; <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93"> 65</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380"> 66</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533"> 67</a></span>&#160; <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c"> 68</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d"> 70</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4"> 71</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642"> 72</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">/* ssh_tunnels is an array of RemminaSSHTunnel*</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> * the 1st one is the &quot;main&quot; tunnel, other tunnels are used for example in sftp commands */</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116"> 75</a></span>&#160; GPtrArray * <a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211"> 76</a></span>&#160; <a class="code" href="types_8h.html#a1ace68e95e55a30fcf8b991f52332501">RemminaTunnelInitFunc</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>;</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="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e"> 78</a></span>&#160; GtkWidget * <a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6"> 80</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326"> 82</a></span>&#160; <a class="code" href="remmina__protocol__widget_8h.html#ab89fba118812616a3e47504cfe4f3390">RemminaHostkeyFunc</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10"> 84</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10">profile_remote_width</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca"> 85</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca">profile_remote_height</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46"> 86</a></span>&#160; gint <a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483"> 88</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640"> 89</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a>;</div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b"> 90</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4"> 91</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a>;</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"> 93</span>&#160; <span class="comment">/* Data saved from the last message_panel when the user confirm */</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885"> 94</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7"> 95</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f"> 96</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791"> 97</a></span>&#160; gboolean <a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e"> 99</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4"> 100</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05"> 101</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0"> 102</a></span>&#160; gchar * <a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;};</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373"> 105</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373">panel_type</a> {</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c"> 106</a></span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>,</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65"> 107</a></span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>,</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed"> 108</a></span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;};</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a247c73c70d9c58427022a4dbcd638d32"> 111</a></span>&#160;<a class="code" href="remmina__protocol__widget_8c.html#a247c73c70d9c58427022a4dbcd638d32">G_DEFINE_TYPE</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a>, remmina_protocol_widget, GTK_TYPE_EVENT_BOX)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">enum</span> {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; CONNECT_SIGNAL,</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; DISCONNECT_SIGNAL,</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; DESKTOP_RESIZE_SIGNAL,</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; UPDATE_ALIGN_SIGNAL,</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; LOCK_DYNRES_SIGNAL,</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; UNLOCK_DYNRES_SIGNAL,</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="rcw_8c.html#adf764cbdea00d65edcd07bb9953ad2b7a0c34d85df8279641afad9e3c9b3a54ce">LAST_SIGNAL</a></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;};</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_signal_data.html"> 123</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct___remmina_protocol_widget_signal_data.html">_RemminaProtocolWidgetSignalData</a> {</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_signal_data.html#a7a8b9ad6fdff86250a5eef649693d64a"> 124</a></span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> * <a class="code" href="struct___remmina_protocol_widget_signal_data.html#a7a8b9ad6fdff86250a5eef649693d64a">gp</a>;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="struct___remmina_protocol_widget_signal_data.html#a2dfdc85f32d5eeed1d183088ac2a4ada"> 125</a></span>&#160; <span class="keyword">const</span> gchar * <a class="code" href="struct___remmina_protocol_widget_signal_data.html#a2dfdc85f32d5eeed1d183088ac2a4ada">signal_name</a>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;} <a class="code" href="remmina__protocol__widget_8c.html#a91d88c61dd84299369fe3c79e19821b1">RemminaProtocolWidgetSignalData</a>;</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"><a class="line" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130"> 128</a></span>&#160;<span class="keyword">static</span> guint <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[<a class="code" href="rcw_8c.html#adf764cbdea00d65edcd07bb9953ad2b7a0c34d85df8279641afad9e3c9b3a54ce">LAST_SIGNAL</a>] =</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{ 0 };</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"><a class="line" href="remmina__protocol__widget_8c.html#a8c125f58aa4fac0e4c88f293e4d4dd74"> 131</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a8c125f58aa4fac0e4c88f293e4d4dd74">remmina_protocol_widget_class_init</a>(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a> *klass)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[CONNECT_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;connect&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, connect), NULL, NULL,</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[DISCONNECT_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;disconnect&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, disconnect), NULL, NULL,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[DESKTOP_RESIZE_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;desktop-resize&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565">desktop_resize</a>), NULL, NULL,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[UPDATE_ALIGN_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;update-align&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a">update_align</a>), NULL, NULL,</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[LOCK_DYNRES_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;lock-dynres&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc">lock_dynres</a>), NULL, NULL,</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2c2a41aeee8f3ef6481378a95c02c130">remmina_protocol_widget_signals</a>[UNLOCK_DYNRES_SIGNAL] = g_signal_new(<span class="stringliteral">&quot;unlock-dynres&quot;</span>, G_TYPE_FROM_CLASS(klass),</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(<a class="code" href="struct___remmina_protocol_widget_class.html">RemminaProtocolWidgetClass</a>, <a class="code" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e">unlock_dynres</a>), NULL, NULL,</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</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;</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1"> 155</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1">remmina_protocol_widget_close_all_tunnels</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;{</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>) {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len; i++) {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>((<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[i]);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;LibSSH support turned off, no need to free SSH tunnel data&quot;</span>);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; g_ptr_array_set_size(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, 0);</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;}</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a7e54d9bb42d2d337527d3af657ef1e1f"> 173</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a7e54d9bb42d2d337527d3af657ef1e1f">remmina_protocol_widget_destroy</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gpointer data)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a> = NULL;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a> = NULL;</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; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a> = NULL;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a> = NULL;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a> = NULL;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a> = NULL;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a> = NULL;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a> = NULL;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a> = NULL;</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; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a> = NULL;</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; g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> = NULL;</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; <a class="code" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1">remmina_protocol_widget_close_all_tunnels</a>(gp);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>) {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; g_ptr_array_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, TRUE);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> = NULL;</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"> 216</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8h.html#a290eb68f0e86de1b7b82e2d98a1494d1"> 218</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a290eb68f0e86de1b7b82e2d98a1494d1">remmina_protocol_widget_grab_focus</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;{</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; GtkWidget *child;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; child = gtk_bin_get_child(GTK_BIN(gp));</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; <span class="keywordflow">if</span> (child) {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; gtk_widget_set_can_focus(child, TRUE);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; gtk_widget_grab_focus(child);</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"> 229</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8c.html#a0fcec40aae330e115d1bae66aeefb3df"> 231</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a0fcec40aae330e115d1bae66aeefb3df">remmina_protocol_widget_init</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="struct___remmina_protocol_widget_priv.html">RemminaProtocolWidgetPriv</a> *priv;</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; priv = g_new0(<a class="code" href="struct___remmina_protocol_widget_priv.html">RemminaProtocolWidgetPriv</a>, 1);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a> = priv;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> = FALSE;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a> = TRUE;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> = g_ptr_array_new();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; g_signal_connect(G_OBJECT(gp), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a7e54d9bb42d2d337527d3af657ef1e1f">remmina_protocol_widget_destroy</a>), NULL);</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"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a76ad91e7f8648699f71c466e203aa6dd"> 245</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a76ad91e7f8648699f71c466e203aa6dd">remmina_protocol_widget_open_connection_real</a>(gpointer data)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</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"> 250</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Opening connection&quot;</span>);</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; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; gint num_plugin;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; gint num_ssh;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a> = FALSE;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; plugin = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a3d9e2f2eb2594411e6fe63cde443dfb2">init</a>(gp);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">for</span> (num_plugin = 0, feature = (<a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *)plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>; feature &amp;&amp; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a>; num_plugin++, feature++) {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</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; num_ssh = 0;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE))</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; num_ssh += 2;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span> (num_plugin + num_ssh == 0) {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a> = NULL;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a> = g_new0(<a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a>, num_plugin + num_ssh + 1);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; feature = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>) {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; memcpy(feature, plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>, <span class="keyword">sizeof</span>(<a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a>) * num_plugin);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; feature += num_plugin;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Have SSH&quot;</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (num_ssh) {</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> = <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a>;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a> = REMMINA_PROTOCOL_FEATURE_TOOL_SSH;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aa7ac5ec9d95867734619583a2049e952">opt1</a> = _(<span class="stringliteral">&quot;Connect via SSH from a new terminal&quot;</span>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a4b8ffd6e32126a9c4d2074521279b12b">opt1_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aab44850c13a7e5e20a02603ae173d53d">opt2</a> = <span class="stringliteral">&quot;utilities-terminal&quot;</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a006b0d6d883c6dd0da6c444991973ac7">opt2_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#ab3c15094a16418c5951c5382c8a44190">opt3</a> = NULL;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a9abdee80580cddd54405d0577e459c2c">opt3_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288ab774d380798d305b72f4301143d3f440">REMMINA_TYPEHINT_UNDEFINED</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; feature++;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> = <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a> = REMMINA_PROTOCOL_FEATURE_TOOL_SFTP;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aa7ac5ec9d95867734619583a2049e952">opt1</a> = _(<span class="stringliteral">&quot;Open SFTP transfer…&quot;</span>);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a4b8ffd6e32126a9c4d2074521279b12b">opt1_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#aab44850c13a7e5e20a02603ae173d53d">opt2</a> = <span class="stringliteral">&quot;folder-remote&quot;</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a006b0d6d883c6dd0da6c444991973ac7">opt2_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288a0f7883d48c9106883a2b7c9c021ebdcd">REMMINA_TYPEHINT_STRING</a>;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#ab3c15094a16418c5951c5382c8a44190">opt3</a> = NULL;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a9abdee80580cddd54405d0577e459c2c">opt3_type_hint</a> = <a class="code" href="types_8h.html#ab0b29804e77812ca42752bf4f379a288ab774d380798d305b72f4301143d3f440">REMMINA_TYPEHINT_UNDEFINED</a>;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; feature++;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> = <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a311d2a8dae8d3d7b9045b4b704f94fe4">REMMINA_PROTOCOL_FEATURE_TYPE_END</a>;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="preprocessor">#endif</span></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;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span> (!plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad2e965f3997d21a1e08d365c74e615bd">open_connection</a>(gp))</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>(gp);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;}</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a4fb4c2252289e8e891376db6279ef8f5"> 311</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a4fb4c2252289e8e891376db6279ef8f5">cancel_open_connection_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;{</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)cbdata;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>(gp);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;}</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a6399c3828908e36ed6202b5599bd206b"> 318</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a6399c3828908e36ed6202b5599bd206b">remmina_protocol_widget_open_connection</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;{</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; gchar *s;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">/* Exec precommand before everything else */</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, _(<span class="stringliteral">&quot;Executing external commands…&quot;</span>), NULL, NULL);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="remmina__ext__exec_8c.html#a7c81795162a70d06294fdf935ea210d7">remmina_ext_exec_new</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;precommand&quot;</span>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; name = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;name&quot;</span>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for the connection profile name</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; s = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to “%s”…&quot;</span>), (name ? name : <span class="stringliteral">&quot;*&quot;</span>));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, s, <a class="code" href="remmina__protocol__widget_8c.html#a4fb4c2252289e8e891376db6279ef8f5">cancel_open_connection_cb</a>, gp);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; g_free(s);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a> = mp;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a76ad91e7f8648699f71c466e203aa6dd">remmina_protocol_widget_open_connection_real</a>(gp);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;}</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c"> 346</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c">conn_closed_real</a>(gpointer data, <span class="keywordtype">int</span> button){</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="preprocessor"> #ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="comment">/* This will close all tunnels */</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a11480396cb379860d16d9d41ef91ecb1">remmina_protocol_widget_close_all_tunnels</a>(gp);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">/* Exec postcommand */</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="remmina__ext__exec_8c.html#a7c81795162a70d06294fdf935ea210d7">remmina_ext_exec_new</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;postcommand&quot;</span>);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">/* Notify listeners (usually rcw) that the connection is closed */</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;disconnect&quot;</span>);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</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;</div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a69757e0c39fa9fcf31800f6375772016"> 362</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a69757e0c39fa9fcf31800f6375772016">conn_closed</a>(gpointer data)</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;{</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordtype">int</span> disconnect_prompt = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;disconnect-prompt&quot;</span>, FALSE);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> &amp;&amp; !gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a> &amp;&amp; disconnect_prompt){</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* msg = <span class="stringliteral">&quot;Plugin Disconnected&quot;</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a>){</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; msg = <a class="code" href="remmina__protocol__widget_8c.html#a508044024b303c286a0e643e44d85a29">remmina_protocol_widget_get_error_message</a>(gp);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, NULL);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> = FALSE;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; RemminaMessagePanel* mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ae01d27ae9f678dc5a4fa32f0b401f434">remmina_message_panel_setup_message</a>(mp, msg, (<a class="code" href="remmina__message__panel_8h.html#ae2923c94c1caf1ac4a7eb48361d2670a">RemminaMessagePanelCallback</a>)<a class="code" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c">conn_closed_real</a>, gp);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#aa905484fffd7eaa072b834db6ffb642c">conn_closed_real</a>(gp, 0);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</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;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a1cae52cad394f317c712eb4fd709d261"> 385</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a1cae52cad394f317c712eb4fd709d261">remmina_protocol_widget_signal_connection_closed</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;{</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">/* User told us that they closed the connection,</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment"> * or the connection was closed with a known error,</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment"> * add async event to main thread to complete our close tasks */</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a> = TRUE;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#a69757e0c39fa9fcf31800f6375772016">conn_closed</a>, (gpointer)gp);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8c.html#af4a20ef0ff8cc86feeba345498179e48"> 395</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#af4a20ef0ff8cc86feeba345498179e48">conn_opened</a>(gpointer data)</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>) {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">for</span> (guint i = 0; i &lt; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len; i++)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="remmina__ssh_8h.html#ae9f52b1a3a545acae8c93007e20ec909">remmina_ssh_tunnel_cancel_accept</a>((<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[i]);</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="preprocessor">#endif</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a>) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a>);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a> = NULL;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a>) {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a>);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a708ea5b5a9d1f5dcc5ab5bfb3d1a8483">connect_message_panel</a> = NULL;</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> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a>) {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a>);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a> = NULL;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;connect&quot;</span>);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</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;</div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a05b5edfc3d3d0dcff1745d1d35aaca5c"> 422</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a05b5edfc3d3d0dcff1745d1d35aaca5c">remmina_protocol_widget_signal_connection_opened</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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; <span class="comment">/* Plugin told us that it opened the connection,</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="comment"> * add async event to main thread to complete our close tasks */</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#af4a20ef0ff8cc86feeba345498179e48">conn_opened</a>, (gpointer)gp);</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;</div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a"> 430</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a">update_align</a>(gpointer data)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;update-align&quot;</span>);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;}</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aa88afa1e3f04974974a8be324b0a930e"> 439</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aa88afa1e3f04974974a8be324b0a930e">remmina_protocol_widget_update_align</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#a8565f01f8b5a3f0ee4518bda5f923f9a">update_align</a>, (gpointer)gp);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;}</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc"> 446</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc">lock_dynres</a>(gpointer data)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;lock-dynres&quot;</span>);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;}</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;</div><div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e"> 455</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e">unlock_dynres</a>(gpointer data)</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;{</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;unlock-dynres&quot;</span>);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;}</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a36e01bda95825ee6b5f164f52af7c457"> 464</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a36e01bda95825ee6b5f164f52af7c457">remmina_protocol_widget_lock_dynres</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;{</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc">lock_dynres</a>, (gpointer)gp);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;}</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2551dd6f53480609596d2695040fba5d"> 471</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a2551dd6f53480609596d2695040fba5d">remmina_protocol_widget_unlock_dynres</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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; <span class="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e">unlock_dynres</a>, (gpointer)gp);</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"><a class="line" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565"> 478</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565">desktop_resize</a>(gpointer data)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)data;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;desktop-resize&quot;</span>);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">return</span> G_SOURCE_REMOVE;</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;</div><div class="line"><a name="l00487"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9acf045c5a3eec5b7f748678dee0d3ee"> 487</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a9acf045c5a3eec5b7f748678dee0d3ee">remmina_protocol_widget_desktop_resize</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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; <span class="comment">/* Called by the plugin to do updates on rcw */</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#aeaf728bb767c1bbdda6a0d8dc3553565">desktop_resize</a>, (gpointer)gp);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;}</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;</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"><a class="line" href="remmina__protocol__widget_8h.html#aa41324b7175c46bb42b978332db95d22"> 495</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;{</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">/* kindly ask the protocol plugin to close the connection.</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="comment"> * Nothing else is done here. */</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span> (!GTK_IS_WIDGET(gp))</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>) {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; gtk_widget_destroy(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a> = NULL;</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;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a>) {</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="comment">/* Connection is already closed by the plugin, but</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="comment"> * rcw is asking to close again (usually after an error panel)</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">/* Clear the current error, or &quot;disconnect&quot; signal func will reshow a panel */</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, NULL);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; g_signal_emit_by_name(G_OBJECT(gp), <span class="stringliteral">&quot;disconnect&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span>;</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; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8fc83f0db5c5d5d8fad8467d96e35642">user_disconnect</a> = TRUE;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">/* Ask the plugin to close, async.</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="comment"> * The plugin will emit a &quot;disconnect&quot; signal on gp to call our</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="comment"> * remmina_protocol_widget_on_disconnected() when done */</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad4b21147a7592bf689c9f761d9e4fdc2">close_connection</a>(gp);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">return</span>;</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="l00531"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a480f842fac65440c367bf3c3d87d2601"> 531</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a480f842fac65440c367bf3c3d87d2601">remmina_protocol_widget_plugin_receives_keystrokes</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;{</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a92bb5524267ad4fe682fc07f778500d7">send_keystrokes</a> ? TRUE : FALSE;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;}</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#affb2413c00f0681fe08f90523f7e1471"> 539</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#affb2413c00f0681fe08f90523f7e1471">remmina_protocol_widget_send_keystrokes</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, GtkMenuItem *widget)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;{</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; gchar *keystrokes = g_object_get_data(G_OBJECT(widget), <span class="stringliteral">&quot;keystrokes&quot;</span>);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; guint *keyvals;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; gint i;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; gunichar character;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; guint keyval;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; GdkKeymapKey *keys;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; gint n_keys;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="comment">/* Single keystroke replace */</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">typedef</span> <span class="keyword">struct </span>_KeystrokeReplace {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; gchar * search;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; gchar * replace;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; guint keyval;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; } KeystrokeReplace;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">/* Special characters to replace */</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; KeystrokeReplace keystrokes_replaces[] =</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; { <span class="stringliteral">&quot;\\n&quot;</span>, <span class="stringliteral">&quot;\n&quot;</span>, GDK_KEY_Return },</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; { <span class="stringliteral">&quot;\\t&quot;</span>, <span class="stringliteral">&quot;\t&quot;</span>, GDK_KEY_Tab },</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; { <span class="stringliteral">&quot;\\b&quot;</span>, <span class="stringliteral">&quot;\b&quot;</span>, GDK_KEY_BackSpace },</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; { <span class="stringliteral">&quot;\\e&quot;</span>, <span class="stringliteral">&quot;\e&quot;</span>, GDK_KEY_Escape },</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; { <span class="stringliteral">&quot;\\\\&quot;</span>, <span class="stringliteral">&quot;\\&quot;</span>, GDK_KEY_backslash },</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; { NULL, NULL, 0 }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; };</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="comment">/* Keystrokes can only be sent to plugins that accepts them */</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__protocol__widget_8c.html#a480f842fac65440c367bf3c3d87d2601">remmina_protocol_widget_plugin_receives_keystrokes</a>(gp)) {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">/* Replace special characters */</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">for</span> (i = 0; keystrokes_replaces[i].replace; i++) {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Keystrokes before replacement is \&#39;%s\&#39;&quot;</span>, keystrokes);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; keystrokes = g_strdup(<a class="code" href="remmina__public_8c.html#a8d7d9b3c8050545469b1af9a35b043a2">remmina_public_str_replace_in_place</a>(keystrokes,</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; keystrokes_replaces[i].search,</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; keystrokes_replaces[i].replace));</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Keystrokes after replacement is \&#39;%s\&#39;&quot;</span>, keystrokes);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; gchar *iter = g_strdup(keystrokes);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; keyvals = (guint *)g_malloc(strlen(keystrokes));</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">while</span> (TRUE) {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="comment">/* Process each character in the keystrokes */</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; character = g_utf8_get_char_validated(iter, -1);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (character == 0)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; keyval = gdk_unicode_to_keyval(character);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="comment">/* Replace all the special character with its keyval */</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">for</span> (i = 0; keystrokes_replaces[i].replace; i++) {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">if</span> (character == keystrokes_replaces[i].replace[0]) {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; keys = g_new0(GdkKeymapKey, 1);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; keyval = keystrokes_replaces[i].keyval;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="comment">/* A special character was generated, no keyval lookup needed */</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; character = 0;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="comment">/* Decode character if it’s not a special character */</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">if</span> (character) {</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">/* get keyval without modifications */</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">if</span> (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &amp;keys, &amp;n_keys)) {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; g_warning(<span class="stringliteral">&quot;keyval 0x%04x has no keycode!&quot;</span>, keyval);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">/* Add modifier keys */</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; n_keys = 0;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 1)</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; keyvals[n_keys++] = GDK_KEY_Shift_L;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 2)</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; keyvals[n_keys++] = GDK_KEY_Alt_R;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; keyvals[n_keys++] = keyval;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">/* Send keystroke to the plugin */</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a92bb5524267ad4fe682fc07f778500d7">send_keystrokes</a>(gp, keyvals, n_keys);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; g_free(keys);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">/* Process next character in the keystrokes */</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; g_free(keyvals);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; g_free(keystrokes);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;}</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a2f5270c5e5007a8e95f4d460c11b2a06"> 630</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a2f5270c5e5007a8e95f4d460c11b2a06">remmina_protocol_widget_send_clip_strokes</a>(GtkClipboard *clipboard, <span class="keyword">const</span> gchar *clip_text, gpointer data)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;{</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; gchar *text = g_utf8_normalize(clip_text, -1, G_NORMALIZE_DEFAULT_COMPOSE);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; guint *keyvals;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; gint i;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; gunichar character;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; guint keyval;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; GdkKeymapKey *keys;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; gint n_keys;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="comment">/* Single keystroke replace */</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">typedef</span> <span class="keyword">struct </span>_KeystrokeReplace {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; gchar * search;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; gchar * replace;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; guint keyval;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; } KeystrokeReplace;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="comment">/* Special characters to replace */</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; KeystrokeReplace text_replaces[] =</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; { <span class="stringliteral">&quot;\\n&quot;</span>, <span class="stringliteral">&quot;\n&quot;</span>, GDK_KEY_Return },</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; { <span class="stringliteral">&quot;\\t&quot;</span>, <span class="stringliteral">&quot;\t&quot;</span>, GDK_KEY_Tab },</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; { <span class="stringliteral">&quot;\\b&quot;</span>, <span class="stringliteral">&quot;\b&quot;</span>, GDK_KEY_BackSpace },</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; { <span class="stringliteral">&quot;\\e&quot;</span>, <span class="stringliteral">&quot;\e&quot;</span>, GDK_KEY_Escape },</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; { <span class="stringliteral">&quot;\\\\&quot;</span>, <span class="stringliteral">&quot;\\&quot;</span>, GDK_KEY_backslash },</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; { NULL, NULL, 0 }</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;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__protocol__widget_8c.html#a480f842fac65440c367bf3c3d87d2601">remmina_protocol_widget_plugin_receives_keystrokes</a>(gp)) {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (text) {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="comment">/* Replace special characters */</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">for</span> (i = 0; text_replaces[i].replace; i++) {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Text clipboard before replacement is \&#39;%s\&#39;&quot;</span>, text);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; text = g_strdup(<a class="code" href="remmina__public_8c.html#a8d7d9b3c8050545469b1af9a35b043a2">remmina_public_str_replace_in_place</a>(text,</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; text_replaces[i].search,</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; text_replaces[i].replace));</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Text clipboard after replacement is \&#39;%s\&#39;&quot;</span>, text);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; gchar *iter = g_strdup(text);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Iter: %s&quot;</span>, iter),</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; keyvals = (guint *)g_malloc(strlen(text));</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">while</span> (TRUE) {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="comment">/* Process each character in the keystrokes */</span></div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; character = g_utf8_get_char_validated(iter, -1);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Char: U+%04&quot;</span> G_GINT32_FORMAT<span class="stringliteral">&quot;X&quot;</span>, character);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (character == 0)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; keyval = gdk_unicode_to_keyval(character);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Keyval: %u&quot;</span>, keyval);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">/* Replace all the special character with its keyval */</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">for</span> (i = 0; text_replaces[i].replace; i++) {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (character == text_replaces[i].replace[0]) {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; keys = g_new0(GdkKeymapKey, 1);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; keyval = text_replaces[i].keyval;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Special Keyval: %u&quot;</span>, keyval);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">/* A special character was generated, no keyval lookup needed */</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; character = 0;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">break</span>;</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; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">/* Decode character if it’s not a special character */</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span> (character) {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">/* get keyval without modifications */</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">if</span> (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &amp;keys, &amp;n_keys)) {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;keyval 0x%04x has no keycode!&quot;</span>, keyval);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">/* Add modifier keys */</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; n_keys = 0;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 1)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; keyvals[n_keys++] = GDK_KEY_Shift_L;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (keys-&gt;level &amp; 2)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; keyvals[n_keys++] = GDK_KEY_Alt_R;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="comment"> * @fixme heap buffer overflow</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="comment"> * In some cases, for example sending \t as the only sequence</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="comment"> * may lead to a buffer overflow</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; keyvals[n_keys++] = keyval;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="comment">/* Send keystroke to the plugin */</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a92bb5524267ad4fe682fc07f778500d7">send_keystrokes</a>(gp, keyvals, n_keys);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; g_free(keys);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="comment">/* Process next character in the keystrokes */</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; iter = g_utf8_find_next_char(iter, NULL);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; g_free(keyvals);</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"> 721</span>&#160; g_free(text);</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; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8h.html#ae9b1b1b9fbce0de9b0bbb678c0bf9403"> 726</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ae9b1b1b9fbce0de9b0bbb678c0bf9403">remmina_protocol_widget_send_clipboard</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, GObject*widget)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;{</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; GtkClipboard *clipboard;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="comment">/* Request the contents of the clipboard, contents_received will be</span></div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;<span class="comment"> * called when we do get the contents.</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; gtk_clipboard_request_text(clipboard,</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a2f5270c5e5007a8e95f4d460c11b2a06">remmina_protocol_widget_send_clip_strokes</a>, gp);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;}</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a57ac13fc4a2653c40e0601183628c0ca"> 740</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a57ac13fc4a2653c40e0601183628c0ca">remmina_protocol_widget_plugin_screenshot</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="struct___remmina_plugin_screenshot_data.html">RemminaPluginScreenshotData</a> *rpsd)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad4778e62aa78baace7d46fb1c4a475c4">get_plugin_screenshot</a>) {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;plugin screenshot function is not implemented, using core Remmina functionality&quot;</span>);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</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; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad4778e62aa78baace7d46fb1c4a475c4">get_plugin_screenshot</a>(gp, rpsd);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;}</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a1585ea6908dd5c0a9b0f47d409916435"> 751</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a1585ea6908dd5c0a9b0f47d409916435">remmina_protocol_widget_map_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</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"> 753</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ae0dc6952f8015848cf97950fcc7d9997">map_event</a>) {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Map plugin function not implemented&quot;</span>);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</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; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling plugin mapping function&quot;</span>);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ae0dc6952f8015848cf97950fcc7d9997">map_event</a>(gp);</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;</div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ac9da39853a32523057759a498bf6ac0a"> 763</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#ac9da39853a32523057759a498bf6ac0a">remmina_protocol_widget_unmap_event</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;{</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">if</span> (!gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#abfb8cc172b53c16c8099eba7ab3bbc57">unmap_event</a>) {</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Unmap plugin function not implemented&quot;</span>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling plugin unmapping function&quot;</span>);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#abfb8cc172b53c16c8099eba7ab3bbc57">unmap_event</a>(gp);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;}</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"><a class="line" href="remmina__protocol__widget_8h.html#ac3e5a7f14aef4adb2e57d35e9c180b3b"> 775</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ac3e5a7f14aef4adb2e57d35e9c180b3b">remmina_protocol_widget_emit_signal</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *signal_name)</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;{</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Emitting signals should be used from the object itself, not from another object&quot;</span>);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keyword">raise</span>(SIGINT);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_EMIT_SIGNAL;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a46c919e7c8529074e19f46cf1b545f97">protocolwidget_emit_signal</a>.signal_name = signal_name;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a46c919e7c8529074e19f46cf1b545f97">protocolwidget_emit_signal</a>.gp = gp;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; g_free(d);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">return</span>;</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; g_signal_emit_by_name(G_OBJECT(gp), signal_name);</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;}</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;</div><div class="line"><a name="l00796"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#af9b6a2c2665010ab09a6d9943f9850bd"> 796</a></span>&#160;<span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *<a class="code" href="remmina__protocol__widget_8c.html#af9b6a2c2665010ab09a6d9943f9850bd">remmina_protocol_widget_get_features</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;{</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aca49dce014d8471be0d3cfe29cc7a35d">features</a>;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;}</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;</div><div class="line"><a name="l00802"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#adbe15328275677cb38bd8c8a2d5e039d"> 802</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#adbe15328275677cb38bd8c8a2d5e039d">remmina_protocol_widget_query_feature_by_type</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5">RemminaProtocolFeatureType</a> type)</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;{</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a> &amp;&amp;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE))</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">for</span> (feature = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>; feature &amp;&amp; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a>; feature++)</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">if</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> == type)</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;}</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;</div><div class="line"><a name="l00819"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a4017a800d7803a40d606ffce2578509a"> 819</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a4017a800d7803a40d606ffce2578509a">remmina_protocol_widget_query_feature_by_ref</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;{</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#aa49520ac95b505c111abfb7f3b7c55de">query_feature</a>(gp, feature);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;}</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a6a630e96e5b914d60d678ae8eaad4cd9"> 825</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a6a630e96e5b914d60d678ae8eaad4cd9">remmina_protocol_widget_call_feature_by_type</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5">RemminaProtocolFeatureType</a> type, gint <span class="keywordtype">id</span>)</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;{</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature;</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">for</span> (feature = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">features</a>; feature &amp;&amp; feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a>; feature++) {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">if</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a1826baafd2d7b5dc8a009ef4fcad77e9">type</a> == type &amp;&amp; (<span class="keywordtype">id</span> == 0 || feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a> == <span class="keywordtype">id</span>)) {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a605b69a9aa4393024369cc5070488692">remmina_protocol_widget_call_feature_by_ref</a>(gp, feature);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keywordflow">break</span>;</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"><a class="line" href="remmina__protocol__widget_8h.html#a605b69a9aa4393024369cc5070488692"> 838</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a605b69a9aa4393024369cc5070488692">remmina_protocol_widget_call_feature_by_ref</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_feature.html">RemminaProtocolFeature</a> *feature)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;{</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">switch</span> (feature-&gt;<a class="code" href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">id</a>) {</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">case</span> REMMINA_PROTOCOL_FEATURE_TOOL_SSH:</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &gt; 0) {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <a class="code" href="rcw_8c.html#ad3c2fe67b137c757bd21b79ad5dcc5ff">rcw_open_from_file_full</a>(</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <a class="code" href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;SSH&quot;</span>), NULL,</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0], NULL);</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; }</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">case</span> REMMINA_PROTOCOL_FEATURE_TOOL_SFTP:</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a> &amp;&amp; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &gt; 0) {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <a class="code" href="rcw_8c.html#ad3c2fe67b137c757bd21b79ad5dcc5ff">rcw_open_from_file_full</a>(</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <a class="code" href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;SFTP&quot;</span>), NULL,</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0], NULL);</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">return</span>;</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">break</span>;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; }</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a4908abc6c70c59c42e2757aecaa25cf1">call_feature</a>(gp, feature);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;}</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a1caaa7bea6ef53e5c7e8109f3d0814e1"> 867</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a1caaa7bea6ef53e5c7e8109f3d0814e1">remmina_protocol_widget_on_key_press</a>(GtkWidget *widget, GdkEventKey *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;{</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>)</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>(gp, event-&gt;keyval, FALSE);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">return</span> FALSE;</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"><a class="line" href="remmina__protocol__widget_8c.html#ac1f95eb1e31c05ae0bc4027496ceafb0"> 875</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#ac1f95eb1e31c05ae0bc4027496ceafb0">remmina_protocol_widget_on_key_release</a>(GtkWidget *widget, GdkEventKey *event, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;{</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>)</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a>(gp, event-&gt;keyval, TRUE);</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"> 881</span>&#160; <span class="keywordflow">return</span> FALSE;</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;</div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a13e14fa81f7ca52942415a7caf5b932c"> 884</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a13e14fa81f7ca52942415a7caf5b932c">remmina_protocol_widget_register_hostkey</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, GtkWidget *widget)</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;key-press-event&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a1caaa7bea6ef53e5c7e8109f3d0814e1">remmina_protocol_widget_on_key_press</a>), gp);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; g_signal_connect(G_OBJECT(widget), <span class="stringliteral">&quot;key-release-event&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#ac1f95eb1e31c05ae0bc4027496ceafb0">remmina_protocol_widget_on_key_release</a>), gp);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;}</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;</div><div class="line"><a name="l00891"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a5aaadd752a3275a0a8e0018a3dd669f8"> 891</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a5aaadd752a3275a0a8e0018a3dd669f8">remmina_protocol_widget_set_hostkey_func</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="remmina__protocol__widget_8h.html#ab89fba118812616a3e47504cfe4f3390">RemminaHostkeyFunc</a> func)</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;{</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac613cf4b362b9dfc25e66f9d265e9326">hostkey_func</a> = func;</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;}</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a78b123eca6709bceeacda7d791a94bf1"> 897</a></span>&#160;RemminaMessagePanel *<a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(<a class="code" href="struct___remmina_connection_object.html">RemminaConnectionObject</a> *cnnobj, <span class="keyword">const</span> gchar *msg, <a class="code" href="remmina__message__panel_8h.html#ae2923c94c1caf1ac4a7eb48361d2670a">RemminaMessagePanelCallback</a> response_callback, gpointer response_callback_data)</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; RemminaMessagePanel *mp;</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="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_MPPROGRESS;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.cnnobj = cnnobj;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.message = msg;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.response_callback = response_callback;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.response_callback_data = response_callback_data;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; mp = d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.ret_mp;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; g_free(d);</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">return</span> mp;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; }</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, msg, response_callback, response_callback_data);</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(cnnobj, mp);</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordflow">return</span> mp;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;}</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;</div><div class="line"><a name="l00922"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a97cba8208a4348446159bf465b3233f5"> 922</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(<a class="code" href="struct___remmina_connection_object.html">RemminaConnectionObject</a> *cnnobj, RemminaMessagePanel *mp)</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; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_MPDESTROY;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a75007c472a404959a00cdebd8efc951a">protocolwidget_mpdestroy</a>.cnnobj = cnnobj;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a75007c472a404959a00cdebd8efc951a">protocolwidget_mpdestroy</a>.mp = mp;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; g_free(d);</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">return</span>;</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; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(cnnobj, mp);</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;}</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00939"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a99ba55ddcb17c9e87ca233fa83787227"> 939</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a99ba55ddcb17c9e87ca233fa83787227">cancel_init_tunnel_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;{</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling an opening tunnel is not implemented\n&quot;</span>);</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;}</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;</div><div class="line"><a name="l00944"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3"> 944</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *<a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;{</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; gint ret;</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; gchar *msg;</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; gboolean partial = FALSE;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; gboolean cont = FALSE;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; tunnel = <a class="code" href="remmina__ssh_8h.html#abf04fd329ab77bbd4f6aa1cb1eaa349d">remmina_ssh_tunnel_new_from_file</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Creating SSH tunnel to “%s” via SSH…&quot;</span>, REMMINA_SSH(tunnel)-&gt;server);</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for an hostname or an IP address.</span></div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to “%s” via SSH…&quot;</span>), REMMINA_SSH(tunnel)-&gt;server);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#a99ba55ddcb17c9e87ca233fa83787227">cancel_init_tunnel_cb</a>, NULL);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; g_free(msg);</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">while</span> (1) {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">if</span> (!partial) {</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#a624b8ac30ddcd00ebda0b51d504f5a33">remmina_ssh_init_session</a>(REMMINA_SSH(tunnel))) {</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH Tunnel init session error: %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="comment">// exit the loop here: OK</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; }</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;</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; ret = <a class="code" href="remmina__ssh_8h.html#acf69725720378340e1a51c87e7638a7f">remmina_ssh_auth_gui</a>(REMMINA_SSH(tunnel), gp, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Tunnel auth returned %d&quot;</span>, ret);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>:</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication success&quot;</span>);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>:</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Continue with the next auth method&quot;</span>);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; partial = TRUE;</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="comment">// Continue the loop: OK</span></div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ad56c3878c4a651b51fdb3d0e8b9cebd7">REMMINA_SSH_AUTH_RECONNECT</a>:</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Reconnecting…&quot;</span>);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">if</span> (REMMINA_SSH(tunnel)-&gt;session) {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; ssh_disconnect(REMMINA_SSH(tunnel)-&gt;session);</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; ssh_free(REMMINA_SSH(tunnel)-&gt;session);</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; REMMINA_SSH(tunnel)-&gt;session = NULL;</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; g_free(REMMINA_SSH(tunnel)-&gt;callback);</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="comment">// Continue the loop: OK</span></div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>:</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Interrupted by the user&quot;</span>);</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="comment">// exit the loop here: OK</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <span class="keywordflow">goto</span> BREAK;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Error during the authentication: %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="comment">// exit the loop here: OK</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">goto</span> BREAK;</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; }</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; cont = TRUE;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#a624b8ac30ddcd00ebda0b51d504f5a33">remmina_ssh_init_session</a>(REMMINA_SSH(tunnel))) {</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot init SSH session with tunnel struct&quot;</span>);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; }</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; ret = <a class="code" href="remmina__ssh_8h.html#acf69725720378340e1a51c87e7638a7f">remmina_ssh_auth_gui</a>(REMMINA_SSH(tunnel), gp, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Tunnel auth returned %d&quot;</span>, ret);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">if</span> (ret != <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>) {</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">if</span> (ret != <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>)</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; }</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;BREAK:</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keywordflow">if</span> (!cont) {</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; }</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">return</span> tunnel;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;}</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01048"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a0a93da80662ff18b93270ced59243ce3"> 1048</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a0a93da80662ff18b93270ced59243ce3">cancel_start_direct_tunnel_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;{</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling start_direct_tunnel is not implemented\n&quot;</span>);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;}</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;</div><div class="line"><a name="l01053"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aecd801fbe5399bbeb5832657bce193cb"> 1053</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aecd801fbe5399bbeb5832657bce193cb">remmina_protocol_widget_tunnel_destroy</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;{</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; guint idx = 0;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="preprocessor">#if GLIB_CHECK_VERSION(2, 54, 0)</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; gboolean found = g_ptr_array_find(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel, &amp;idx);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; gboolean found = FALSE;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len; i++) {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">if</span> ((<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[i] == tunnel) {</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; found = TRUE;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; idx = i;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; printf(<span class="stringliteral">&quot;Tunnel %s found at idx = %d\n&quot;</span>, found ? <span class="stringliteral">&quot;yes&quot;</span>: <span class="stringliteral">&quot;not&quot;</span>, idx);</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span> (found) {</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;[Tunnel with idx %u has been disconnected&quot;</span>, idx);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; g_ptr_array_remove(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; }</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;}</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;</div><div class="line"><a name="l01089"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9d55210413d6a313478f81cf76ecf1b7"> 1089</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a9d55210413d6a313478f81cf76ecf1b7">remmina_protocol_widget_start_direct_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint default_port, gboolean port_plus)</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;{</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="keyword">const</span> gchar *server;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keyword">const</span> gchar *ssh_tunnel_server;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; gchar *ssh_tunnel_host, *srv_host, *dest;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; gint srv_port, ssh_tunnel_port = 0;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH tunnel initialization…&quot;</span>);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; ssh_tunnel_server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (!server)</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keywordflow">return</span> g_strdup(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">if</span> (strstr(g_strdup(server), <span class="stringliteral">&quot;unix:///&quot;</span>) != NULL) {</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;%s is a UNIX socket&quot;</span>, server);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">return</span> g_strdup(server);</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, default_port, &amp;srv_host, &amp;srv_port);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port (tunnel)&quot;</span>);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(ssh_tunnel_server, 22, &amp;ssh_tunnel_host, &amp;ssh_tunnel_port);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server: %s, port: %d&quot;</span>, srv_host, srv_port);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">if</span> (port_plus &amp;&amp; srv_port &lt; 100)</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="comment">/* Protocols like VNC supports using instance number :0, :1, etc. as port number. */</span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; srv_port += default_port;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; gchar *msg;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE)) {</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; dest = g_strdup_printf(<span class="stringliteral">&quot;[%s]:%i&quot;</span>, srv_host, srv_port);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">return</span> dest;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; }</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; tunnel = <a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(gp);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">if</span> (!tunnel) {</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;remmina_protocol_widget_init_tunnel failed with error is %s&quot;</span>,</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a508044024b303c286a0e643e44d85a29">remmina_protocol_widget_get_error_message</a>(gp));</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for an hostname or an IP address.</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to “%s” via SSH…&quot;</span>), server);</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#a0a93da80662ff18b93270ced59243ce3">cancel_start_direct_tunnel_cb</a>, NULL);</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; g_free(msg);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_loopback&quot;</span>, FALSE)) {</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; ssh_tunnel_host = NULL;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; srv_host = g_strdup(<span class="stringliteral">&quot;127.0.0.1&quot;</span>);</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Starting tunnel to: %s, port: %d&quot;</span>, ssh_tunnel_host, ssh_tunnel_port);</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#a52b3f47eac79f2781ba81d61505f4f53">remmina_ssh_tunnel_open</a>(tunnel, srv_host, srv_port, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#af348bb968fd98ba269c4e253750e2400">sshtunnel_port</a>)) {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; }</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a1e1f1bfaec497b1365ea70ebe795d778">destroy_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#aecd801fbe5399bbeb5832657bce193cb">remmina_protocol_widget_tunnel_destroy</a>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a33ae9b7cd8cb3dcd85223017dfd13795">destroy_func_callback_data</a> = (gpointer)gp;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; g_ptr_array_add(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">return</span> g_strdup_printf(<span class="stringliteral">&quot;127.0.0.1:%i&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#af348bb968fd98ba269c4e253750e2400">sshtunnel_port</a>);</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; dest = g_strdup_printf(<span class="stringliteral">&quot;[%s]:%i&quot;</span>, srv_host, srv_port);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; g_free(srv_host);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; g_free(ssh_tunnel_host);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">return</span> dest;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;}</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01184"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aeffe07c6412286d99ba04f05fe74aeac"> 1184</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aeffe07c6412286d99ba04f05fe74aeac">cancel_start_reverse_tunnel_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;{</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling start_reverse_tunnel is not implemented\n&quot;</span>);</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;}</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aa6d9f2f558fcd9e7fe58eefcde1c3c5c"> 1191</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#aa6d9f2f558fcd9e7fe58eefcde1c3c5c">remmina_protocol_widget_start_reverse_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint local_port)</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;{</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; gchar *msg;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;ssh_tunnel_enabled&quot;</span>, FALSE))</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="keywordflow">if</span> (!(tunnel = <a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(gp)))</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="comment">// TRANSLATORS: “%i” is a placeholder for a TCP port number.</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Awaiting incoming SSH connection on port %i…&quot;</span>), <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;listenport&quot;</span>, 0));</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#aeffe07c6412286d99ba04f05fe74aeac">cancel_start_reverse_tunnel_cb</a>, NULL);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; g_free(msg);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#ae47c8270267b02b9c0ff5b36074101c2">remmina_ssh_tunnel_reverse</a>(tunnel, <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;listenport&quot;</span>, 0), local_port)) {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; }</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; g_ptr_array_add(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;}</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a12eddf3428a53201ee0a2ec422d2fa4a"> 1222</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a12eddf3428a53201ee0a2ec422d2fa4a">remmina_protocol_widget_ssh_exec</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gboolean wait, <span class="keyword">const</span> gchar *fmt, ...)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;{</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; ssh_channel channel;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; gint status;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; gboolean ret = FALSE;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; gchar *cmd, *ptr;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; va_list args;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &lt; 1)</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0];</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; if ((channel = ssh_channel_new(REMMINA_SSH(tunnel)-&gt;session)) == NULL)</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; va_start(args, fmt);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; cmd = g_strdup_vprintf(fmt, args);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; va_end(args);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">if</span> (ssh_channel_open_session(channel) == SSH_OK &amp;&amp;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; ssh_channel_request_exec(channel, cmd) == SSH_OK) {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keywordflow">if</span> (wait) {</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; status = ssh_channel_get_exit_status(channel);</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; ptr = strchr(cmd, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">if</span> (ptr) *ptr = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">switch</span> (status) {</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; ret = TRUE;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">case</span> 127:</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a place holder for a unix command path.</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel),</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; _(<span class="stringliteral">&quot;The “%s” command is not available on the SSH server.&quot;</span>), cmd);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a place holder for a unix command path. “%i” is a placeholder for an error code number.</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel),</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; _(<span class="stringliteral">&quot;Could not run the “%s” command on the SSH server (status = %i).&quot;</span>), cmd, status);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; }</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; ret = TRUE;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; }</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="comment">// TRANSLATORS: %s is a placeholder for an error message</span></div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not run command. %s&quot;</span>));</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; }</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; g_free(cmd);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">if</span> (wait)</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;}</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01288"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aeaa588b63800d3762b738fbbfd4a1736"> 1288</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aeaa588b63800d3762b738fbbfd4a1736">remmina_protocol_widget_xport_tunnel_init_callback</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;{</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; gchar *server;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; gint port;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; gboolean ret;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>), 177, &amp;server, &amp;port);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; ret = ((<a class="code" href="types_8h.html#afae2f546eaf9ef8a816a804e830055bf">RemminaXPortTunnelInitFunc</a>)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>)(gp,</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a>, (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> ? <span class="stringliteral">&quot;localhost&quot;</span> : server), port);</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; g_free(server);</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;}</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;</div><div class="line"><a name="l01305"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#adfac12e7a563dc06fb2f0c8307f40fee"> 1305</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#adfac12e7a563dc06fb2f0c8307f40fee">remmina_protocol_widget_xport_tunnel_connect_callback</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;{</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;}</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;</div><div class="line"><a name="l01311"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a450fbca7e27c952b6aaba6e33192051d"> 1311</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#a450fbca7e27c952b6aaba6e33192051d">remmina_protocol_widget_xport_tunnel_disconnect_callback</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gpointer data)</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;{</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = REMMINA_PROTOCOL_WIDGET(data);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="keywordflow">if</span> (REMMINA_SSH(tunnel)-&gt;error)</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, <span class="stringliteral">&quot;%s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; IDLE_ADD((GSourceFunc)<a class="code" href="remmina__protocol__widget_8c.html#aa41324b7175c46bb42b978332db95d22">remmina_protocol_widget_close_connection</a>, gp);</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;}</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01324"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a05f9694efc84de6273efa46d232b84f9"> 1324</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a05f9694efc84de6273efa46d232b84f9">cancel_connect_xport_cb</a>(<span class="keywordtype">void</span> *cbdata, <span class="keywordtype">int</span> btn)</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;{</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; printf(<span class="stringliteral">&quot;Remmina: Cancelling an XPort connection is not implemented\n&quot;</span>);</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;}</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01329"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a172fa9cf2ce196c9846a3e47ea9036b4"> 1329</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a172fa9cf2ce196c9846a3e47ea9036b4">remmina_protocol_widget_start_xport_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#afae2f546eaf9ef8a816a804e830055bf">RemminaXPortTunnelInitFunc</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>)</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;{</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; gboolean bindlocalhost;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; gchar *server;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; gchar *msg;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="keywordflow">if</span> (!(tunnel = <a class="code" href="remmina__protocol__widget_8c.html#a5567a5c55d9a880d174faabafcd15fa3">remmina_protocol_widget_init_tunnel</a>(gp))) <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for a hostname or IP address.</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; msg = g_strdup_printf(_(<span class="stringliteral">&quot;Connecting to %s via SSH…&quot;</span>), <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>));</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, msg, <a class="code" href="remmina__protocol__widget_8c.html#a05f9694efc84de6273efa46d232b84f9">cancel_connect_xport_cb</a>, NULL);</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; g_free(msg);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a41a28954660d2d3816630e2ef9bb4211">init_func</a>;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#aeaa588b63800d3762b738fbbfd4a1736">remmina_protocol_widget_xport_tunnel_init_callback</a>;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#adfac12e7a563dc06fb2f0c8307f40fee">remmina_protocol_widget_xport_tunnel_connect_callback</a>;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a> = <a class="code" href="remmina__protocol__widget_8c.html#a450fbca7e27c952b6aaba6e33192051d">remmina_protocol_widget_xport_tunnel_disconnect_callback</a>;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a> = gp;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;server&quot;</span>), 0, &amp;server, NULL);</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; bindlocalhost = (g_strcmp0(REMMINA_SSH(tunnel)-&gt;server, server) == 0);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; g_free(server);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__ssh_8h.html#aba49db2ced40e21e8adfad69dcfda2c4">remmina_ssh_tunnel_xport</a>(tunnel, bindlocalhost)) {</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, <span class="stringliteral">&quot;Could not open channel, %s&quot;</span>,</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; ssh_get_error(REMMINA_SSH(tunnel)-&gt;session));</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(tunnel);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; g_ptr_array_add(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>, tunnel);</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;}</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;</div><div class="line"><a name="l01374"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a15368afcbeb770f8cf25941bd49e7b54"> 1374</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a15368afcbeb770f8cf25941bd49e7b54">remmina_protocol_widget_set_display</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint display)</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;{</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;len &lt; 1)</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a277fd3954a4f89c6ddddd68f4ffb5116">ssh_tunnels</a>-&gt;pdata[0];</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; if (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>) g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>);</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a> = g_strdup_printf(<span class="stringliteral">&quot;unix:%i&quot;</span>, display);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;}</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab4c6435ef92e34a94270069ce1861907"> 1387</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ab4c6435ef92e34a94270069ce1861907">remmina_protocol_widget_get_profile_remote_width</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;{</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="comment">/* Returns the width of remote desktop as chosen by the user profile */</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10">profile_remote_width</a>;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;}</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#abdf99138612d02bc3921b0b77bdc89cb"> 1394</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#abdf99138612d02bc3921b0b77bdc89cb">remmina_protocol_widget_get_multimon</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;{</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="comment">/* Returns ehenever multi monitor is enabled (1) */</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;multimon&quot;</span>, -1);</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Multi monitor is set to %d&quot;</span>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a>);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ac45744265fe3f8aa36b650faa9991b46">multimon</a>;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;}</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div><div class="line"><a name="l01403"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ad8df6a87e19b7751b26820ef4a668de9"> 1403</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ad8df6a87e19b7751b26820ef4a668de9">remmina_protocol_widget_get_profile_remote_height</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;{</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="comment">/* Returns the height of remote desktop as chosen by the user profile */</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca">profile_remote_height</a>;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;}</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab224a0f643d291f86ede54e373bd0a6f"> 1410</a></span>&#160;<span class="keyword">const</span> gchar* <a class="code" href="remmina__protocol__widget_8c.html#ab224a0f643d291f86ede54e373bd0a6f">remmina_protocol_widget_get_name</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;{</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="keywordflow">return</span> gp ? gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aa7b9f54b6bb8bb01c24a8740b9c3633c">plugin</a> ? gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aa7b9f54b6bb8bb01c24a8740b9c3633c">plugin</a>-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a6e04143450eeb71e3d0b2c14983860a4">name</a> : NULL : NULL;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;}</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01416"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aaf355ea7103fc57a4cbc7b815cde2995"> 1416</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#aaf355ea7103fc57a4cbc7b815cde2995">remmina_protocol_widget_get_width</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;{</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;}</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01422"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a41b62f211a8a8e960bc80aa1ba6b0380"> 1422</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a41b62f211a8a8e960bc80aa1ba6b0380">remmina_protocol_widget_set_width</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint <a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>)</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;{</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a5cbea00dcc608759fcf66186e6afde93">width</a>;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;}</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01428"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ae609b351fff17c235251b0ba7c480da5"> 1428</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ae609b351fff17c235251b0ba7c480da5">remmina_protocol_widget_get_height</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;{</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;}</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;</div><div class="line"><a name="l01434"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aadd106cec729a80405c6097e4c662044"> 1434</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aadd106cec729a80405c6097e4c662044">remmina_protocol_widget_set_height</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gint <a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>)</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;{</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#af72272c7e2f45d61130ab4e57eb86380">height</a>;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;}</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;</div><div class="line"><a name="l01440"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a5ec62969da54155e24edcb1d998f93f7"> 1440</a></span>&#160;<a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="remmina__protocol__widget_8c.html#a5ec62969da54155e24edcb1d998f93f7">remmina_protocol_widget_get_current_scale_mode</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;{</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;}</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ad6e2d00646e8268aa0e8bbe31b77db48"> 1446</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ad6e2d00646e8268aa0e8bbe31b77db48">remmina_protocol_widget_set_current_scale_mode</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>)</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;{</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;}</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;</div><div class="line"><a name="l01452"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a25bcb2ae99449624fed6f770218e3d25"> 1452</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a25bcb2ae99449624fed6f770218e3d25">remmina_protocol_widget_get_expand</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;{</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a>;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;}</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;</div><div class="line"><a name="l01458"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a0b19dbe685e4465e7f06706270e120fa"> 1458</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a0b19dbe685e4465e7f06706270e120fa">remmina_protocol_widget_set_expand</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, gboolean expand)</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;{</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a> = expand;</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;}</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;</div><div class="line"><a name="l01465"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aab2f304822ccfd4979854ef1afd81771"> 1465</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#aab2f304822ccfd4979854ef1afd81771">remmina_protocol_widget_has_error</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;{</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a>;</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;}</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div><div class="line"><a name="l01471"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a508044024b303c286a0e643e44d85a29"> 1471</a></span>&#160;<span class="keyword">const</span> gchar *<a class="code" href="remmina__protocol__widget_8c.html#a508044024b303c286a0e643e44d85a29">remmina_protocol_widget_get_error_message</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;{</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;}</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;</div><div class="line"><a name="l01477"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a95088334da86faf9520383629fff48af"> 1477</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *fmt, ...)</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;{</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; va_list args;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>) g_free(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a>);</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="keywordflow">if</span> (fmt == NULL) {</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a> = FALSE;</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a> = NULL;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; }</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; va_start(args, fmt);</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aac57e5a1ac6fc21f95e0fb3e70745cf4">error_message</a> = g_strdup_vprintf(fmt, args);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; va_end(args);</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">has_error</a> = TRUE;</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;}</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;</div><div class="line"><a name="l01497"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2830f756dfc3d735b57b0c5753c429e3"> 1497</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a2830f756dfc3d735b57b0c5753c429e3">remmina_protocol_widget_is_closed</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;{</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a8700f21cfca6167fc9c4abe37c2d99b6">closed</a>;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;}</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;</div><div class="line"><a name="l01503"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2506e80d482c34532d0e534856452069"> 1503</a></span>&#160;<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *<a class="code" href="remmina__protocol__widget_8c.html#a2506e80d482c34532d0e534856452069">remmina_protocol_widget_get_file</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;{</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;}</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;</div><div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html"> 1509</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> {</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="comment">/* Input data */</span></div><div class="line"><a name="l01511"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a"> 1511</a></span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01512"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74"> 1512</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>;</div><div class="line"><a name="l01513"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28"> 1513</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>;</div><div class="line"><a name="l01514"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850"> 1514</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>;</div><div class="line"><a name="l01515"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361"> 1515</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>;</div><div class="line"><a name="l01516"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544"> 1516</a></span>&#160; gchar * <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a>;</div><div class="line"><a name="l01517"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7"> 1517</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373">panel_type</a> dtype;</div><div class="line"><a name="l01518"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8"> 1518</a></span>&#160; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486">RemminaMessagePanelFlags</a> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>;</div><div class="line"><a name="l01519"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f"> 1519</a></span>&#160; gboolean <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a>;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="comment">/* Running status */</span></div><div class="line"><a name="l01521"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf"> 1521</a></span>&#160; pthread_mutex_t <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>;</div><div class="line"><a name="l01522"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda"> 1522</a></span>&#160; pthread_cond_t <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; <span class="comment">/* Output/retval */</span></div><div class="line"><a name="l01524"></a><span class="lineno"><a class="line" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5"> 1524</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;};</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb"> 1527</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>(<span class="keywordtype">void</span> *user_data, <span class="keywordtype">int</span> button)</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;{</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *d = (<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *)user_data;</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a> = button;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <span class="keywordflow">if</span> (button == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>) {</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a> = <a class="code" href="remmina__message__panel_8c.html#a44054d029d4615092ae8a2ee1bf81db4">remmina_message_panel_field_get_string</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a1d61170572fba5e968305c2ea3b0f9f6">REMMINA_MESSAGE_PANEL_PASSWORD</a>);</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a> = <a class="code" href="remmina__message__panel_8c.html#a44054d029d4615092ae8a2ee1bf81db4">remmina_message_panel_field_get_string</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a5c66a04852163126a3b494abe3e07e25">REMMINA_MESSAGE_PANEL_USERNAME</a>);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a> = <a class="code" href="remmina__message__panel_8c.html#a44054d029d4615092ae8a2ee1bf81db4">remmina_message_panel_field_get_string</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a9efe2bb3f139ed0baf3833880fc2369a">REMMINA_MESSAGE_PANEL_DOMAIN</a>);</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a> = <a class="code" href="remmina__message__panel_8c.html#a80bc2fcb39c236da739593c2134c73fa">remmina_message_panel_field_get_switch_state</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a>) {</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a10531307d859706670fb6ce4aa7308c7">REMMINA_MESSAGE_PANEL_CACERTFILE</a>);</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a703afb1dece981649f9497a9e910b779">REMMINA_MESSAGE_PANEL_CACRLFILE</a>);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a26a6d6b3ac3f4e64662b0c72dc3982f7">REMMINA_MESSAGE_PANEL_CLIENTCERTFILE</a>);</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a> = <a class="code" href="remmina__message__panel_8c.html#ab89dba73bc6832c6c5061a0d8bd0fbb4">remmina_message_panel_field_get_filename</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a34c1441f93d50321cbabcfb45918c6e3">REMMINA_MESSAGE_PANEL_CLIENTKEYFILE</a>);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; }</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; }</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a>) {</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="comment">/* Hide and destroy message panel, we can do it now because we are on the main thread */</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="comment">/* Awake the locked subthread, when called from subthread */</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; pthread_mutex_lock(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; pthread_cond_signal(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>);</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; pthread_mutex_unlock(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="comment">/* Signal completion, when called from main thread. Message panel will be destroyed by the caller */</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <a class="code" href="remmina__message__panel_8c.html#af7db7b9f49fe6b83b17471116d363d40">remmina_message_panel_response</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>, button);</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;}</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;</div><div class="line"><a name="l01560"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113"> 1560</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113">remmina_protocol_widget_dialog_mt_setup</a>(gpointer user_data)</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;{</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *d = (<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *)user_data;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <span class="keyword">const</span> gchar *s;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a> == NULL)</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>) {</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ae2cec8bc8216154388727b7e35200667">remmina_message_panel_setup_auth</a>(mp, <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>, d, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>);</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a0e20944d484c95036eeb6b5d7775c901">remmina_message_panel_field_set_string</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a5c66a04852163126a3b494abe3e07e25">REMMINA_MESSAGE_PANEL_USERNAME</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a> &amp; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a46ac68f2dea71082d090ae63c5c4505c">REMMINA_MESSAGE_PANEL_FLAG_DOMAIN</a>)</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a0e20944d484c95036eeb6b5d7775c901">remmina_message_panel_field_set_string</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a9efe2bb3f139ed0baf3833880fc2369a">REMMINA_MESSAGE_PANEL_DOMAIN</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a0e20944d484c95036eeb6b5d7775c901">remmina_message_panel_field_set_string</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a1d61170572fba5e968305c2ea3b0f9f6">REMMINA_MESSAGE_PANEL_PASSWORD</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>);</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a> &amp; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>)</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <a class="code" href="remmina__message__panel_8c.html#a67a48217d44350e028ed95b1b55f0b0f">remmina_message_panel_field_set_switch</a>(mp, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>, (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a> == NULL || d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>[0] == 0) ? FALSE: TRUE);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>) {</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ae5b1825b5d4e56ecc2f25c28bb042c32">remmina_message_panel_setup_question</a>(mp, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>, <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>, d);</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> == <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a>) {</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <a class="code" href="remmina__message__panel_8c.html#ac10f450f856ca7d9c0b6896261e9c407">remmina_message_panel_setup_auth_x509</a>(mp, <a class="code" href="remmina__protocol__widget_8c.html#aa0b0a97022961c198c3343dd2433d7cb">authpanel_mt_cb</a>, d);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;cacert&quot;</span>)) != NULL)</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a10531307d859706670fb6ce4aa7308c7">REMMINA_MESSAGE_PANEL_CACERTFILE</a>, s);</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;cacrl&quot;</span>)) != NULL)</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a703afb1dece981649f9497a9e910b779">REMMINA_MESSAGE_PANEL_CACRLFILE</a>, s);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;clientcert&quot;</span>)) != NULL)</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a26a6d6b3ac3f4e64662b0c72dc3982f7">REMMINA_MESSAGE_PANEL_CLIENTCERTFILE</a>, s);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;clientkey&quot;</span>)) != NULL)</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <a class="code" href="remmina__message__panel_8c.html#aec9dcd96d0148fec9cdc9e94cc8dc1ff">remmina_message_panel_field_set_filename</a>(mp, <a class="code" href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a34c1441f93d50321cbabcfb45918c6e3">REMMINA_MESSAGE_PANEL_CLIENTKEYFILE</a>, s);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; }</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a> = mp;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;}</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;</div><div class="line"><a name="l01601"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html"> 1601</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l01602"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5"> 1602</a></span>&#160; RemminaMessagePanel * <a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>;</div><div class="line"><a name="l01603"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079"> 1603</a></span>&#160; GMainLoop * <a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>;</div><div class="line"><a name="l01604"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904"> 1604</a></span>&#160; gint <a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a>;</div><div class="line"><a name="l01605"></a><span class="lineno"><a class="line" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91"> 1605</a></span>&#160; gboolean <a class="code" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91">destroyed</a>;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;} <a class="code" href="struct_mp_run_info.html">MpRunInfo</a>;</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;</div><div class="line"><a name="l01608"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572"> 1608</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri)</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;{</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">if</span> (g_main_loop_is_running(mpri-&gt;<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>))</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; g_main_loop_quit(mpri-&gt;<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>);</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;}</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;</div><div class="line"><a name="l01614"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a122e28e59acb89200937ff823b82ddaf"> 1614</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a122e28e59acb89200937ff823b82ddaf">run_response_handler</a>(RemminaMessagePanel *mp, gint response_id, gpointer data)</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;{</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri = (<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *)data;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a> = response_id;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(mpri);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;}</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;</div><div class="line"><a name="l01622"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#ac9abaedb8cc35838ef1444423a81507d"> 1622</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ac9abaedb8cc35838ef1444423a81507d">run_unmap_handler</a>(RemminaMessagePanel *mp, gpointer data)</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;{</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri = (<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *)data;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a> = GTK_RESPONSE_CANCEL;</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(mpri);</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;}</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;</div><div class="line"><a name="l01630"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a7b1e83afd68c2b7301fc4d6da6a8f6d8"> 1630</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a7b1e83afd68c2b7301fc4d6da6a8f6d8">run_destroy_handler</a>(RemminaMessagePanel *mp, gpointer data)</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;{</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *mpri = (<a class="code" href="struct_mp_run_info.html">MpRunInfo</a> *)data;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91">destroyed</a> = TRUE;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; mpri-&gt;<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a> = GTK_RESPONSE_CANCEL;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a>(mpri);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;}</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;</div><div class="line"><a name="l01639"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54"> 1639</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<span class="keyword">enum</span> <a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373">panel_type</a> dtype, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486">RemminaMessagePanelFlags</a> pflags,</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="keyword">const</span> gchar *title, <span class="keyword">const</span> gchar *default_username, <span class="keyword">const</span> gchar *default_password, <span class="keyword">const</span> gchar *default_domain,</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="keyword">const</span> gchar *strpasswordlabel)</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;{</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; <span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *d = (<span class="keyword">struct </span><a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a> *)g_malloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html">remmina_protocol_widget_dialog_mt_data_t</a>));</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordtype">int</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a> = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a> = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>;</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a> = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a13fd74ca385ce7f7a4d6094a65bd17f7">dtype</a>;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a> = g_strdup(title);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a> = g_strdup(strpasswordlabel);</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a> = g_strdup(default_username);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a> = g_strdup(default_password);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a> = g_strdup(default_domain);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a> = FALSE;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="comment">/* Run the MessagePanel in main thread, in a very similar way of gtk_dialog_run() */</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <a class="code" href="struct_mp_run_info.html">MpRunInfo</a> mpri = { NULL, NULL, GTK_RESPONSE_CANCEL, FALSE };</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; gulong unmap_handler;</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; gulong destroy_handler;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; gulong response_handler;</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113">remmina_protocol_widget_dialog_mt_setup</a>(d);</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a> = d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <span class="keywordflow">if</span> (!gtk_widget_get_visible(GTK_WIDGET(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>)))</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; gtk_widget_show(GTK_WIDGET(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>));</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; response_handler = g_signal_connect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, <span class="stringliteral">&quot;response&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a122e28e59acb89200937ff823b82ddaf">run_response_handler</a>), &amp;mpri);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; unmap_handler = g_signal_connect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, <span class="stringliteral">&quot;unmap&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#ac9abaedb8cc35838ef1444423a81507d">run_unmap_handler</a>), &amp;mpri);</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; destroy_handler = g_signal_connect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a7b1e83afd68c2b7301fc4d6da6a8f6d8">run_destroy_handler</a>), &amp;mpri);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; g_object_ref(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>);</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; mpri.<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a> = g_main_loop_new(NULL, FALSE);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; g_main_loop_run(mpri.<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>);</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; g_main_loop_unref(mpri.<a class="code" href="struct_mp_run_info.html#acbbf3faafdfa1a05fd787730d1668079">loop</a>);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keywordflow">if</span> (!mpri.<a class="code" href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91">destroyed</a>) {</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; g_signal_handler_disconnect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, response_handler);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; g_signal_handler_disconnect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, destroy_handler);</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; g_signal_handler_disconnect(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>, unmap_handler);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; }</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; g_object_unref(mpri.<a class="code" href="struct_mp_run_info.html#a5c72860dd91def572bad1443e2c188a5">mp</a>);</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <a class="code" href="rcw_8c.html#a96e821dc68caa7f3380a513eb47aead7">rco_destroy_message_panel</a>(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a6a24677077c069fbbb1f17e747530e1b">auth_message_panel</a>);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; rcbutton = mpri.<a class="code" href="struct_mp_run_info.html#acb8e8aaf721611a761541a325e2a5904">response</a>;</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a81eb96409c1543bcf2d9474d4d89907f">called_from_subthread</a> = TRUE;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="comment">// pthread_cleanup_push(ptcleanup, (void*)d);</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; pthread_cond_init(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>, NULL);</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; pthread_mutex_init(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>, NULL);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; g_idle_add(<a class="code" href="remmina__protocol__widget_8c.html#aa9639b76ac0a92647ce08bdfe943d113">remmina_protocol_widget_dialog_mt_setup</a>, d);</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; pthread_mutex_lock(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; pthread_cond_wait(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>, &amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="comment">// pthread_cleanup_pop(0);</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; pthread_mutex_destroy(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3ecf120415414844ebcf07a1c86e9cdf">pt_mutex</a>);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; pthread_cond_destroy(&amp;d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a9ee011a8e1d09de188018e634aa2bbda">pt_cond</a>);</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; rcbutton = d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; }</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a72561ca7477a62e8c7234409205e6544">strpasswordlabel</a>);</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>);</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; g_free(d-&gt;<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; g_free(d);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a29b8f44a7f4514422d3a5e04e0b8f0b5">rcbutton</a>;</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;}</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9092c29f585fdabaf0ce7e865670053b"> 1716</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#a9092c29f585fdabaf0ce7e865670053b">remmina_protocol_widget_panel_question_yesno</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;{</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>, gp, 0, msg, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;}</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;</div><div class="line"><a name="l01721"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aebc7c7d34c470081a52aa35d998ce868"> 1721</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486">RemminaMessagePanelFlags</a> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>,</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a3f67e6ca406ec87db6ae6a3582770c74">title</a>, <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#ad9460e6c8e837ce941568d74499e0b28">default_username</a>, <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a650c926c67ed4ec841cf8553d6454850">default_password</a>, <span class="keyword">const</span> gchar *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a14655c577c6f070ee28f4211baf05361">default_domain</a>, <span class="keyword">const</span> gchar *password_prompt)</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;{</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>, gp, pflags, title, default_username,</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; default_password, default_domain, password_prompt == NULL ? _(<span class="stringliteral">&quot;Password&quot;</span>) : password_prompt);</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;}</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;</div><div class="line"><a name="l01729"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ad637ec849c497e4a0d4c723396aa6fba"> 1729</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#ad637ec849c497e4a0d4c723396aa6fba">remmina_protocol_widget_panel_authuserpwd_ssh_tunnel</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, gboolean want_domain, gboolean allow_password_saving)</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;{</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#a92d8a08aba2743f081e22f39fcaf0df8">pflags</a>;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keyword">const</span> gchar *<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>, *<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; pflags = <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a10be0730fc3ea326856019ae139a922a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME</a>;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile) != NULL &amp;&amp;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; !remminafile-&gt;prevent_saving &amp;&amp; allow_password_saving)</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; pflags |= <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; username = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span>);</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; password = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span>);</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373af288a06859b2eb1df4a011e1c2cba44c">RPWDT_AUTH</a>, gp, pflags, _(<span class="stringliteral">&quot;Type in SSH username and password.&quot;</span>), username,</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; password, NULL, _(<span class="stringliteral">&quot;Password&quot;</span>));</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;}</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;<span class="comment"> * gint remmina_protocol_widget_panel_authpwd(RemminaProtocolWidget* gp, RemminaAuthpwdType authpwd_type, gboolean allow_password_saving)</span></div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment"> * {</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="comment"> * TRACE_CALL(__func__);</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="comment"> * unsigned pflags;</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;<span class="comment"> * RemminaFile* remminafile = gp-&gt;priv-&gt;remmina_file;</span></div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;<span class="comment"> * char *password_prompt;</span></div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;<span class="comment"> * int rc;</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;<span class="comment"> * pflags = 0;</span></div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;<span class="comment"> * if (remmina_file_get_filename(remminafile) != NULL &amp;&amp;</span></div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;<span class="comment"> * !remminafile-&gt;prevent_saving &amp;&amp; allow_password_saving)</span></div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;<span class="comment"> * pflags |= REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD;</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;<span class="comment"> * switch (authpwd_type) {</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;<span class="comment"> * case REMMINA_AUTHPWD_TYPE_PROTOCOL:</span></div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;<span class="comment"> * password_prompt = g_strdup_printf(_(&quot;%s password&quot;), remmina_file_get_string(remminafile, &quot;protocol&quot;));</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="comment"> * case REMMINA_AUTHPWD_TYPE_SSH_PWD:</span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;<span class="comment"> * password_prompt = g_strdup(_(&quot;SSH password&quot;));</span></div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;<span class="comment"> * case REMMINA_AUTHPWD_TYPE_SSH_PRIVKEY:</span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;<span class="comment"> * password_prompt = g_strdup(_(&quot;SSH private key passphrase&quot;));</span></div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;<span class="comment"> * default:</span></div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="comment"> * password_prompt = g_strdup(_(&quot;Password&quot;));</span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment"> * break;</span></div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;<span class="comment"> * rc = remmina_protocol_widget_dialog(RPWDT_AUTH, gp, pflags, password_prompt);</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="comment"> * g_free(password_prompt);</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="comment"> * return rc;</span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;<span class="comment"> * }</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01783"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#aa674c14f3a46dd5eb6b53d6f8ce6bd31"> 1783</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#aa674c14f3a46dd5eb6b53d6f8ce6bd31">remmina_protocol_widget_panel_authx509</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;{</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373ab2286d6e72e1c7ddd0e760caa78f47ed">RPWDT_AUTHX509</a>, gp, 0, NULL, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;}</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;</div><div class="line"><a name="l01791"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a262d75d6b535bd8c623e607805db4084"> 1791</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#a262d75d6b535bd8c623e607805db4084">remmina_protocol_widget_panel_new_certificate</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> gchar *subject, <span class="keyword">const</span> gchar *issuer, <span class="keyword">const</span> gchar *fingerprint)</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;{</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; gchar *s;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="keywordtype">int</span> rc;</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">&quot;trust_all&quot;</span>)) {</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; <span class="comment">/* For compatibility with plugin API: The plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; <a class="code" href="remmina__public_8c.html#a893f0cfe2d694ab700975f4f427ee2f6">remmina_public_send_notification</a>(<span class="stringliteral">&quot;remmina-security-trust-all-id&quot;</span>, _(<span class="stringliteral">&quot;Fingerprint automatically accepted&quot;</span>), fingerprint);</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; rc = GTK_RESPONSE_OK;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; <span class="keywordflow">return</span> rc;</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; }</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; <span class="comment">// For markup see https://developer.gnome.org/pygtk/stable/pango-markup-language.html</span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; s = g_strdup_printf(</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; <span class="stringliteral">&quot;&lt;big&gt;%s&lt;/big&gt;\n\n%s %s\n%s %s\n%s %s\n\n&lt;big&gt;%s&lt;/big&gt;&quot;</span>,</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to verify a new SSL certificate.</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; _(<span class="stringliteral">&quot;Certificate details:&quot;</span>),</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate subject is usually the remote server the user connect to.</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; _(<span class="stringliteral">&quot;Subject:&quot;</span>), subject,</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <span class="comment">// TRANSLATORS: The name or email of the entity that have issued the SSL certificate</span></div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; _(<span class="stringliteral">&quot;Issuer:&quot;</span>), issuer,</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate fingerprint, is a hash of a certificate calculated on all certificate&#39;s data and its signature.</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; _(<span class="stringliteral">&quot;Fingerprint:&quot;</span>), fingerprint,</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to accept or refuse a new SSL certificate.</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; _(<span class="stringliteral">&quot;Accept certificate?&quot;</span>));</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; rc = <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>, gp, 0, s, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; g_free(s);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; <span class="comment">/* For compatibility with plugin API: the plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <span class="keywordflow">return</span> rc == GTK_RESPONSE_YES ? GTK_RESPONSE_OK : rc;</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;}</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01823"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#acf75fd4bac28a3d53da064b2905f23c1"> 1823</a></span>&#160;gint <a class="code" href="remmina__protocol__widget_8c.html#acf75fd4bac28a3d53da064b2905f23c1">remmina_protocol_widget_panel_changed_certificate</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> gchar *subject, <span class="keyword">const</span> gchar *issuer, <span class="keyword">const</span> gchar *new_fingerprint, <span class="keyword">const</span> gchar *old_fingerprint)</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;{</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; gchar *s;</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; <span class="keywordtype">int</span> rc;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">&quot;trust_all&quot;</span>)) {</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; <span class="comment">/* For compatibility with plugin API: The plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <a class="code" href="remmina__public_8c.html#a893f0cfe2d694ab700975f4f427ee2f6">remmina_public_send_notification</a>(<span class="stringliteral">&quot;remmina-security-trust-all-id&quot;</span>, _(<span class="stringliteral">&quot;Fingerprint automatically accepted&quot;</span>), new_fingerprint);</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; rc = GTK_RESPONSE_OK;</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="keywordflow">return</span> rc;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; }</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <span class="comment">// For markup see https://developer.gnome.org/pygtk/stable/pango-markup-language.html</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; s = g_strdup_printf(</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <span class="stringliteral">&quot;&lt;big&gt;%s&lt;/big&gt;\n\n%s %s\n%s %s\n%s %s\n%s %s\n\n&lt;big&gt;%s&lt;/big&gt;&quot;</span>,</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to verify a new SSL certificate.</span></div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; _(<span class="stringliteral">&quot;The certificate changed! Details:&quot;</span>),</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate subject is usually the remote server the user connect to.</span></div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; _(<span class="stringliteral">&quot;Subject:&quot;</span>), subject,</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; <span class="comment">// TRANSLATORS: The name or email of the entity that have issued the SSL certificate</span></div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; _(<span class="stringliteral">&quot;Issuer:&quot;</span>), issuer,</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate fingerprint, is a hash of a certificate calculated on all certificate&#39;s data and its signature.</span></div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; _(<span class="stringliteral">&quot;Old fingerprint:&quot;</span>), old_fingerprint,</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="comment">// TRANSLATORS: An SSL certificate fingerprint, is a hash of a certificate calculated on all certificate&#39;s data and its signature.</span></div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; _(<span class="stringliteral">&quot;New fingerprint:&quot;</span>), new_fingerprint,</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; <span class="comment">// TRANSLATORS: The user is asked to accept or refuse a new SSL certificate.</span></div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; _(<span class="stringliteral">&quot;Accept changed certificate?&quot;</span>));</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; rc = <a class="code" href="remmina__protocol__widget_8c.html#a858e4756aa97ce424ccf12475c225c54">remmina_protocol_widget_dialog</a>(<a class="code" href="remmina__protocol__widget_8c.html#a9275874ac61d3750aa677a36da714373a622fa08b626cd4dc1faf24c073e15c65">RPWDT_QUESTIONYESNO</a>, gp, 0, s, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; g_free(s);</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <span class="comment">/* For compatibility with plugin API: The plugin expects GTK_RESPONSE_OK when user confirms new cert */</span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="keywordflow">return</span> rc == GTK_RESPONSE_YES ? GTK_RESPONSE_OK : rc;</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;}</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;</div><div class="line"><a name="l01857"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a96159bd8e9d70c74967e666e2f188df0"> 1857</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a96159bd8e9d70c74967e666e2f188df0">remmina_protocol_widget_get_username</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;{</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; <span class="keywordflow">return</span> g_strdup(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>);</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;}</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;</div><div class="line"><a name="l01863"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a3fc52d61f77327534286f57e563e0923"> 1863</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;{</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; <span class="keywordflow">return</span> g_strdup(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>);</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;}</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;</div><div class="line"><a name="l01869"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a7c15fa81642c52ef382e1dbe34ffb6ac"> 1869</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a7c15fa81642c52ef382e1dbe34ffb6ac">remmina_protocol_widget_get_domain</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;{</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <span class="keywordflow">return</span> g_strdup(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a1d7cf2572439242b4f70e97b7f71405f">domain</a>);</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;}</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9ed3110b7b030bccd0ff9ed70e86da2d"> 1875</a></span>&#160;gboolean <a class="code" href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;{</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <span class="keywordflow">return</span> gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a>;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;}</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;</div><div class="line"><a name="l01881"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9473da27fd10eb46ef8360f9ad4be86d"> 1881</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a9473da27fd10eb46ef8360f9ad4be86d">remmina_protocol_widget_get_cacert</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;{</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; gchar *s;</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>;</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;}</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;</div><div class="line"><a name="l01890"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a70aecb9af2ea35527e8d058d1d87a0d3"> 1890</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a70aecb9af2ea35527e8d058d1d87a0d3">remmina_protocol_widget_get_cacrl</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;{</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; gchar *s;</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>;</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;}</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;</div><div class="line"><a name="l01899"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab9632c73b32531b7bea976e10204670b"> 1899</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#ab9632c73b32531b7bea976e10204670b">remmina_protocol_widget_get_clientcert</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;{</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; gchar *s;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;}</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;</div><div class="line"><a name="l01908"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a08d312825fc0de9f9286279d99f763a1"> 1908</a></span>&#160;gchar *<a class="code" href="remmina__protocol__widget_8c.html#a08d312825fc0de9f9286279d99f763a1">remmina_protocol_widget_get_clientkey</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;{</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; gchar *s;</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>;</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <span class="keywordflow">return</span> s &amp;&amp; s[0] ? g_strdup(s) : NULL;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;}</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;</div><div class="line"><a name="l01917"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ab863cc1442a992adfa323bc77ab88504"> 1917</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ab863cc1442a992adfa323bc77ab88504">remmina_protocol_widget_save_cred</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;{</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; gchar *s;</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; gboolean save = FALSE;</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_INIT_SAVE_CRED;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a00585ef650a083f1e8270cbdf05d437f">init_save_creds</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; g_free(d);</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; }</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <span class="comment">/* Save username and certificates if any; save the password if it’s requested to do so */</span></div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae3feb5e5dad00109813fac890d913885">username</a>;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>, s);</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; save = TRUE;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; }</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2c5f3bd1f990157bef034920db49dc6e">cacert</a>;</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;cacert&quot;</span>, s);</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; save = TRUE;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; }</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#af9db6b4306852214f3dc2cdc06a635b4">cacrl</a>;</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;cacrl&quot;</span>, s);</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; save = TRUE;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; }</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a37bd29fa334e378eff4367d61ee59e05">clientcert</a>;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;clientcert&quot;</span>, s);</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; save = TRUE;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; }</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; s = gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">clientkey</a>;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <span class="keywordflow">if</span> (s &amp;&amp; s[0]) {</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;clientkey&quot;</span>, s);</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; save = TRUE;</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; }</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a7c8675e38544a9c393b560b31d165791">save_password</a>) {</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;password&quot;</span>, gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a11a8aa051088d48b389c8385d03a65f7">password</a>);</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; save = TRUE;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; }</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <span class="keywordflow">if</span> (save)</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(remminafile);</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;}</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;</div><div class="line"><a name="l01971"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a278e13b53a4fdb65498e00e908edb98d"> 1971</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a278e13b53a4fdb65498e00e908edb98d">remmina_protocol_widget_panel_show_listen</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, gint port)</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;{</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; gchar *s;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_PANELSHOWLISTEN;</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a2852b6a6de556164946570c4d7786ece">protocolwidget_panelshowlisten</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a2852b6a6de556164946570c4d7786ece">protocolwidget_panelshowlisten</a>.port = port;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; g_free(d);</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; }</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; s = g_strdup_printf(</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <span class="comment">// TRANSLATORS: “%i” is a placeholder for a port number. “%s” is a placeholder for a protocol name (VNC).</span></div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; _(<span class="stringliteral">&quot;Listening on port %i for an incoming %s connection…&quot;</span>), port,</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;protocol&quot;</span>));</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, s, NULL, NULL);</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; g_free(s);</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a70cdb4f879e8bb26b23d05cbbe685640">listen_message_panel</a> = mp;</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;}</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;</div><div class="line"><a name="l02000"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a7ed85f4ea19e0660dbf46f4f3dc4b895"> 2000</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a7ed85f4ea19e0660dbf46f4f3dc4b895">remmina_protocol_widget_panel_show_retry</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;{</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; RemminaMessagePanel *mp;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_PROTOCOLWIDGET_MPSHOWRETRY;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af47270db94513116a8c0f7658848c4af">protocolwidget_mpshowretry</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; g_free(d);</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; }</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; mp = <a class="code" href="remmina__message__panel_8c.html#a7015155d2b1db3e74de4d4d5ef7cca55">remmina_message_panel_new</a>();</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; <a class="code" href="remmina__message__panel_8c.html#afae4072b7d8b54392ec08da7d6ead620">remmina_message_panel_setup_progress</a>(mp, _(<span class="stringliteral">&quot;Could not authenticate, attempting reconnection…&quot;</span>), NULL, NULL);</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#acad26c8fddd63360e26ecc99b0d57be4">retry_message_panel</a> = mp;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; <a class="code" href="rcw_8c.html#ac5eda3a29c88ac88d80b5775e39ffcb4">rco_show_message_panel</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, mp);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;}</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;</div><div class="line"><a name="l02022"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a843c2455a10c9382aee454515f9e7f8b"> 2022</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a843c2455a10c9382aee454515f9e7f8b">remmina_protocol_widget_panel_show</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;{</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; printf(<span class="stringliteral">&quot;Remmina: The %s function is not implemented, and is left here only for plugin API compatibility.\n&quot;</span>, __func__);</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;}</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;</div><div class="line"><a name="l02028"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a8ef0523afadadc9984d53fb02ecc01ad"> 2028</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a8ef0523afadadc9984d53fb02ecc01ad">remmina_protocol_widget_panel_hide</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;{</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; printf(<span class="stringliteral">&quot;Remmina: The %s function is not implemented, and is left here only for plugin API compatibility.\n&quot;</span>, __func__);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;}</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;</div><div class="line"><a name="l02034"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8c.html#a04f0a11e50cdbd98ab80984fd5aca16d"> 2034</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a04f0a11e50cdbd98ab80984fd5aca16d">remmina_protocol_widget_chat_on_destroy</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>)</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;{</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a> = NULL;</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;}</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;</div><div class="line"><a name="l02040"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a66263e6e7da79357ceb80d32b191d9f2"> 2040</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a66263e6e7da79357ceb80d32b191d9f2">remmina_protocol_widget_chat_open</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *<a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>, <span class="keyword">const</span> gchar *name,</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <span class="keywordtype">void</span> (*on_send)(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *text), <span class="keywordtype">void</span> (*on_destroy)(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp))</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;{</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>) {</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; gtk_window_present(GTK_WINDOW(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>));</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a> = <a class="code" href="remmina__chat__window_8c.html#a5e4fa655fddf361fed13bbd759bea24f">remmina_chat_window_new</a>(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(gp))), name);</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; g_signal_connect_swapped(G_OBJECT(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), <span class="stringliteral">&quot;send&quot;</span>, G_CALLBACK(on_send), gp);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; g_signal_connect_swapped(G_OBJECT(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), <span class="stringliteral">&quot;destroy&quot;</span>,</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; G_CALLBACK(<a class="code" href="remmina__protocol__widget_8c.html#a04f0a11e50cdbd98ab80984fd5aca16d">remmina_protocol_widget_chat_on_destroy</a>), gp);</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; g_signal_connect_swapped(G_OBJECT(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), <span class="stringliteral">&quot;destroy&quot;</span>, G_CALLBACK(on_destroy), gp);</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; gtk_widget_show(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; }</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;}</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;</div><div class="line"><a name="l02056"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a4a3a9ba7422fc302b0b412ac771c9953"> 2056</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a4a3a9ba7422fc302b0b412ac771c9953">remmina_protocol_widget_chat_close</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;{</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>)</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; gtk_widget_destroy(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>);</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;}</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;</div><div class="line"><a name="l02063"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ae2522242b3f39ee84ee8cf75170de0c0"> 2063</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ae2522242b3f39ee84ee8cf75170de0c0">remmina_protocol_widget_chat_receive</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <span class="keyword">const</span> gchar *text)</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;{</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; <span class="comment">/* This function can be called from a non main thread */</span></div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; <span class="keywordflow">if</span> (gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>) {</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; <span class="comment">/* Allow the execution of this function from a non main thread */</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_CHAT_RECEIVE;</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a6a00bf7132ed6d4923bd239acb073ace">chat_receive</a>.gp = <a class="code" href="structremmina__protocol__widget__dialog__mt__data__t.html#aac83645c5474683d37a9a61fcd640b7a">gp</a>;</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; d-&gt;<a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a6a00bf7132ed6d4923bd239acb073ace">chat_receive</a>.text = text;</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; g_free(d);</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; }</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; <a class="code" href="remmina__chat__window_8c.html#a45724aed5474dd741563ffbf89237022">remmina_chat_window_receive</a>(REMMINA_CHAT_WINDOW(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>), _(<span class="stringliteral">&quot;Server&quot;</span>), text);</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; gtk_window_present(GTK_WINDOW(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a006867628dec1d7b23404a690c967f4e">chat_window</a>));</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; }</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;}</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;</div><div class="line"><a name="l02085"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#ac705ffa194e3c3457e9a0a1bd6c79be8"> 2085</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#ac705ffa194e3c3457e9a0a1bd6c79be8">remmina_protocol_widget_setup</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <a class="code" href="struct___remmina_connection_object.html">RemminaConnectionObject</a> *cnnobj)</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;{</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a> = remminafile;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a> = cnnobj;</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="comment">/* Locate the protocol plugin */</span></div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;protocol&quot;</span>));</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <span class="keywordflow">if</span> (!plugin || !plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#a3d9e2f2eb2594411e6fe63cde443dfb2">init</a> || !plugin-&gt;<a class="code" href="struct___remmina_protocol_plugin.html#ad2e965f3997d21a1e08d365c74e615bd">open_connection</a>) {</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="comment">// TRANSLATORS: “%s” is a placeholder for a protocol name, like “RDP”.</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <a class="code" href="remmina__protocol__widget_8c.html#a95088334da86faf9520383629fff48af">remmina_protocol_widget_set_error</a>(gp, _(<span class="stringliteral">&quot;Install the %s protocol plugin first.&quot;</span>),</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;protocol&quot;</span>));</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a> = NULL;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; }</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aa7b9f54b6bb8bb01c24a8740b9c3633c">plugin</a> = <a class="code" href="struct___remmina_protocol_widget_priv.html#a2381772c96a26aafc98d347d210dbfe0">plugin</a>;</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;scale&quot;</span>, FALSE);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a94ef3b8e64d6ced7cd639b7917026f4c">scaler_expand</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;scaler_expand&quot;</span>, FALSE);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;}</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;</div><div class="line"><a name="l02110"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a8127b4cc7c278216dff87a7e4a336dfb"> 2110</a></span>&#160;GtkWindow *<a class="code" href="remmina__protocol__widget_8c.html#a8127b4cc7c278216dff87a7e4a336dfb">remmina_protocol_widget_get_gtkwindow</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;{</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; <span class="keywordflow">return</span> <a class="code" href="rcw_8c.html#affd4a8e1c05f88299990bb0f3d5d1b9d">rcw_get_gtkwindow</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>);</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;}</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;</div><div class="line"><a name="l02115"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a2067c19b160eb43bddda6c6c6e8d6045"> 2115</a></span>&#160;GtkWidget *<a class="code" href="remmina__protocol__widget_8c.html#a2067c19b160eb43bddda6c6c6e8d6045">remmina_protocol_widget_gtkviewport</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;{</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; <span class="keywordflow">return</span> <a class="code" href="rcw_8c.html#a96f1d274dafe5e4953da52beb75f7d14">rcw_get_gtkviewport</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>);</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;}</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;</div><div class="line"><a name="l02120"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a5c2137462d3168e90c812f1ce75a6e62"> 2120</a></span>&#160;GtkWidget *<a class="code" href="remmina__protocol__widget_8c.html#a5c2137462d3168e90c812f1ce75a6e62">remmina_protocol_widget_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;{</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <span class="keywordflow">return</span> GTK_WIDGET(g_object_new(REMMINA_TYPE_PROTOCOL_WIDGET, NULL));</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;}</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;<span class="comment">/* Send one or more keystrokes to a specific widget by firing key-press and</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="comment"> * key-release events.</span></div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="comment"> * GdkEventType action can be GDK_KEY_PRESS or GDK_KEY_RELEASE or both to</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<span class="comment"> * press the keys and release them in reversed order. */</span></div><div class="line"><a name="l02129"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a9bcd0d356c7215dc0f791c9744360705"> 2129</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a9bcd0d356c7215dc0f791c9744360705">remmina_protocol_widget_send_keys_signals</a>(GtkWidget *widget, <span class="keyword">const</span> guint *keyvals, <span class="keywordtype">int</span> keyvals_length, GdkEventType action)</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;{</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; GdkEventKey event;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; gboolean result;</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; <span class="keyword">event</span>.window = gtk_widget_get_window(widget);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; <span class="keyword">event</span>.send_event = TRUE;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; <span class="keyword">event</span>.time = GDK_CURRENT_TIME;</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; <span class="keyword">event</span>.state = 0;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; <span class="keyword">event</span>.length = 0;</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; <span class="keyword">event</span>.string = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; <span class="keyword">event</span>.group = 0;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; <span class="keywordflow">if</span> (action &amp; GDK_KEY_PRESS) {</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; <span class="comment">/* Press the requested buttons */</span></div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; <span class="keyword">event</span>.type = GDK_KEY_PRESS;</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; keyvals_length; i++) {</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; <span class="keyword">event</span>.keyval = keyvals[i];</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; <span class="keyword">event</span>.hardware_keycode = <a class="code" href="remmina__public_8c.html#a95f1d68c7ab3e2a6b158db45f63538fb">remmina_public_get_keycode_for_keyval</a>(keymap, event.keyval);</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; <span class="keyword">event</span>.is_modifier = (int)<a class="code" href="remmina__public_8c.html#a1fac51670815da6a72700a10866c179a">remmina_public_get_modifier_for_keycode</a>(keymap, event.hardware_keycode);</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Sending keyval: %u, hardware_keycode: %u&quot;</span>, event.keyval, event.hardware_keycode);</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; g_signal_emit_by_name(G_OBJECT(widget), <span class="stringliteral">&quot;key-press-event&quot;</span>, &amp;event, &amp;result);</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; }</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; }</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; <span class="keywordflow">if</span> (action &amp; GDK_KEY_RELEASE) {</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; <span class="comment">/* Release the requested buttons in reverse order */</span></div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; <span class="keyword">event</span>.type = GDK_KEY_RELEASE;</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; <span class="keywordflow">for</span> (i = (keyvals_length - 1); i &gt;= 0; i--) {</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; <span class="keyword">event</span>.keyval = keyvals[i];</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; <span class="keyword">event</span>.hardware_keycode = <a class="code" href="remmina__public_8c.html#a95f1d68c7ab3e2a6b158db45f63538fb">remmina_public_get_keycode_for_keyval</a>(keymap, event.keyval);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; <span class="keyword">event</span>.is_modifier = (int)<a class="code" href="remmina__public_8c.html#a1fac51670815da6a72700a10866c179a">remmina_public_get_modifier_for_keycode</a>(keymap, event.hardware_keycode);</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; g_signal_emit_by_name(G_OBJECT(widget), <span class="stringliteral">&quot;key-release-event&quot;</span>, &amp;event, &amp;result);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; }</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; }</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;}</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"><a class="line" href="remmina__protocol__widget_8h.html#a14684e3222e6afb1b43d77634a174767"> 2169</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="remmina__protocol__widget_8c.html#a14684e3222e6afb1b43d77634a174767">remmina_protocol_widget_update_remote_resolution</a>(<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp)</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;{</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; GdkRectangle rect;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; gint w, h;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; gint wfile, hfile;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78a">RemminaProtocolWidgetResolutionMode</a> res_mode;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7de">RemminaScaleMode</a> <a class="code" href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">scalemode</a>;</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <a class="code" href="rcw_8c.html#aee06df544a91184cba1fe77c6991065a">rco_get_monitor_geometry</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#aae1dfb6ff52460c80a3adf80d4934f67">cnnobj</a>, &amp;rect);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160; <span class="comment">/* Integrity check: check that we have a cnnwin visible and get t */</span></div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; res_mode = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;resolution_mode&quot;</span>, <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>);</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; scalemode = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;scale&quot;</span>, <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dead50ff64ad1e14caf78956850f03871bd">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE</a>);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; wfile = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;resolution_width&quot;</span>, -1);</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; hfile = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a0f1ee4a3ddb7afe518588dce3046f5ec">remmina_file</a>, <span class="stringliteral">&quot;resolution_height&quot;</span>, -1);</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; <span class="comment">/* If resolution_mode is non-existent (-1), then we try to calculate it</span></div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;<span class="comment"> * as we did before having resolution_mode */</span></div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa415945752acf7689df7cb602ae4e1724">RES_INVALID</a>) {</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; <span class="keywordflow">if</span> (wfile &lt;= 0 || hfile &lt;= 0)</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a>;</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; res_mode = <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aafe10effd553a16b9bac60b6d9b64c2cd">RES_USE_CUSTOM</a>;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; }</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a> || scalemode == <a class="code" href="types_8h.html#aeea5ee1e675368413b6f6ab09883e7dea4d22c6eed721b661d618098159a20946">REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES</a>) {</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; <span class="comment">/* Use internal window size as remote desktop size */</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; GtkAllocation al;</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; gtk_widget_get_allocation(GTK_WIDGET(gp), &amp;al);</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; <span class="comment">/* use a multiple of four to mitigate scaling when remote host rounds up */</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; w = al.width - al.width % 4;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; h = al.height - al.height % 4;</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; <span class="keywordflow">if</span> (w &lt; 10) {</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; printf(<span class="stringliteral">&quot;Remmina warning: %s RemminaProtocolWidget w=%d h=%d are too small, adjusting to 640x480\n&quot;</span>, __func__, w, h);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; w = 640;</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; h = 480;</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; }</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; <span class="comment">/* Due to approximations while GTK calculates scaling, (w x h) may exceed our monitor geometry</span></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;<span class="comment"> * Adjust to fit. */</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; <span class="keywordflow">if</span> (w &gt; rect.width)</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; w = rect.width;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; <span class="keywordflow">if</span> (h &gt; rect.height)</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; h = rect.height;</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (res_mode == <a class="code" href="types_8h.html#a373ddef8221457d86c64830c26d3f78aaf5ff7e2cd480eb2acc5e1520e409202d">RES_USE_CLIENT</a>) {</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; w = rect.width;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160; h = rect.height;</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; w = wfile;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; h = hfile;</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; }</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#aaab2e0d0706684150d0ee572e2490a10">profile_remote_width</a> = w;</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; gp-&gt;<a class="code" href="struct___remmina_protocol_widget.html#a18a9b0b9c8e619b3bdee881d7601f6d6">priv</a>-&gt;<a class="code" href="struct___remmina_protocol_widget_priv.html#a93da102535413a0b3b1b740b582444ca">profile_remote_height</a> = h;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;}</div><div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00110">remmina_ssh.h:110</a></div></div>
<div class="ttc" id="remmina__protocol__widget_8c_html_a25bcb2ae99449624fed6f770218e3d25"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a25bcb2ae99449624fed6f770218e3d25">remmina_protocol_widget_get_expand</a></div><div class="ttdeci">gboolean remmina_protocol_widget_get_expand(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01452">remmina_protocol_widget.c:1452</a></div></div>
<div class="ttc" id="struct___remmina_s_s_h_tunnel_html"><div class="ttname"><a href="struct___remmina_s_s_h_tunnel.html">_RemminaSSHTunnel</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00148">remmina_ssh.h:148</a></div></div>
<div class="ttc" id="struct_mp_run_info_html_a5c8cb7c26289f2afa4fcd87fced6bb91"><div class="ttname"><a href="struct_mp_run_info.html#a5c8cb7c26289f2afa4fcd87fced6bb91">MpRunInfo::destroyed</a></div><div class="ttdeci">gboolean destroyed</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01605">remmina_protocol_widget.c:1605</a></div></div>
diff --git a/public/remmina__ssh_8c_source.html b/public/remmina__ssh_8c_source.html
index a44e896a7..0173b9025 100644
--- a/public/remmina__ssh_8c_source.html
+++ b/public/remmina__ssh_8c_source.html
@@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('remmina__ssh_8c_source.html','');});
<div class="title">remmina_ssh.c</div> </div>
</div><!--header-->
<div class="contents">
-<a href="remmina__ssh_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) 2009-2011 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-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Copyright (C) 2022-2023 Antenore Gatta, Giovanni Panozzo, Hiroyuki Tanaka</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</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="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * including the two.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> * files in the program, then also delete it here.</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;<span class="comment"> */</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;config.h&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">/* To get definitions of NI_MAXHOST and NI_MAXSERV from &lt;netdb.h&gt; */</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#define _DEFAULT_SOURCE</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#define _DARWIN_C_SOURCE</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">/* Define this before stdlib.h to have posix_openpt */</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#define _XOPEN_SOURCE 600</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"> 49</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#define LIBSSH_STATIC 1</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &lt;libssh/libssh.h&gt;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &lt;gtk/gtk.h&gt;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &lt;glib/gi18n.h&gt;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &lt;poll.h&gt;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &lt;signal.h&gt;</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;time.h&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#include &lt;pthread.h&gt;</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#ifdef HAVE_NETDB_H</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#include &lt;netdb.h&gt;</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#ifdef HAVE_ARPA_INET_H</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor">#include &lt;arpa/inet.h&gt;</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#ifdef HAVE_NETINET_IN_H</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#include &lt;netinet/in.h&gt;</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#ifdef HAVE_SYS_SOCKET_H</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#include &lt;sys/socket.h&gt;</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#ifdef HAVE_FCNTL_H</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#ifdef HAVE_ERRNO_H</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#ifdef HAVE_TERMIOS_H</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor">#include &lt;termios.h&gt;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#ifdef HAVE_UNISTD_H</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#ifdef HAVE_PTY_H</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#include &lt;pty.h&gt;</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#ifdef HAVE_SYS_UN_H</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor">#include &lt;sys/un.h&gt;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__public_8h.html">remmina_public.h</a>&quot;</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="types_8h.html">remmina/types.h</a>&quot;</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file_8h.html">remmina_file.h</a>&quot;</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__log_8h.html">remmina_log.h</a>&quot;</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>&quot;</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ssh_8h.html">remmina_ssh.h</a>&quot;</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a>&quot;</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>&quot;</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#ifdef HAVE_NETINET_TCP_H</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#include &lt;netinet/tcp.h&gt;</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor">#if defined(__FreeBSD__) || defined(__OpenBSD__)</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="preprocessor">#ifndef SOL_TCP</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#define SOL_TCP IPPROTO_TCP</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">* SSH Base *</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></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"> 115</span>&#160;<span class="preprocessor">#define LOCK_SSH(ssh) pthread_mutex_lock(&amp;REMMINA_SSH(ssh)-&gt;ssh_mutex);</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#define UNLOCK_SSH(ssh) pthread_mutex_unlock(&amp;REMMINA_SSH(ssh)-&gt;ssh_mutex);</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694"> 118</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *<a class="code" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694">common_identities</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"> 120</span>&#160; <span class="stringliteral">&quot;.ssh/id_ed25519&quot;</span>,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="stringliteral">&quot;.ssh/id_rsa&quot;</span>,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="stringliteral">&quot;.ssh/id_dsa&quot;</span>,</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="stringliteral">&quot;.ssh/identity&quot;</span>,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; NULL</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;};</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;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment">* X11 Channels *</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="preprocessor">#define _PATH_UNIX_X &quot;/tmp/.X11-unix/X%d&quot;</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#define _XAUTH_CMD &quot;/usr/bin/xauth list %s 2&gt;/dev/null&quot;</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="structitem.html"> 133</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structitem.html">item</a> {</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="structitem.html#a456c6639914adbd3be8b4da351775d04"> 134</a></span>&#160; ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="structitem.html#adb779965c903bb950d429e90ebce3162"> 135</a></span>&#160; gint <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="structitem.html#a86aaa250b539e47685bae65032af9ce7"> 136</a></span>&#160; gint <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262"> 137</a></span>&#160; gboolean <span class="keyword">protected</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb"> 138</a></span>&#160; pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5"> 139</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structitem.html">item</a> *<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;} <a class="code" href="remmina__ssh_8c.html#a1cffe594c5d4e018e846308a11c8d05f">node_t</a>;</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"><a class="line" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792"> 142</a></span>&#160;<a class="code" href="structitem.html">node_t</a> *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a> = NULL;</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;<span class="comment">// Mutex</span></div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3"> 145</a></span>&#160;pthread_mutex_t <a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// Linked nodes to manage channel/fd tuples</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, gint <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>, gint <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>, gboolean <span class="keyword">protected</span>, pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef">remmina_ssh_delete_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword">static</span> <a class="code" href="structitem.html">node_t</a> * <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// X11 Display</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b">remmina_ssh_ssh_gai_strerror</a>(<span class="keywordtype">int</span> gaierr);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b">remmina_ssh_x11_get_proto</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *display, <span class="keywordtype">char</span> **_proto, <span class="keywordtype">char</span> **_data);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479">remmina_ssh_set_nodelay</a>(<span class="keywordtype">int</span> fd);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d">remmina_ssh_connect_local_xsocket_path</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pathname);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8">remmina_ssh_connect_local_xsocket</a>(<span class="keywordtype">int</span> display_number);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a">remmina_ssh_x11_connect_display</a>();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">// Send data to channel</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> revents, <span class="keywordtype">void</span> *userdata);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">// Read data from channel</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56">remmina_ssh_cp_to_fd_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *data, uint32_t len, <span class="keywordtype">int</span> is_stderr, <span class="keywordtype">void</span> *userdata);</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="comment">// EOF&amp;Close channel</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *userdata);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment">// Close all X11 channel</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment">// X11 Request</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="keyword">static</span> ssh_channel <a class="code" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100">remmina_ssh_x11_open_request_cb</a>(ssh_session session, <span class="keyword">const</span> <span class="keywordtype">char</span> *shost, <span class="keywordtype">int</span> sport, <span class="keywordtype">void</span> *userdata);</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;<span class="comment">// SSH Channel Callbacks</span></div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb"> 176</a></span>&#160;<span class="keyword">struct </span>ssh_channel_callbacks_struct <a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a> =</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; .channel_data_function = <a class="code" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56">remmina_ssh_cp_to_fd_cb</a>,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; .channel_eof_function = <a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; .channel_close_function = <a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; .userdata = NULL</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;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment">// SSH Event Context</span></div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61"> 185</a></span>&#160;<span class="keywordtype">short</span> <a class="code" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61">events</a> = POLLIN | POLLPRI | POLLERR | POLLHUP | POLLNVAL;</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="comment">// Functions</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1"> 189</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, gint <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>, gint <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>, gboolean <span class="keyword">protected</span>, pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>)</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; TRACE_CALL(__func__);</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; pthread_mutex_lock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;insert node - fd_in: %d - fd_out: %d - protected %d&quot;</span>, fd_in, fd_out, <span class="keyword">protected</span>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="structitem.html">node_t</a> *node_iterator, *<span class="keyword">new</span>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">if</span> (node == NULL) {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">/* Calloc ensure that node is full of 0 */</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; node = (<a class="code" href="structitem.html">node_t</a> *) calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structitem.html">node_t</a>));</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; node-&gt;<a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; node-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a> = <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; node-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a> = <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a> = <span class="keyword">protected</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; node-&gt;<a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a> = <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; node-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> = NULL;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; node_iterator = <a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">while</span> (node_iterator-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> != NULL)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; node_iterator = node_iterator-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">/* Create the new node */</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">new</span> = (<a class="code" href="structitem.html">node_t</a> *) malloc(<span class="keyword">sizeof</span>(<a class="code" href="structitem.html">node_t</a>));</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">new</span>-&gt;<a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">new</span>-&gt;fd_in = <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">new</span>-&gt;fd_out = <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">new</span>-&gt;protected = <span class="keyword">protected</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">new</span>-&gt;thread = <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">new</span>-&gt;next = NULL;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; node_iterator-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> = <span class="keyword">new</span>;</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; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;}</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;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef"> 226</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef">remmina_ssh_delete_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;delete node&quot;</span>);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; pthread_mutex_lock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="structitem.html">node_t</a> *current, *previous = NULL;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">for</span> (current = node; current; previous = current, current = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>) {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (current-&gt;channel != channel)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (previous == NULL)</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; node = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; previous-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</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"> 244</span>&#160; free(current);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</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; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</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;<span class="keyword">static</span> <a class="code" href="structitem.html">node_t</a> *</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda"> 253</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// TODO: too verbose REMMINA_DEBUG(&quot;search node&quot;);</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; pthread_mutex_lock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="structitem.html">node_t</a> *current = <a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">while</span> (current != NULL) {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">if</span> (current-&gt;<a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> == channel) {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// TODO: too verbose REMMINA_DEBUG(&quot;found node - fd_in: %d - fd_out: %d - protected: %d&quot;, current-&gt;fd_in, current-&gt;fd_out, current-&gt;protected);</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> current;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; current = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</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;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;}</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479"> 278</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479">remmina_ssh_set_nodelay</a>(<span class="keywordtype">int</span> fd)</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;{</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">int</span> opt;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; socklen_t optlen;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; optlen = <span class="keyword">sizeof</span>(opt);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">if</span> (getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &amp;opt, &amp;optlen) == -1) {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;getsockopt TCP_NODELAY: %.100s&quot;</span>, strerror(errno));</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (opt == 1) {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d is TCP_NODELAY&quot;</span>, fd);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; opt = 1;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d setting TCP_NODELAY&quot;</span>, fd);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span> (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &amp;opt, <span class="keyword">sizeof</span>(opt)) == -1)</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;setsockopt TCP_NODELAY: %.100s&quot;</span>, strerror(errno));</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"> 298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b"> 300</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b">remmina_ssh_ssh_gai_strerror</a>(<span class="keywordtype">int</span> gaierr)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;{</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (gaierr == EAI_SYSTEM &amp;&amp; errno != 0)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> strerror(errno);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> gai_strerror(gaierr);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b"> 310</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b">remmina_ssh_x11_get_proto</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *display, <span class="keywordtype">char</span> **_proto, <span class="keywordtype">char</span> **_cookie)</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; TRACE_CALL(__func__);</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; <span class="keywordtype">char</span> cmd[1024], line[512], xdisplay[512];</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> proto[512], cookie[512];</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; FILE *f;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordtype">int</span> ret = 0, r;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; *_proto = proto;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; *_cookie = cookie;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; proto[0] = cookie[0] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (strncmp(display, <span class="stringliteral">&quot;localhost:&quot;</span>, 10) == 0) {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> ((r = snprintf(xdisplay, <span class="keyword">sizeof</span>(xdisplay), <span class="stringliteral">&quot;unix:%s&quot;</span>, display + 10)) &lt; 0 || (<span class="keywordtype">size_t</span>)r &gt;= <span class="keyword">sizeof</span>(xdisplay)) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;display name too long. display: %s&quot;</span>, display);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; display = xdisplay;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; snprintf(cmd, <span class="keyword">sizeof</span>(cmd), _XAUTH_CMD, display);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;xauth cmd: %s&quot;</span>, cmd);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; f = popen(cmd, <span class="stringliteral">&quot;r&quot;</span>);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (f &amp;&amp; fgets(line, <span class="keyword">sizeof</span>(line), f) &amp;&amp; sscanf(line, <span class="stringliteral">&quot;%*s %511s %511s&quot;</span>, proto, cookie) == 2) {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; ret = 0;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; ret = 1;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</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="keywordflow">if</span> (f) pclose(f);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;proto: %s - cookie: %s - ret: %d&quot;</span>, proto, cookie, ret);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d"> 350</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d">remmina_ssh_connect_local_xsocket_path</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pathname)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;{</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; TRACE_CALL(__func__);</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"> 354</span>&#160; <span class="keywordtype">int</span> sock;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">struct </span>sockaddr_un addr;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; sock = socket(AF_UNIX, SOCK_STREAM, 0);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span> (sock == -1)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;socket: %.100s&quot;</span>, strerror(errno));</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; memset(&amp;addr, 0, <span class="keyword">sizeof</span>(addr));</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; addr.sun_family = AF_UNIX;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; addr.sun_path[0] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; memcpy(addr.sun_path + 1, pathname, strlen(pathname));</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span> (connect(sock, (<span class="keyword">struct</span> sockaddr *)&amp;addr, offsetof(<span class="keyword">struct</span> sockaddr_un, sun_path) + 1 + strlen(pathname)) == 0) {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;sock: %d&quot;</span>, sock);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> sock;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;connect %.100s: %.100s&quot;</span>, addr.sun_path, strerror(errno));</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; close(sock);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;}</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8"> 377</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8">remmina_ssh_connect_local_xsocket</a>(<span class="keywordtype">int</span> display_number)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordtype">char</span> buf[1024];</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; snprintf(buf, <span class="keyword">sizeof</span>(buf), _PATH_UNIX_X, display_number);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d">remmina_ssh_connect_local_xsocket_path</a>(buf);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;}</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a"> 387</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a">remmina_ssh_x11_connect_display</a>()</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;{</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; TRACE_CALL(__func__);</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> display_number;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *display;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordtype">char</span> buf[1024], *cp;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keyword">struct </span>addrinfo hints, *ai, *aitop;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">char</span> strport[NI_MAXSERV];</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordtype">int</span> gaierr, sock = 0;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">/* Try to open a socket for the local X server. */</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; display = getenv(<span class="stringliteral">&quot;DISPLAY&quot;</span>);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">if</span> (!display) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</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; REMMINA_DEBUG(<span class="stringliteral">&quot;display: %s&quot;</span>, display);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">/* Check if it is a unix domain socket. */</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (strncmp(display, <span class="stringliteral">&quot;unix:&quot;</span>, 5) == 0 || display[0] == <span class="charliteral">&#39;:&#39;</span>) {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">/* Connect to the unix domain socket. */</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">if</span> (sscanf(strrchr(display, <span class="charliteral">&#39;:&#39;</span>) + 1, <span class="stringliteral">&quot;%u&quot;</span>, &amp;display_number) != 1) {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Could not parse display number from DISPLAY: %.100s&quot;</span>, display);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</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; REMMINA_DEBUG(<span class="stringliteral">&quot;display_number: %d&quot;</span>, display_number);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">/* Create a socket. */</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; sock = <a class="code" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8">remmina_ssh_connect_local_xsocket</a>(display_number);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;socket: %d&quot;</span>, sock);</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; <span class="keywordflow">if</span> (sock &lt; 0)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span> -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; <span class="comment">/* OK, we now have a connection to the display. */</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">return</span> sock;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</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; <span class="comment">/* Connect to an inet socket. */</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; strncpy(buf, display, <span class="keyword">sizeof</span>(buf) - 1);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; cp = strchr(buf, <span class="charliteral">&#39;:&#39;</span>);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (!cp) {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Could not find &#39;:&#39; in DISPLAY: %.100s&quot;</span>, display);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; *cp = 0;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (sscanf(cp + 1, <span class="stringliteral">&quot;%u&quot;</span>, &amp;display_number) != 1) {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Could not parse display number from DISPLAY: %.100s&quot;</span>, display);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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="comment">/* Look up the host address */</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; memset(&amp;hints, 0, <span class="keyword">sizeof</span>(hints));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; hints.ai_family = AF_INET;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; hints.ai_socktype = SOCK_STREAM;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; snprintf(strport, <span class="keyword">sizeof</span>(strport), <span class="stringliteral">&quot;%u&quot;</span>, 6000 + display_number);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">if</span> ((gaierr = getaddrinfo(buf, strport, &amp;hints, &amp;aitop)) != 0) {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;%.100s: unknown host. (%s)&quot;</span>, buf, <a class="code" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b">remmina_ssh_ssh_gai_strerror</a>(gaierr));</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">for</span> (ai = aitop; ai; ai = ai-&gt;ai_next) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">/* Create a socket. */</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; sock = socket(ai-&gt;ai_family, ai-&gt;ai_socktype, ai-&gt;ai_protocol);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span> (sock == -1) {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;socket: %.100s&quot;</span>, strerror(errno));</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">/* Connect it to the display. */</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">if</span> (connect(sock, ai-&gt;ai_addr, ai-&gt;ai_addrlen) == -1) {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;connect %.100s port %u: %.100s&quot;</span>, buf, 6000 + display_number, strerror(errno));</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; close(sock);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="comment">/* Success */</span></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; }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; freeaddrinfo(aitop);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (!ai) {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;connect %.100s port %u: %.100s&quot;</span>, buf, 6000 + display_number, strerror(errno));</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479">remmina_ssh_set_nodelay</a>(sock);</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; REMMINA_DEBUG(<span class="stringliteral">&quot;sock: %d&quot;</span>, sock);</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; <span class="keywordflow">return</span> sock;</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;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65"> 479</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> revents, <span class="keywordtype">void</span> *userdata)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;{</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = (ssh_channel)userdata;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; gchar *buf = (gchar *) g_malloc ( <span class="keyword">sizeof</span>(gchar) * 0x200000 );</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (buf ==NULL){</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; gint sz = 0, ret = 0;</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; <a class="code" href="structitem.html">node_t</a> *temp_node = <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(channel);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span> (!temp_node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; shutdown(fd, SHUT_RDWR);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; close(fd);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d closed.&quot;</span>, fd);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;channel does not exist.&quot;</span>);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</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; <span class="keywordflow">if</span> ((revents &amp; POLLIN) || (revents &amp; POLLPRI)) {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; sz = read(fd, buf, <span class="keyword">sizeof</span>(buf));</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (sz &gt; 0) {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; ret = ssh_channel_write(channel, buf, sz);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (ret != sz){</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; g_free(buf);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> -1;</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; </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">//TODO: too verbose REMMINA_DEBUG(&quot;ssh_channel_write ret: %d sz: %d&quot;, ret, sz);</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sz &lt; 0) {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// TODO: too verbose REMMINA_WARNING(&quot;fd bytes read: %d&quot;, sz);</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; g_free(buf);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Why the hell am I here?&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">if</span> (!temp_node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; shutdown(fd, SHUT_RDWR);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; close(fd);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d closed.&quot;</span>, fd);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; g_free(buf);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">if</span> ((revents &amp; POLLHUP) || (revents &amp; POLLNVAL) || (revents &amp; POLLERR)) {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Closing channel.&quot;</span>);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; ret = -1;</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; g_free(buf);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;}</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56"> 537</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56">remmina_ssh_cp_to_fd_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *data, uint32_t len, <span class="keywordtype">int</span> is_stderr, <span class="keywordtype">void</span> *userdata)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; (void)session;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; (void)is_stderr;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="comment">// Expecting userdata to be type RemminaSSHShell *, but it is unused</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="comment">// in this function.</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; (void)userdata;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="structitem.html">node_t</a> *temp_node = <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(channel);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; gint fd = temp_node-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; gint sz = 0;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; sz = write(fd, data, len);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="comment">// TODO: too verbose REMMINA_DEBUG(&quot;fd bytes written: %d&quot;, sz);</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">return</span> sz;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;}</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6"> 557</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *userdata)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;{</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; (void)session;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)userdata;</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; <a class="code" href="structitem.html">node_t</a> *temp_node = <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(channel);</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> (temp_node != NULL) {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordtype">int</span> fd = temp_node-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">if</span> (!temp_node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <a class="code" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef">remmina_ssh_delete_item</a>(channel);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; ssh_event_remove_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, fd);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; shutdown(fd, SHUT_RDWR);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; close(fd);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d closed.&quot;</span>, fd);</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; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Channel closed.&quot;</span>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;}</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;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae"> 581</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>)</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;{</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; TRACE_CALL(__func__);</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; REMMINA_DEBUG(<span class="stringliteral">&quot;Close all X11 channels&quot;</span>);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="structitem.html">node_t</a> *current = <a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">while</span> (current != NULL) {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span> (current-&gt;<a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a> == thread &amp;&amp; !current-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; shutdown(current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>, SHUT_RDWR);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; close(current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;thread: %d - fd %d closed.&quot;</span>, thread, current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a> != current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>) {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; shutdown(current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>, SHUT_RDWR);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; close(current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;thread: %d - fd %d closed.&quot;</span>, thread, current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>);</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; }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; current = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;}</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="keyword">static</span> ssh_channel</div><div class="line"><a name="l00604"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100"> 604</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100">remmina_ssh_x11_open_request_cb</a>(ssh_session session, <span class="keyword">const</span> <span class="keywordtype">char</span> *shost, <span class="keywordtype">int</span> sport, <span class="keywordtype">void</span> *userdata)</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; TRACE_CALL(__func__);</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; (void)shost;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; (void)sport;</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"> 611</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)userdata;</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; ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = ssh_channel_new(session);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordtype">int</span> sock = <a class="code" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a">remmina_ssh_x11_connect_display</a>();</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(channel, sock, sock, FALSE, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; ssh_event_add_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, sock, <a class="code" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61">events</a>, <a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>, channel);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; ssh_event_add_session(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, session);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; ssh_add_channel_callbacks(channel, &amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;}</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;gchar *</div><div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#a72a58e416c4eeb9d17eaf76360ebee42"> 628</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a72a58e416c4eeb9d17eaf76360ebee42">remmina_ssh_identity_path</a>(<span class="keyword">const</span> gchar *<span class="keywordtype">id</span>)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == NULL) <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span>[0] == <span class="charliteral">&#39;/&#39;</span>) <span class="keywordflow">return</span> g_strdup(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">return</span> g_strdup_printf(<span class="stringliteral">&quot;%s/%s&quot;</span>, g_get_home_dir(), <span class="keywordtype">id</span>);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;}</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;gchar *</div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#ab6d8bdad543b3caead2b2b0339484798"> 637</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#ab6d8bdad543b3caead2b2b0339484798">remmina_ssh_find_identity</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;{</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; gchar *path;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; gint i;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">for</span> (i = 0; <a class="code" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694">common_identities</a>[i]; i++) {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; path = <a class="code" href="remmina__ssh_8c.html#a72a58e416c4eeb9d17eaf76360ebee42">remmina_ssh_identity_path</a>(<a class="code" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694">common_identities</a>[i]);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">if</span> (g_file_test(path, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS))</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">return</span> path;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; g_free(path);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;}</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00653"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#abc556f0a4335083436f6e19c204fa553"> 653</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *fmt)</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;{</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> gchar *err;</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; err = ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(fmt, err);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;}</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;<span class="keywordtype">void</span></div><div class="line"><a name="l00663"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#a1f3297263703b4259c1c9607d710995d"> 663</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *fmt, ...)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;{</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; va_list args;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; va_start(args, fmt);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_vprintf(fmt, args);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; va_end(args);</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;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c"> 674</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c">remmina_ssh_auth_interactive</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;{</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; gint ret;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; gint n;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; gint i;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keyword">const</span> gchar *name, *instruction = NULL;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">//gchar *prompt,*ptr;</span></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"> 683</span>&#160; ret = SSH_AUTH_ERROR;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>) <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="comment">/* TODO: What if I have an empty password? */</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> == NULL) {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, <span class="stringliteral">&quot;OTP code is empty&quot;</span>);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;OTP code is empty, returning&quot;</span>);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; REMMINA_DEBUG(<span class="stringliteral">&quot;OTP code has been set to: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; ret = ssh_userauth_kbdint(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, NULL);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">while</span> (ret == SSH_AUTH_INFO) {</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; name = ssh_userauth_kbdint_getname(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">if</span> (strlen(name) &gt; 0)</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive name: %s&quot;</span>, name);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive name is empty&quot;</span>);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; instruction = ssh_userauth_kbdint_getinstruction(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span> (strlen(instruction) &gt; 0)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive instruction: %s&quot;</span>, instruction);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive instruction is empty&quot;</span>);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; n = ssh_userauth_kbdint_getnprompts(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; n; i++)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; ssh_userauth_kbdint_setanswer(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, i, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; ret = ssh_userauth_kbdint(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, NULL);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</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;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_userauth_kbdint returned %d&quot;</span>, ret);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH keyboard interactive. Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">//Authentication success</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH keyboard interactive. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_INFO:</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="comment">//The server asked some questions. Use ssh_userauth_kbdint_getnprompts() and such.</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticating aagin with SSH keyboard interactive??? %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with keyboard interactive, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="comment">//A serious error happened</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with TOTP/OTP/2FA. %s&quot;</span>));</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate with TOTP/OTP/2FA. Error is %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;}</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;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00753"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#ad6f3f5c196175412049af0c440414e65"> 753</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#ad6f3f5c196175412049af0c440414e65">remmina_ssh_auth_password</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</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; gint ret;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Password authentication&quot;</span>);</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"> 760</span>&#160; ret = SSH_AUTH_ERROR;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>) {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Already authenticated&quot;</span>);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> == NULL) {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, <span class="stringliteral">&quot;Password is null&quot;</span>);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Password is null, returning&quot;</span>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; ret = ssh_userauth_password(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with SSH password returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH password, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH password. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH password, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a416a26d636d492c3530b6c5f0f04a623">REMMINA_SSH_AUTH_AGAIN</a>;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate with password. Error is %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with SSH password. %s&quot;</span>));</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;}</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00811"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a06d627fbf258c617a3ff3bd7b8086dee"> 811</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a06d627fbf258c617a3ff3bd7b8086dee">remmina_ssh_auth_pubkey</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;{</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; ssh_key key = NULL;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; ssh_key cert = NULL;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; gchar pubkey[132] = { 0 }; <span class="comment">// +&quot;.pub&quot;</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; gint ret;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>) <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</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; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH certificate file: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;File for private SSH key: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a> != NULL) {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">/* First we import the private key */</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">if</span> (ssh_pki_import_privkey_file(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>, (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> ? ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> : <span class="stringliteral">&quot;&quot;</span>),</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; NULL, NULL, &amp;key) != SSH_OK) {</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> == NULL || ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;No saved SSH password supplied. Asking user to enter it.&quot;</span>));</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; }</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; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; REMMINA_DEBUG (<span class="stringliteral">&quot;Imported private SSH key file&quot;</span>);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="comment">/* First we import the certificate */</span></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; ret = ssh_pki_import_cert_file(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>, &amp;cert );</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Certificate import returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;SSH certificate cannot be imported. %s&quot;</span>));</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;certificate imported correctly&quot;</span>);</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="comment">/* We copy th certificate in the private key */</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; ret = ssh_pki_copy_cert_to_privkey(cert, key);</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Copying the certificate into a key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;SSH certificate cannot be copied into the private SSH key. %s&quot;</span>));</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; ssh_key_free(cert);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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; REMMINA_DEBUG (<span class="stringliteral">&quot;%s certificate copied into the private SSH key&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="comment">/* We try to authenticate */</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; ret = ssh_userauth_try_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, cert);</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keywordflow">if</span> (ret != SSH_AUTH_SUCCESS &amp;&amp; ret != SSH_AUTH_AGAIN ) {</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Trying to authenticate with the new key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate using SSH certificate. %s&quot;</span>));</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; ssh_key_free(key);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; ssh_key_free(cert);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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; REMMINA_DEBUG (<span class="stringliteral">&quot;Authentication with a certificate file works, we can authenticate&quot;</span>);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;lbssh &gt;= 0.9.0 is required to authenticate with certificate file&quot;</span>);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="comment">/* if it goes well we authenticate (later on) with the key, not the cert*/</span></div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> == NULL) {</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>),</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; _(<span class="stringliteral">&quot;SSH identity file not selected.&quot;</span>));</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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"> 881</span>&#160; g_snprintf(pubkey, <span class="keyword">sizeof</span>(pubkey), <span class="stringliteral">&quot;%s.pub&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</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; <span class="comment">/*G_FILE_TEST_EXISTS*/</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keywordflow">if</span> (g_file_test(pubkey, G_FILE_TEST_EXISTS)) {</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; ret = ssh_pki_import_pubkey_file(pubkey, &amp;key);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Public SSH key cannot be imported. %s&quot;</span>));</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; ssh_key_free(key);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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; }</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordflow">if</span> (ssh_pki_import_privkey_file(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>, (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> ? ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> : <span class="stringliteral">&quot;&quot;</span>),</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; NULL, NULL, &amp;key) != SSH_OK) {</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> == NULL || ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;No saved SSH password supplied. Asking user to enter it.&quot;</span>));</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; }</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">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; }</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; }</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; ret = ssh_userauth_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, key);</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; ssh_key_free(key);</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; ssh_key_free(cert);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with public SSH key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</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; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;}</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00948"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#aa8aee72091b09cde34c0e0efadde719a"> 948</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#aa8aee72091b09cde34c0e0efadde719a">remmina_ssh_auth_auto_pubkey</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; gint ret;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; ret = ssh_userauth_publickey_auto(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> ? ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> : NULL));</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with public SSH key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; }</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate automatically with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate automatically with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;}</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00994"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a6e57a1b5ba4a3886c4cb79ece8894796"> 994</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a6e57a1b5ba4a3886c4cb79ece8894796">remmina_ssh_auth_agent</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;{</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; gint ret;</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; ret = ssh_userauth_agent(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL);</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with SSH agent returned: %d&quot;</span>, ret);</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"> 1002</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</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; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate automatically with SSH agent. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate automatically with SSH agent. %s&quot;</span>));</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; }</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;}</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l01040"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a0eb19f950b34b360b28243a0b1883d67"> 1040</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a0eb19f950b34b360b28243a0b1883d67">remmina_ssh_auth_gssapi</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;{</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; gint ret;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; ret = ssh_userauth_gssapi(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with SSH GSSAPI/Kerberos: %d&quot;</span>, ret);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate with SSH GSSAPI/Kerberos. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with SSH GSSAPI/Kerberos. %s&quot;</span>));</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;}</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l01085"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#aad84c6609cb431d48121ae5e0902441b"> 1085</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#aad84c6609cb431d48121ae5e0902441b">remmina_ssh_auth</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *password, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;{</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; gint method;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a> rv = <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1af9e9ce1f259cc359c6e5eb0dbaa090da">REMMINA_SSH_AUTH_NULL</a>;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">/* Check known host again to ensure it’s still the original server when user forks</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="comment"> * a new session from existing one */</span></div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="comment">/* TODO: Add error checking</span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OK: The server is known and has not changed.</span></div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_CHANGED: The server key has changed. Either you are under attack or the administrator changed the key. You HAVE to warn the user about a possible attack.</span></div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OTHER: The server gave use a key of a type while we had an other type recorded. It is a possible attack.</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_UNKNOWN: The server is unknown. User should confirm the public key hash is correct.</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_NOT_FOUND: The known host file does not exist. The host is thus unknown. File will be created if host key is accepted.</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_ERROR: There had been an error checking the host.</span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (ssh_session_is_known_server(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>) != SSH_KNOWN_HOSTS_OK) {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span> (ssh_is_server_known(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>) != SSH_SERVER_KNOWN_OK) {</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(ssh, _(<span class="stringliteral">&quot;The public SSH key changed!&quot;</span>));</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span> (password) {</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">if</span> (password != ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">if</span> (password != ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>) g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(password);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> = g_strdup(password);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; method = ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Methods supported by server: %s%s%s%s%s%s%s&quot;</span>,</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; (method &amp; SSH_AUTH_METHOD_NONE) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_NONE &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; (method &amp; SSH_AUTH_METHOD_UNKNOWN) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_UNKNOWN &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; (method &amp; SSH_AUTH_METHOD_PASSWORD) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_PASSWORD &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; (method &amp; SSH_AUTH_METHOD_PUBLICKEY) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_PUBLICKEY &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; (method &amp; SSH_AUTH_METHOD_HOSTBASED) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_HOSTBASED &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; (method &amp; SSH_AUTH_METHOD_INTERACTIVE) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_INTERACTIVE &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; (method &amp; SSH_AUTH_METHOD_GSSAPI_MIC) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_GSSAPI_MIC &quot;</span> : <span class="stringliteral">&quot;&quot;</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; );</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">switch</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>) {</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>:</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="comment">/* This authentication method is normally disabled on SSHv2 server. You should use keyboard-interactive mode. */</span></div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_PASSWORD (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>)</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_PASSWORD) {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH using remmina_ssh_auth_password&quot;</span>);</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#ad6f3f5c196175412049af0c440414e65">remmina_ssh_auth_password</a>(ssh);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; }</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> &amp;&amp; (method &amp; SSH_AUTH_METHOD_INTERACTIVE)) {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="comment">/* SSH server is requesting us to do interactive auth. */</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH using remmina_ssh_auth_interactive after password has failed&quot;</span>);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c">remmina_ssh_auth_interactive</a>(ssh);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; }</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; }</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host-based authentication method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User-based authentication method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; }</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with SSH password. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>:</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH using remmina_ssh_auth_interactive&quot;</span>);</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_INTERACTIVE) {</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c">remmina_ssh_auth_interactive</a>(ssh);</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; }</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host-based authentication method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User-based authentication method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; }</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; }</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with keyboard-interactive. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>:</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_PUBLICKEY (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_PUBLICKEY) {</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a06d627fbf258c617a3ff3bd7b8086dee">remmina_ssh_auth_pubkey</a>(ssh, gp, remminafile);</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; }</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; }</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; }</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; }</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="comment">// The real error here should be: &quot;The SSH server %s:%d does not support public key authentication&quot;</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a39a8dcea793c406f0fe90f3175c4318e">SSH_AUTH_AGENT</a>:</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_AGENT (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a6e57a1b5ba4a3886c4cb79ece8894796">remmina_ssh_auth_agent</a>(ssh);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; }</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; }</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; }</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a>:</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_AUTO_PUBLICKEY (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#aa8aee72091b09cde34c0e0efadde719a">remmina_ssh_auth_auto_pubkey</a>(ssh, gp, remminafile);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="comment">/* ssh_agent or none */</span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_PUBLICKEY) {</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; }</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; }</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; }</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="comment">// The real error here should be: &quot;The SSH server %s:%d does not support public key authentication&quot;</span></div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with automatic public SSH key. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="comment">/* Not yet supported by libssh */</span></div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_HOSTBASED:</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_HOSTBASED)</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="comment">//return remmina_ssh_auth_hostbased;</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a6264a71469928ad51fa802f65f1a934a">SSH_AUTH_GSSAPI</a>:</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_GSSAPI (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_GSSAPI_MIC) {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a0eb19f950b34b360b28243a0b1883d67">remmina_ssh_auth_gssapi</a>(ssh);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; }</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; }</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; }</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <span class="comment">// The real error here should be: &quot;The SSH server %s:%d does not support SSH GSSAPI/Kerberos authentication&quot;</span></div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with SSH GSSAPI/Kerberos. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; }</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <span class="comment">// We come here after a &quot;break&quot;. ssh-&gt;error should be already set</span></div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;}</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;<span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;<a class="code" href="remmina__ssh_8h.html#acf69725720378340e1a51c87e7638a7f">remmina_ssh_auth_gui</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;{</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; gchar *keyname;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; gchar *pwdfkey = NULL;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; gchar *message;</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; gchar *current_pwd;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; gchar *current_user;</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <span class="keyword">const</span> gchar *instruction = NULL;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; gint ret;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; guchar *pubkey;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; ssh_key server_pubkey;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; gboolean disablepasswordstoring;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; gboolean save_password;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; gint attempt;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="comment">/* Check if the server’s public key is known */</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <span class="comment">/* TODO: Add error checking</span></div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OK: The server is known and has not changed.</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_CHANGED: The server key has changed. Either you are under attack or the administrator changed the key. You HAVE to warn the user about a possible attack.</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OTHER: The server gave use a key of a type while we had an other type recorded. It is a possible attack.</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_UNKNOWN: The server is unknown. User should confirm the public key hash is correct.</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_NOT_FOUND: The known host file does not exist. The host is thus unknown. File will be created if host key is accepted.</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_ERROR: There had been an error checking the host.</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; ret = ssh_session_is_known_server(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_OK:</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">break</span>; <span class="comment">/* ok */</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <span class="comment">/* TODO: These are all wrong, we should deal with each of them */</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_CHANGED:</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_OTHER:</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_UNKNOWN:</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_NOT_FOUND:</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; ret = ssh_is_server_known(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_KNOWN_OK:</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <span class="keywordflow">break</span>; <span class="comment">/* ok */</span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="comment">/* fallback to SSH_SERVER_NOT_KNOWN behavior */</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_KNOWN_CHANGED:</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_FOUND_OTHER:</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_NOT_KNOWN:</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_FILE_NOT_FOUND:</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 8, 6)</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <span class="keywordflow">if</span> (ssh_get_server_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, &amp;server_pubkey) != SSH_OK) {</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not fetch the server\&#39;s public SSH key. %s&quot;</span>));</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_get_server_publickey() has failed&quot;</span>);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; }</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keywordflow">if</span> (ssh_get_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, &amp;server_pubkey) != SSH_OK) {</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not fetch public SSH key. %s&quot;</span>));</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_get_publickey() has failed&quot;</span>);</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <span class="keywordflow">if</span> (ssh_get_publickey_hash(server_pubkey, SSH_PUBLICKEY_HASH_MD5, &amp;pubkey, &amp;len) != 0) {</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; ssh_key_free(server_pubkey);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not fetch checksum of the public SSH key. %s&quot;</span>));</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_get_publickey_hash() has failed&quot;</span>);</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; }</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; ssh_key_free(server_pubkey);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; keyname = ssh_get_hexa(pubkey, len);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; <span class="keywordflow">if</span> (ret == SSH_KNOWN_HOSTS_UNKNOWN || ret == SSH_KNOWN_HOSTS_NOT_FOUND) {</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keywordflow">if</span> (ret == SSH_SERVER_NOT_KNOWN || ret == SSH_SERVER_FILE_NOT_FOUND) {</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; message = g_strdup_printf(<span class="stringliteral">&quot;%s\n%s\n\n%s&quot;</span>,</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; _(<span class="stringliteral">&quot;The server is unknown. The public key fingerprint is:&quot;</span>),</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; keyname,</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; _(<span class="stringliteral">&quot;Do you trust the new public key?&quot;</span>));</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; message = g_strdup_printf(<span class="stringliteral">&quot;%s\n%s\n\n%s&quot;</span>,</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; _(<span class="stringliteral">&quot;Warning: The server has changed its public key. This means you are either under attack,\n&quot;</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="stringliteral">&quot;or the administrator has changed the key. The new public key fingerprint is:&quot;</span>),</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; keyname,</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; _(<span class="stringliteral">&quot;Do you trust the new public key?&quot;</span>));</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; }</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#a9092c29f585fdabaf0ce7e865670053b">remmina_protocol_widget_panel_question_yesno</a>(gp, message);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; g_free(message);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; ssh_string_free_char(keyname);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; ssh_clean_pubkey_hash(&amp;pubkey);</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">if</span> (ret != GTK_RESPONSE_YES) <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; ssh_session_update_known_hosts(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; ssh_write_knownhost(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_ERROR:</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_ERROR:</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not check list of known SSH hosts. %s&quot;</span>));</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Could not check list of known SSH hosts&quot;</span>);</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; }</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <span class="keyword">enum</span> { REMMINA_SSH_AUTH_PASSWORD, REMMINA_SSH_AUTH_PKPASSPHRASE, REMMINA_SSH_AUTH_KRBTOKEN, REMMINA_SSH_AUTH_KBDINTERACTIVE } remmina_ssh_auth_type;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <span class="keywordflow">switch</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>) {</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>:</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; keyname = _(<span class="stringliteral">&quot;SSH password&quot;</span>);</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; pwdfkey = ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span> : <span class="stringliteral">&quot;password&quot;</span>;</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_PASSWORD;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>:</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a39a8dcea793c406f0fe90f3175c4318e">SSH_AUTH_AGENT</a>:</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a>:</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; keyname = _(<span class="stringliteral">&quot;Password for private SSH key&quot;</span>);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; pwdfkey = ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span> : <span class="stringliteral">&quot;ssh_passphrase&quot;</span>;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_PKPASSPHRASE;</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a6264a71469928ad51fa802f65f1a934a">SSH_AUTH_GSSAPI</a>:</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; keyname = _(<span class="stringliteral">&quot;SSH Kerberos/GSSAPI&quot;</span>);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; pwdfkey = ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_kerberos_token&quot;</span> : <span class="stringliteral">&quot;ssh_kerberos_token&quot;</span>;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_KRBTOKEN;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>:</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; instruction = _(<span class="stringliteral">&quot;Enter TOTP/OTP/2FA code&quot;</span>);</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_KBDINTERACTIVE;</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; }</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; disablepasswordstoring = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">&quot;disablepasswordstoring&quot;</span>, FALSE);</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; current_pwd = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, pwdfkey));</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="comment">/* Try existing password/passphrase first */</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; ret = <a class="code" href="remmina__ssh_8c.html#aad84c6609cb431d48121ae5e0902441b">remmina_ssh_auth</a>(ssh, current_pwd, gp, remminafile);</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Returned %d at 1st attempt with the following message:&quot;</span>, ret);</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;%s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="comment">/* It seems that functions like ssh_userauth_password() can only be called 3 times</span></div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;<span class="comment"> * on a ssh connection. And the 3rd failed attempt will block the calling thread forever.</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;<span class="comment"> * So we retry only 2 extra time authentication. */</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">for</span> (attempt = 0;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; attempt &lt; 2 &amp;&amp; ret == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; attempt++) {</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>)</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Retrying auth because %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">if</span> (remmina_ssh_auth_type == REMMINA_SSH_AUTH_PKPASSPHRASE) {</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(gp,</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; (disablepasswordstoring ? 0 :</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>),</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? _(<span class="stringliteral">&quot;SSH tunnel credentials&quot;</span>) : _(<span class="stringliteral">&quot;SSH credentials&quot;</span>),</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; NULL,</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, pwdfkey),</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; NULL,</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; _(<span class="stringliteral">&quot;Password for private SSH key&quot;</span>));</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; current_pwd = <a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(gp);</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; save_password = <a class="code" href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a>(gp);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="keywordflow">if</span> (save_password)</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, current_pwd);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, NULL);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; }</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (remmina_ssh_auth_type == REMMINA_SSH_AUTH_PASSWORD) {</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; <span class="comment">/* Ask for user credentials. Username cannot be changed here,</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="comment"> * because we already sent it when opening the connection */</span></div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Showing panel for password\n&quot;</span>);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; current_user = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span> : <span class="stringliteral">&quot;username&quot;</span>));</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(gp,</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; (disablepasswordstoring ? 0 : <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>)</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; | <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a10be0730fc3ea326856019ae139a922a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME</a></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; | (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? 0 : <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a1f63bf86b8f6da71137cf0a28ebf024a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME_READONLY</a>),</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? _(<span class="stringliteral">&quot;SSH tunnel credentials&quot;</span>) : _(<span class="stringliteral">&quot;SSH credentials&quot;</span>),</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; current_user,</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; current_pwd,</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; NULL,</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; NULL);</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; current_pwd = <a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(gp);</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; save_password = <a class="code" href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a>(gp);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keywordflow">if</span> (save_password)</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, current_pwd);</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, NULL);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> &amp;&amp; !ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a>) {</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; g_free(current_user);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; current_user = <a class="code" href="remmina__protocol__widget_8c.html#a96159bd8e9d70c74967e666e2f188df0">remmina_protocol_widget_get_username</a>(gp);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>, current_user);</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> != NULL) {</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = NULL;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; }</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(current_user);</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> != NULL) {</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; }</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(current_pwd);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; g_free(current_user);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ad56c3878c4a651b51fdb3d0e8b9cebd7">REMMINA_SSH_AUTH_RECONNECT</a>;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; }</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; g_free(current_user);</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; g_free(current_user);</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; }</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (remmina_ssh_auth_type == REMMINA_SSH_AUTH_KBDINTERACTIVE) {</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Showing panel for keyboard interactive login\n&quot;</span>);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; gp,</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; 0,</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; _(<span class="stringliteral">&quot;Keyboard interactive login, TOTP/OTP/2FA&quot;</span>),</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; NULL,</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; NULL,</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; NULL,</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; instruction);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; current_pwd = <a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(gp);</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;OTP code is: %s&quot;</span>, current_pwd);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(current_pwd);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; }</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; g_print(<span class="stringliteral">&quot;Unimplemented.&quot;</span>);</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; }</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Retrying authentication&quot;</span>);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; ret = <a class="code" href="remmina__ssh_8c.html#aad84c6609cb431d48121ae5e0902441b">remmina_ssh_auth</a>(ssh, current_pwd, gp, remminafile);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication attempt n° %d returned %d with the following message:&quot;</span>, attempt + 2, ret);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;%s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; g_free(current_pwd); current_pwd = NULL;</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; <span class="comment">/* After attempting the max number of times, REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment"> * becomes REMMINA_SSH_AUTH_FATAL_ERROR */</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="keywordflow">if</span> (ret == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a> || ret == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a416a26d636d492c3530b6c5f0f04a623">REMMINA_SSH_AUTH_AGAIN</a>) {</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH Authentication failed&quot;</span>);</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; ret = <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; }</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;}</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;remmina_ssh_log_callback(ssh_session session, <span class="keywordtype">int</span> priority, <span class="keyword">const</span> <span class="keywordtype">char</span> *message, <span class="keywordtype">void</span> *userdata)</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;{</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; REMMINA_DEBUG(message);</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;}</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;gboolean</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;<a class="code" href="remmina__ssh_8h.html#a624b8ac30ddcd00ebda0b51d504f5a33">remmina_ssh_init_session</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;{</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; gint verbosity;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; gint rc;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; gchar *parsed_config;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;<span class="preprocessor">#ifdef HAVE_NETINET_TCP_H</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; socket_t sshsock;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; gint optval;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; <span class="comment">// Handle IPv4 / IPv6 dual stack</span></div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <span class="keywordtype">char</span> *hostname;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="keyword">struct </span>addrinfo hints,*aitop,*ai;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordtype">char</span> ipstr[INET6_ADDRSTRLEN];</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="keywordtype">void</span> *addr4=NULL;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="keywordtype">void</span> *addr6=NULL;</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a> = g_new0(<span class="keyword">struct</span> ssh_callbacks_struct, 1);</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="comment">/* Init &amp; startup the SSH session */</span></div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server=%s port=%d is_tunnel=%s tunnel_entrance_host=%s tunnel_entrance_port=%d&quot;</span>,</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>,</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>,</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;Yes&quot;</span> : <span class="stringliteral">&quot;No&quot;</span>,</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = ssh_new();</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; <span class="comment">/* Tunnel sanity checks */</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> &amp;&amp; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> != NULL) {</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(<span class="stringliteral">&quot;Internal error in %s: is_tunnel and tunnel_entrance != NULL&quot;</span>, __func__);</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; REMMINA_DEBUG(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; }</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> &amp;&amp; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> == NULL) {</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(<span class="stringliteral">&quot;Internal error in %s: is_tunnel == false and tunnel_entrance == NULL&quot;</span>, __func__);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; REMMINA_DEBUG(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; <span class="comment">/* Set connection host/port */</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a>) {</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PORT, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to %s and SSH_OPTIONS_PORT to %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PORT, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to %s and SSH_OPTIONS_PORT to %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; }</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> &amp;&amp; *ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> != 0) {</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_IDENTITY, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_IDENTITY is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_IDENTITY is not set, by default the files “identity”, “id_dsa” and “id_rsa” are used.&quot;</span>);</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; }</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;<span class="preprocessor">#ifdef SNAP_BUILD</span></div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_SSH_DIR, g_strdup_printf(<span class="stringliteral">&quot;%s/.ssh&quot;</span>, g_getenv(<span class="stringliteral">&quot;SNAP_USER_COMMON&quot;</span>)));</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; ssh_callbacks_init(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__log_8c.html#a96f5bb72acbdcbf8793b4a5f4a6132b5">remmina_log_running</a>()) {</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; verbosity = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aac4f34f297a653052752b571777bc001">ssh_loglevel</a>;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_LOG_VERBOSITY, &amp;verbosity);</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>-&gt;log_function = remmina_ssh_log_callback;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <span class="comment">/* Reset libssh legacy userdata. This is a workaround for a libssh bug */</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; ssh_set_log_userdata(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>-&gt;userdata = ssh;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; ssh_set_callbacks(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>);</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <span class="comment">/* As the latest parse the ~/.ssh/config file */</span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keywordflow">if</span> (g_strcmp0(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, <span class="stringliteral">&quot;127.0.0.1&quot;</span>) == 0) {</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_HOST temporary set to the destination host as ssh-&gt;tunnel_entrance_host is 127.0.0.1,&quot;</span>);</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; }</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1d7deb091e0d51a8d7885ad9e22dc9a7">ssh_parseconfig</a>) {</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="keywordflow">if</span> (ssh_options_parse_config(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL) == 0)</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_config have been correctly parsed&quot;</span>);</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot parse ssh_config: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; }</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="keywordflow">if</span> (g_strcmp0(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, <span class="stringliteral">&quot;127.0.0.1&quot;</span>) == 0) {</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to ssh-&gt;tunnel_entrance_host is 127.0.0.1,&quot;</span>);</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>);</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; }</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> || *ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> == 0) {</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_USER, &amp;parsed_config);</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>)</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_USER returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; }</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; }</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_USER, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_USER is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <span class="comment">/* SSH_OPTIONS_PROXYCOMMAND */</span></div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PROXYCOMMAND, &amp;parsed_config);</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_PROXYCOMMAND returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; }</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PROXYCOMMAND, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_PROXYCOMMAND is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_PROXYCOMMAND does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; <span class="comment">/* SSH_OPTIONS_HOSTKEYS */</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOSTKEYS, &amp;parsed_config);</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_HOSTKEYS returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; }</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOSTKEYS, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_HOSTKEYS is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_HOSTKEYS does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="comment">/* SSH_OPTIONS_KEY_EXCHANGE */</span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_KEY_EXCHANGE, &amp;parsed_config);</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_KEY_EXCHANGE returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; }</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_KEY_EXCHANGE, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_KEY_EXCHANGE is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_KEY_EXCHANGE does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; <span class="comment">/* SSH_OPTIONS_CIPHERS_C_S */</span></div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_CIPHERS_C_S, &amp;parsed_config);</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_CIPHERS_C_S returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; }</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_CIPHERS_C_S, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_CIPHERS_C_S has been set to %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_CIPHERS_C_S does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; <span class="comment">/* SSH_OPTIONS_STRICTHOSTKEYCHECK */</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_STRICTHOSTKEYCHECK, &amp;parsed_config);</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a> = atoi(parsed_config);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_STRICTHOSTKEYCHECK returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; }</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_STRICTHOSTKEYCHECK, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_STRICTHOSTKEYCHECK is now %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_STRICTHOSTKEYCHECK does not have a valid value. %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <span class="comment">/* SSH_OPTIONS_COMPRESSION */</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_COMPRESSION, &amp;parsed_config);</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_COMPRESSION returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; }</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_COMPRESSION, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_COMPRESSION is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_COMPRESSION does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; <span class="comment">// Handle the dual IPv4 / IPv6 stack</span></div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <span class="comment">// Prioritize IPv6 and fallback to IPv4</span></div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; <span class="comment">// Run the DNS resolution </span></div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <span class="comment">// First retrieve host from the ssh-&gt;session structure</span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, &amp;hostname);</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; <span class="comment">// Call getaddrinfo</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; memset(&amp;hints, 0, <span class="keyword">sizeof</span>(hints));</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; hints.ai_family = AF_UNSPEC;</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; hints.ai_socktype = SOCK_STREAM;</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; <span class="keywordflow">if</span> ((getaddrinfo(hostname, NULL, &amp;hints, &amp;aitop)) != 0) {</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(<span class="stringliteral">&quot;Could not resolve hostname %s&quot;</span>, hostname);</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; REMMINA_DEBUG(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; }</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; <span class="comment">// We have one or more addesses now, extract them</span></div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; ai = aitop;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; <span class="keywordflow">while</span> (ai != NULL) {</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; <span class="keywordflow">if</span> (ai-&gt;ai_family == AF_INET) { <span class="comment">// IPv4</span></div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <span class="keyword">struct </span>sockaddr_in *ipv4 = (<span class="keyword">struct </span>sockaddr_in *)ai-&gt;ai_addr;</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; addr4 = &amp;(ipv4-&gt;sin_addr);</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; } <span class="keywordflow">else</span> { <span class="comment">// IPv6</span></div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <span class="keyword">struct </span>sockaddr_in6 *ipv6 = (<span class="keyword">struct </span>sockaddr_in6 *)ai-&gt;ai_addr;</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; addr6 = &amp;(ipv6-&gt;sin6_addr);</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; }</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; ai = ai-&gt;ai_next;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; }</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; freeaddrinfo(aitop);</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <span class="keywordtype">int</span> success6 = 0;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; <span class="keywordflow">if</span> (addr6 != NULL) {</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <span class="comment">// Try IPv6 first</span></div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; inet_ntop(AF_INET6, addr6, ipstr, <span class="keyword">sizeof</span> ipstr);</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ipstr);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to IPv6 %s&quot;</span>, ipstr);</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; <span class="keywordflow">if</span> (ssh_connect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>)) {</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; ssh_disconnect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;IPv6 session failed&quot;</span>);</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; success6 = 1;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;IPv6 session success !&quot;</span>);</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; }</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; }</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; <span class="keywordflow">if</span> (success6 == 0) {</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="comment">// Fallback to IPv4 </span></div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; inet_ntop(AF_INET, addr4, ipstr, <span class="keyword">sizeof</span> ipstr);</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ipstr);</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to IPv4 %s&quot;</span>, ipstr);</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; <span class="keywordflow">if</span> (ssh_connect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>)) {</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not start SSH session. %s&quot;</span>));</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; }</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; }</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;<span class="preprocessor">#ifdef HAVE_NETINET_TCP_H</span></div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; <span class="comment">/* Set keepalive on SSH socket, so we can keep firewalls awaken and detect</span></div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;<span class="comment"> * when we loss the tunnel */</span></div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; sshsock = ssh_get_fd(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; <span class="keywordflow">if</span> (sshsock &gt;= 0) {</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; optval = 1;</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, SOL_SOCKET, SO_KEEPALIVE, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP KeepAlive not set&quot;</span>);</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP KeepAlive enabled&quot;</span>);</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;<span class="preprocessor">#ifdef TCP_KEEPIDLE</span></div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a2bf96a40b9f63300d02e158b26546203">ssh_tcp_keepidle</a>;</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_KEEPIDLE, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPIDLE not set&quot;</span>);</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPIDLE set to %i&quot;</span>, optval);</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;<span class="preprocessor">#ifdef TCP_KEEPCNT</span></div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a082f698b8aa7cec3c1cb0fd987d4358f">ssh_tcp_keepcnt</a>;</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_KEEPCNT, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPCNT not set&quot;</span>);</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPCNT set to %i&quot;</span>, optval);</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;<span class="preprocessor">#ifdef TCP_KEEPINTVL</span></div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a793ae9c3e2f88eed85551c85d6832ebd">ssh_tcp_keepintvl</a>;</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_KEEPINTVL, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPINTVL not set&quot;</span>);</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPINTVL set to %i&quot;</span>, optval);</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;<span class="preprocessor">#ifdef TCP_USER_TIMEOUT</span></div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad92d70d47d7ad80298efe591955fa8b8">ssh_tcp_usrtimeout</a>;</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_USER_TIMEOUT, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_USER_TIMEOUT not set&quot;</span>);</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_USER_TIMEOUT set to %i&quot;</span>, optval);</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; }</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; <span class="comment">/* Try the &quot;none&quot; authentication */</span></div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; <span class="keywordflow">if</span> (ssh_userauth_none(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL) == SSH_AUTH_SUCCESS)</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;}</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;gboolean</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;<a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gboolean is_tunnel)</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;{</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="keyword">const</span> gchar *username;</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; <span class="keyword">const</span> gchar *privatekey;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <span class="keyword">const</span> gchar *server;</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; gchar *s;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = NULL;</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a> = NULL;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = NULL;</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> = NULL;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> = is_tunnel;</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; pthread_mutex_init(&amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a547feb6e46dfb8e37a4eb338c17d7b52">ssh_mutex</a>, NULL);</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> = NULL;</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a> = 0;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; username = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span> : <span class="stringliteral">&quot;username&quot;</span>);</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; privatekey = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span> : <span class="stringliteral">&quot;ssh_privatekey&quot;</span>);</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span> : <span class="stringliteral">&quot;ssh_certfile&quot;</span>));</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <span class="comment">/* The ssh-&gt;server and ssh-&gt;port values */</span></div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; <span class="keywordflow">if</span> (is_tunnel) {</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;We are initializing an SSH tunnel session&quot;</span>);</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>);</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; <span class="keywordflow">if</span> (server == NULL || server[0] == 0) {</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="comment">// ssh_tunnel_server empty or invalid, we are opening a tunnel, it means that &quot;Same server at port 22&quot; has been selected</span></div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>);</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; <span class="keywordflow">if</span> (server == NULL || server[0] == 0)</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; server = <span class="stringliteral">&quot;localhost&quot;</span>;</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 22, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a> = 22;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 22, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; }</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server:port = %s, server = %s, port = %d&quot;</span>, server, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;We are initializing an SSH session&quot;</span>);</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>);</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <span class="keywordflow">if</span> (server == NULL || server[0] == 0)</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; server = <span class="stringliteral">&quot;localhost&quot;</span>;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 22, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server:port = %s, server = %s, port = %d&quot;</span>, server, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; }</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <span class="comment">// ???</span></div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 0, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, NULL);</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; }</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Initialized SSH struct from file with ssh-&gt;server = %s and SSH-&gt;port = %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(username ? username : NULL);</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span> : <span class="stringliteral">&quot;ssh_auth&quot;</span>, 0);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_charset&quot;</span>));</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_kex_algorithms&quot;</span> : <span class="stringliteral">&quot;ssh_kex_algorithms&quot;</span>));</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_ciphers&quot;</span> : <span class="stringliteral">&quot;ssh_ciphers&quot;</span>));</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_hostkeytypes&quot;</span> : <span class="stringliteral">&quot;ssh_hostkeytypes&quot;</span>));</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_proxycommand&quot;</span> : <span class="stringliteral">&quot;ssh_proxycommand&quot;</span>));</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_stricthostkeycheck&quot;</span> : <span class="stringliteral">&quot;ssh_stricthostkeycheck&quot;</span>, 0);</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; gint c = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_compression&quot;</span> : <span class="stringliteral">&quot;ssh_compression&quot;</span>, 0);</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a> = (c == 1) ? <span class="stringliteral">&quot;yes&quot;</span> : <span class="stringliteral">&quot;no&quot;</span>;</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;user: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;password: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;auth: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;charset: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>);</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;kex_algorithms: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;ciphers: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;hostkeytypes: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;proxycommand: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;stricthostkeycheck: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;compression: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; <span class="comment">/* Public/Private keys */</span></div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; s = (privatekey ? g_strdup(privatekey) : <a class="code" href="remmina__ssh_8c.html#ab6d8bdad543b3caead2b2b0339484798">remmina_ssh_find_identity</a>());</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; <span class="keywordflow">if</span> (s) {</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> = <a class="code" href="remmina__ssh_8c.html#a72a58e416c4eeb9d17eaf76360ebee42">remmina_ssh_identity_path</a>(s);</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;privkeyfile: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; g_free(s);</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> = NULL;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; }</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;}</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;<span class="keyword">static</span> gboolean</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;remmina_ssh_init_from_ssh(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> <a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh_src)</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;{</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = NULL;</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = NULL;</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; pthread_mutex_init(&amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a547feb6e46dfb8e37a4eb338c17d7b52">ssh_mutex</a>, NULL);</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a>;</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> ? ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> : NULL);</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>);</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>);</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>;</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>);</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>;</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;}</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;gchar *</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;<a class="code" href="remmina__ssh_8h.html#a09bd4aee40b6e8d6ba8ffaa84dc95330">remmina_ssh_convert</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *from)</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;{</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; gchar *to = NULL;</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> &amp;&amp; from)</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; to = g_convert(from, -1, <span class="stringliteral">&quot;UTF-8&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>, NULL, NULL, NULL);</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="keywordflow">if</span> (!to) to = g_strdup(from);</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; <span class="keywordflow">return</span> to;</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;}</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;gchar *</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;<a class="code" href="remmina__ssh_8h.html#aeccf94afb57bcad37b4241d45fcb3fea">remmina_ssh_unconvert</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *from)</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;{</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; gchar *to = NULL;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> &amp;&amp; from)</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; to = g_convert(from, -1, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>, <span class="stringliteral">&quot;UTF-8&quot;</span>, NULL, NULL, NULL);</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <span class="keywordflow">if</span> (!to) to = g_strdup(from);</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; <span class="keywordflow">return</span> to;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;}</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;<a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;{</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>) {</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Disconnecting SSH session&quot;</span>);</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; ssh_disconnect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; ssh_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = NULL;</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>);</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>);</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; pthread_mutex_destroy(&amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a547feb6e46dfb8e37a4eb338c17d7b52">ssh_mutex</a>);</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; g_free(ssh);</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;}</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<span class="comment">* SSH Tunnel *</span></div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;<span class="keyword">struct </span>_RemminaSSHTunnelBuffer {</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; gchar * data;</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; gchar * ptr;</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; ssize_t len;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;};</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;<span class="keyword">static</span> <a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;remmina_ssh_tunnel_buffer_new(ssize_t len)</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;{</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; <a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *buffer;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; buffer = g_new(<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a>, 1);</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; buffer-&gt;data = (gchar *)g_malloc(len);</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; buffer-&gt;ptr = buffer-&gt;data;</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; buffer-&gt;len = len;</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; <span class="keywordflow">return</span> buffer;</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;}</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;remmina_ssh_tunnel_buffer_free(<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *buffer)</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;{</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; <span class="keywordflow">if</span> (buffer) {</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; g_free(buffer-&gt;data);</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; g_free(buffer);</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; }</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;}</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;<a class="code" href="remmina__ssh_8h.html#abf04fd329ab77bbd4f6aa1cb1eaa349d">remmina_ssh_tunnel_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;{</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; tunnel = g_new(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a>, 1);</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; <a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(REMMINA_SSH(tunnel), remminafile, TRUE);</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = -1;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a> = NULL;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a> = NULL;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a> = NULL;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> = 0;</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a> = 0;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = -1;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a> = NULL;</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> = 0;</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a> = NULL;</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a> = 0;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a> = NULL;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> = 0;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a> = NULL;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> = NULL;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a> = NULL;</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a> = NULL;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a> = NULL;</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; <span class="keywordflow">return</span> tunnel;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;}</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;remmina_ssh_tunnel_close_all_channels(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;{</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>; i++) {</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i]);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; remmina_ssh_tunnel_buffer_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; ssh_channel_close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i]);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; ssh_channel_send_eof(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i]);</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; ssh_channel_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i]);</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; }</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>);</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a> = NULL;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>);</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a> = NULL;</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>);</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a> = NULL;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> = 0;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a> = 0;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;}</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;remmina_ssh_tunnel_remove_channel(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gint n)</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;{</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; ssh_channel_close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n]);</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; ssh_channel_send_eof(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n]);</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; ssh_channel_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n]);</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[n]);</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; remmina_ssh_tunnel_buffer_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[n]);</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>--;</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n] = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>];</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>] = NULL;</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[n] = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>];</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[n] = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>];</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;}</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;<span class="comment">/* Register the new channel/socket pair */</span></div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;remmina_ssh_tunnel_add_channel(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, gint sock)</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;{</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160; gint flags;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; gint i;</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; i = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>++;</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> &gt; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a>) {</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160; <span class="comment">/* Allocate an extra NULL pointer in channels for ssh_select */</span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a> = (ssh_channel *)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>,</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160; <span class="keyword">sizeof</span>(ssh_channel) * (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> + 1));</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a> = (gint *)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>,</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160; <span class="keyword">sizeof</span>(gint) * tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>);</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a> = (<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> **)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>,</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *) * tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>);</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a> = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>;</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a> = (ssh_channel *)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a>,</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; <span class="keyword">sizeof</span>(ssh_channel) * (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> + 1));</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; }</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i] = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i + 1] = NULL;</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i] = sock;</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i] = NULL;</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160; flags = fcntl(sock, F_GETFL, 0);</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160; fcntl(sock, F_SETFL, flags | O_NONBLOCK);</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;}</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;remmina_ssh_tunnel_accept_local_connection(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gboolean blocking)</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;{</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160; gint sock, sock_flags;</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; sock_flags = fcntl(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>, F_GETFL, 0);</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160; <span class="keywordflow">if</span> (blocking)</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160; sock_flags &amp;= ~O_NONBLOCK;</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; sock_flags |= O_NONBLOCK;</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; fcntl(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>, F_SETFL, sock_flags);</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160; <span class="comment">/* Accept a local connection */</span></div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; sock = accept(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>, NULL, NULL);</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160; <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; <span class="keywordflow">if</span> (blocking) {</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; g_free(REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(<span class="stringliteral">&quot;Local socket not accepted&quot;</span>);</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160; }</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160; }</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160; <span class="keywordflow">return</span> sock;</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;}</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;<span class="keyword">static</span> ssh_channel</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;remmina_ssh_tunnel_create_forward_channel(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;{</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; ssh_channel channel = NULL;</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160; channel = ssh_channel_new(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad9887ee0673a2b0b03b091746ae02d23">ssh</a>.<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not create channel. %s&quot;</span>));</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; }</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160; <span class="comment">/* Request the SSH server to connect to the destination */</span></div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH tunnel destination is %s&quot;</span>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a>);</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; <span class="keywordflow">if</span> (ssh_channel_open_forward(channel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>, <span class="stringliteral">&quot;127.0.0.1&quot;</span>, 0) != SSH_OK) {</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not connect to SSH tunnel. %s&quot;</span>));</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; }</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160;</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;}</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;<span class="keyword">static</span> gpointer</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;remmina_ssh_tunnel_main_thread_proc(gpointer data)</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;{</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)data;</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; gchar *ptr;</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; ssize_t len = 0, lenw = 0;</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; fd_set <span class="keyword">set</span>;</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; <span class="keyword">struct </span>timeval timeout;</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160; g_autoptr(GDateTime) t1 = NULL;</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; g_autoptr(GDateTime) t2 = NULL;</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; GTimeSpan diff; <span class="comment">// microseconds</span></div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; ssh_channel channel = NULL;</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; gboolean first = TRUE;</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; gboolean disconnected;</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; gint sock;</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; gint maxfd;</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; gint i;</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160; gint ret;</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160; <span class="keyword">struct </span>sockaddr_in sin;</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; t1 = g_date_time_new_now_local();</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; t2 = g_date_time_new_now_local();</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160;</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; <span class="keywordflow">switch</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a>) {</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798a78cac65c66c1f72592488c7c5728ea14">REMMINA_SSH_TUNNEL_OPEN</a>:</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; sock = remmina_ssh_tunnel_accept_local_connection(tunnel, TRUE);</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160; <span class="keywordflow">if</span> (tunnel)</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; }</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; channel = remmina_ssh_tunnel_create_forward_channel(tunnel);</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; <span class="keywordflow">if</span> (!tunnel) {</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; close(sock);</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; remmina_ssh_tunnel_add_channel(tunnel, channel, sock);</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a>:</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; <span class="comment">/* Detect the next available port starting from 6010 on the server */</span></div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; <span class="keywordflow">for</span> (i = 10; i &lt;= MAX_X_DISPLAY_NUMBER; i++) {</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; <span class="keywordflow">if</span> (ssh_channel_listen_forward(REMMINA_SSH(tunnel)-&gt;session, (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> ? <span class="stringliteral">&quot;localhost&quot;</span> : NULL), 6000 + i, NULL)) {</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> = i;</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; }</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; <span class="keywordflow">if</span> (ssh_forward_listen(REMMINA_SSH(tunnel)-&gt;session, (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> ? <span class="stringliteral">&quot;localhost&quot;</span> : NULL), 6000 + i, NULL)) {</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> = i;</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; }</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160; }</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> &lt; 1) {</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not request port forwarding. %s&quot;</span>));</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160; }</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> &amp;&amp;</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160; !(*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>)) {</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160; }</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>:</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160; <span class="keywordflow">if</span> (ssh_channel_listen_forward(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>, NULL)) {</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not request port forwarding. %s&quot;</span>));</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; }</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160; <span class="keywordflow">if</span> (ssh_forward_listen(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>, NULL)) {</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not request port forwarding. %s&quot;</span>));</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160; }</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> &amp;&amp;</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; !(*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>)) {</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; }</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160; }</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a> = 10240;</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a> = g_malloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a>);</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <span class="comment">/* Start the tunnel data transmission */</span></div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; <span class="keywordflow">while</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) {</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a> ||</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; <span class="keywordflow">if</span> (first) {</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; first = FALSE;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; channel = ssh_channel_accept_forward(REMMINA_SSH(tunnel)-&gt;session, 15000, &amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;The server did not respond.&quot;</span>));</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; }</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a>)</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; <span class="comment">/* For reverse tunnel, we only need one connection. */</span></div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; ssh_channel_cancel_forward(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; ssh_forward_cancel(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; }</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> != <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; <span class="comment">/* Poll once per some period of time if no incoming connections.</span></div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160;<span class="comment"> * Don’t try to poll continuously as it will significantly slow down the loop */</span></div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; t1 = g_date_time_new_now_local();</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; diff = g_date_time_difference(t1, t2) * 10000000</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; + g_date_time_difference(t1, t2) / 100000;</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; <span class="keywordflow">if</span> (diff &gt; 1) {</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Polling tunnel channels&quot;</span>);</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; channel = ssh_channel_accept_forward(REMMINA_SSH(tunnel)-&gt;session, 0, &amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160; <span class="keywordflow">if</span> (channel == NULL)</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; t2 = g_date_time_new_now_local();</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; }</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; }</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; <span class="keywordflow">if</span> (channel) {</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; sin.sin_family = AF_INET;</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160; sin.sin_port = htons(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ae41b6af92643cfbcd3e13275f4281260">localport</a>);</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</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="l02477"></a><span class="lineno"> 2477</span>&#160; sock = socket(AF_INET, SOCK_STREAM, 0);</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160; <span class="keywordflow">if</span> (connect(sock, (<span class="keyword">struct</span> sockaddr *)&amp;sin, <span class="keyword">sizeof</span>(sin)) &lt; 0) {</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel),</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; _(<span class="stringliteral">&quot;Cannot connect to local port %i.&quot;</span>), tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ae41b6af92643cfbcd3e13275f4281260">localport</a>);</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160; close(sock);</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; sock = -1;</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; }</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; sock = <a class="code" href="remmina__public_8c.html#a52656bbe00a83068f36337f449bdc767">remmina_public_open_xdisplay</a>(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>);</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160; <span class="keywordflow">if</span> (sock &gt;= 0)</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160; remmina_ssh_tunnel_add_channel(tunnel, channel, sock);</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160; <span class="comment">/* Failed to create unix socket. Will this happen? */</span></div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160; }</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160; channel = NULL;</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160; }</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160; }</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> &lt;= 0)</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160; <span class="comment">/* No more connections. We should quit */</span></div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160; timeout.tv_sec = 0;</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160; timeout.tv_usec = 200000;</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160; FD_ZERO(&amp;<span class="keyword">set</span>);</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160; maxfd = 0;</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>; i++) {</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i] &gt; maxfd)</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160; maxfd = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i];</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160; FD_SET(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], &amp;<span class="keyword">set</span>);</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160; }</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; ret = ssh_select(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a>, maxfd + 1, &amp;<span class="keyword">set</span>, &amp;timeout);</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; <span class="keywordflow">if</span> (!tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160; <span class="keywordflow">if</span> (ret == SSH_EINTR) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; <span class="keywordflow">if</span> (ret == -1) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160; i = 0;</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; <span class="keywordflow">while</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> &amp;&amp; i &lt; tunnel-&gt;num_channels) {</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160; disconnected = FALSE;</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160; <span class="keywordflow">if</span> (FD_ISSET(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], &amp;<span class="keyword">set</span>)) {</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; <span class="keywordflow">while</span> (!disconnected &amp;&amp;</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160; (len = read(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a>)) &gt; 0) {</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160; <span class="keywordflow">for</span> (ptr = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a>, lenw = 0; len &gt; 0; len -= lenw, ptr += lenw) {</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; lenw = ssh_channel_write(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i], (<span class="keywordtype">char</span> *)ptr, len);</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160; <span class="keywordflow">if</span> (lenw &lt;= 0) {</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not write to SSH channel. %s&quot;</span>));</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160; }</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160; }</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160; }</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160; <span class="keywordflow">if</span> (len == 0) {</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not read from tunnel listening socket. %s&quot;</span>));</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160; }</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160; }</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160; <span class="keywordflow">if</span> (disconnected) {</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;tunnel disconnected because %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160; remmina_ssh_tunnel_remove_channel(tunnel, i);</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160; }</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160; i++;</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; }</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160; <span class="keywordflow">if</span> (!tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; i = 0;</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160; <span class="keywordflow">while</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> &amp;&amp; i &lt; tunnel-&gt;num_channels) {</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160; disconnected = FALSE;</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; <span class="keywordflow">if</span> (!tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]) {</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; len = ssh_channel_poll(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i], 0);</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; <span class="keywordflow">if</span> (len == SSH_ERROR || len == SSH_EOF) {</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not poll SSH channel. %s&quot;</span>));</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len &gt; 0) {</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i] = remmina_ssh_tunnel_buffer_new(len);</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160; len = ssh_channel_read_nonblocking(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i], tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;data, len, 0);</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160; <span class="keywordflow">if</span> (len &lt;= 0) {</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not read SSH channel in a non-blocking way. %s&quot;</span>));</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len = len;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160; }</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160; }</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160; }</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; <span class="keywordflow">if</span> (!disconnected &amp;&amp; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]) {</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; <span class="keywordflow">for</span> (lenw = 0; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len &gt; 0;</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len -= lenw, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;ptr += lenw) {</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160; lenw = write(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;ptr, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len);</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160; <span class="keywordflow">if</span> (lenw == -1 &amp;&amp; errno == EAGAIN &amp;&amp; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>)</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</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="l02577"></a><span class="lineno"> 2577</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="l02578"></a><span class="lineno"> 2578</span>&#160;<span class="comment"> * break, leave the buffer there, and continue with other data */</span></div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160; <span class="keywordflow">if</span> (lenw &lt;= 0) {</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not send data to tunnel listening socket. %s&quot;</span>));</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; }</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; }</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len &lt;= 0) {</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160; remmina_ssh_tunnel_buffer_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]);</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i] = NULL;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; }</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; }</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; <span class="keywordflow">if</span> (disconnected) {</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Connection to SSH tunnel dropped. %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160; remmina_ssh_tunnel_remove_channel(tunnel, i);</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160; }</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; i++;</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; }</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160; sock = remmina_ssh_tunnel_accept_local_connection(tunnel, FALSE);</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160; <span class="keywordflow">if</span> (sock &gt; 0) {</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160; channel = remmina_ssh_tunnel_create_forward_channel(tunnel);</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Could not open new SSH connection. %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160; close(sock);</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; <span class="comment">/* Leave thread loop */</span></div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; remmina_ssh_tunnel_add_channel(tunnel, channel, sock);</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160; }</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160; }</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160; }</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; remmina_ssh_tunnel_close_all_channels(tunnel);</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160; <span class="comment">/* Notify tunnel owner of disconnection */</span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;}</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;<span class="keyword">static</span> gboolean remmina_ssh_notify_tunnel_main_thread_end(gpointer data)</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;{</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)data;</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160; <span class="comment">/* Ask tunnel owner to destroy tunnel object */</span></div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a1e1f1bfaec497b1365ea70ebe795d778">destroy_func</a>)</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a1e1f1bfaec497b1365ea70ebe795d778">destroy_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a33ae9b7cd8cb3dcd85223017dfd13795">destroy_func_callback_data</a>);</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;}</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;<span class="keyword">static</span> gpointer</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;remmina_ssh_tunnel_main_thread(gpointer data)</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;{</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)data;</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160; <span class="keywordflow">while</span> (TRUE) {</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160; remmina_ssh_tunnel_main_thread_proc(data);</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> &lt; 0 || tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> == 0 || !tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160; }</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160;</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160; <span class="comment">/* Do after tunnel thread cleanup */</span></div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160; IDLE_ADD((GSourceFunc)remmina_ssh_notify_tunnel_main_thread_end, (gpointer)tunnel);</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160;</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;}</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;<a class="code" href="remmina__ssh_8h.html#ae9f52b1a3a545acae8c93007e20ec909">remmina_ssh_tunnel_cancel_accept</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;{</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> &gt;= 0) {</div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>);</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = -1;</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160; }</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160;}</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160;</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160;gboolean</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160;<a class="code" href="remmina__ssh_8h.html#a52b3f47eac79f2781ba81d61505f4f53">remmina_ssh_tunnel_open</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, <span class="keyword">const</span> gchar *host, gint port, gint local_port)</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160;{</div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160; gint sock;</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160; gint sockopt = 1;</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160; <span class="keyword">struct </span>sockaddr_in sin;</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798a78cac65c66c1f72592488c7c5728ea14">REMMINA_SSH_TUNNEL_OPEN</a>;</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a> = g_strdup(host);</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> = port;</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> == 0) {</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Assign a destination port.&quot;</span>));</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; }</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160; <span class="comment">/* Create the server socket that listens on the local port */</span></div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160; sock = socket(AF_INET, SOCK_STREAM, 0);</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160; <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not create socket.&quot;</span>));</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160; }</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &amp;sockopt, <span class="keyword">sizeof</span>(sockopt));</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160; sin.sin_family = AF_INET;</div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160; sin.sin_port = htons(local_port);</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</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="l02699"></a><span class="lineno"> 2699</span>&#160;</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</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="l02701"></a><span class="lineno"> 2701</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not bind server socket to local port.&quot;</span>));</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160; close(sock);</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; }</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160; <span class="keywordflow">if</span> (listen(sock, 1)) {</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not listen to local port.&quot;</span>));</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160; close(sock);</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160; }</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160;</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = sock;</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = TRUE;</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160; <span class="keywordflow">if</span> (pthread_create(&amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>, NULL, remmina_ssh_tunnel_main_thread, tunnel)) {</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; <span class="comment">// TRANSLATORS: Do not translate pthread</span></div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not start pthread.&quot;</span>));</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160; }</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;}</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;gboolean</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;<a class="code" href="remmina__ssh_8h.html#aba49db2ced40e21e8adfad69dcfda2c4">remmina_ssh_tunnel_xport</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gboolean bindlocalhost)</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;{</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a>;</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> = bindlocalhost;</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = TRUE;</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160;</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; <span class="keywordflow">if</span> (pthread_create(&amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>, NULL, remmina_ssh_tunnel_main_thread, tunnel)) {</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160; <span class="comment">// TRANSLATORS: Do not translate pthread</span></div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not start pthread.&quot;</span>));</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160; }</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;}</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;gboolean</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;<a class="code" href="remmina__ssh_8h.html#ae47c8270267b02b9c0ff5b36074101c2">remmina_ssh_tunnel_reverse</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gint port, gint local_port)</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;{</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>;</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> = port;</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ae41b6af92643cfbcd3e13275f4281260">localport</a> = local_port;</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = TRUE;</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160;</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160; <span class="keywordflow">if</span> (pthread_create(&amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>, NULL, remmina_ssh_tunnel_main_thread, tunnel)) {</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160; <span class="comment">// TRANSLATORS: Do not translate pthread</span></div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not start pthread.&quot;</span>));</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160; }</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;}</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160;gboolean</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;<a class="code" href="remmina__ssh_8h.html#aeb20d31243a4d30e469a34fe01684e38">remmina_ssh_tunnel_terminated</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;{</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160; <span class="keywordflow">return</span> tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> == 0;</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;}</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;<a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;{</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160;</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;tunnel-&gt;thread = %lX\n&quot;</span>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>);</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160; thread = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>;</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160; <span class="keywordflow">if</span> (thread != 0) {</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160; pthread_cancel(thread);</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160; pthread_join(thread, NULL);</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160; }</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a> &amp;&amp; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> &gt; 0) {</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160; ssh_channel_cancel_forward(REMMINA_SSH(tunnel)-&gt;session, NULL, 6000 + tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a>);</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160; ssh_forward_cancel(REMMINA_SSH(tunnel)-&gt;session, NULL, 6000 + tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a>);</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160; }</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> &gt;= 0) {</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>);</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = -1;</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160; }</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160; remmina_ssh_tunnel_close_all_channels(tunnel);</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a>);</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a>);</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a>);</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>);</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160; <a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>((<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *)tunnel);</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;}</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;<span class="comment">* SSH SFTP *</span></div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160;<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;<a class="code" href="remmina__ssh_8h.html#a3d7138d9cbbe44aea15440436ce85d6e">remmina_sftp_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160;{</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160; <a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp;</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160; sftp = g_new(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a>, 1);</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160; <a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(REMMINA_SSH(sftp), remminafile, FALSE);</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = NULL;</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160; <span class="keywordflow">return</span> sftp;</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;}</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;<a class="code" href="remmina__ssh_8h.html#a1500d65d1f0751812f237c1cb4d15188">remmina_sftp_new_from_ssh</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;{</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160; <a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp;</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160; sftp = g_new(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a>, 1);</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160; remmina_ssh_init_from_ssh(REMMINA_SSH(sftp), ssh);</div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = NULL;</div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;</div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160; <span class="keywordflow">return</span> sftp;</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;}</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;gboolean</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;<a class="code" href="remmina__ssh_8h.html#a1e09b32044c240a7dce0ad8afcbf0ff2">remmina_sftp_open</a>(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp)</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;{</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = sftp_new(sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#a7dab48a7603f1dd6671a8dd1efe1958e">ssh</a>.<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160; <span class="keywordflow">if</span> (!sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>) {</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(sftp), _(<span class="stringliteral">&quot;Could not create SFTP session. %s&quot;</span>));</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160; }</div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160; <span class="keywordflow">if</span> (sftp_init(sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>)) {</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(sftp), _(<span class="stringliteral">&quot;Could not start SFTP session. %s&quot;</span>));</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160; }</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;}</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;<a class="code" href="remmina__ssh_8h.html#aaaf171c31b73f06f1026239253d9f6b9">remmina_sftp_free</a>(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp)</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;{</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160; <span class="keywordflow">if</span> (sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>) {</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160; sftp_free(sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>);</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = NULL;</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160; }</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160; <a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>(REMMINA_SSH(sftp));</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;}</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;</div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;<span class="comment">* SSH Shell *</span></div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;<a class="code" href="remmina__ssh_8h.html#a30412e0b4302f5ae0b9be2749390a48d">remmina_ssh_shell_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;{</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell;</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;</div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160; shell = g_new0(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a>, 1);</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160; <a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(REMMINA_SSH(shell), remminafile, FALSE);</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160;</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> = -1;</div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a> = -1;</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;exec&quot;</span>));</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;run_line&quot;</span>));</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160; <span class="keywordflow">return</span> shell;</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;}</div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160;</div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160;<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *</div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;<a class="code" href="remmina__ssh_8h.html#ae0792ddb4adcaafefc1a4604cefdd8f4">remmina_ssh_shell_new_from_ssh</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;{</div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell;</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160; shell = g_new0(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a>, 1);</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160; remmina_ssh_init_from_ssh(REMMINA_SSH(shell), ssh);</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> = -1;</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a> = -1;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; <span class="keywordflow">return</span> shell;</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;}</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;<span class="keyword">static</span> gboolean</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;remmina_ssh_call_exit_callback_on_main_thread(gpointer data)</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;{</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)data;</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a>)</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#adedb04066148973fed2de9f04b80286d">user_data</a>);</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160; <span class="keywordflow">if</span> (shell) {</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160; <a class="code" href="remmina__ssh_8h.html#a316f97b879e147ec52967344f6ad1d84">remmina_ssh_shell_free</a>(shell);</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160; shell = NULL;</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160; }</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;}</div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160;</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;<span class="keyword">static</span> gpointer</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;remmina_ssh_shell_thread(gpointer data)</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;{</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)data;</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#adedb04066148973fed2de9f04b80286d">user_data</a>;</div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160; remminafile = <a class="code" href="remmina__protocol__widget_8c.html#a2506e80d482c34532d0e534856452069">remmina_protocol_widget_get_file</a>(gp);</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160; ssh_channel channel = NULL;</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160; gint ret;</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160; gchar *filename;</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160; <span class="keyword">const</span> gchar *dir;</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160; <span class="keyword">const</span> gchar *sshlogname;</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160; FILE *fp = NULL;</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160;</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160; <span class="comment">//gint screen;</span></div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160;</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160; <span class="keywordflow">if</span> ((channel = ssh_channel_new(REMMINA_SSH(shell)-&gt;session)) == NULL ||</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160; ssh_channel_open_session(channel)) {</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(shell), _(<span class="stringliteral">&quot;Could not open channel. %s&quot;</span>));</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160; <span class="keywordflow">if</span> (channel) ssh_channel_free(channel);</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a> = 0;</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160; }</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;</div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160; ssh_channel_request_pty(channel);</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160;</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160; <span class="comment">// SSH Callbacks</span></div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160; <span class="keyword">struct </span>ssh_callbacks_struct cb =</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160; {</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160; .channel_open_request_x11_function = <a class="code" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100">remmina_ssh_x11_open_request_cb</a>,</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160; .userdata = shell,</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160; };</div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160;</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">&quot;ssh_forward_x11&quot;</span>, FALSE)) {</div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160; ssh_callbacks_init(&amp;cb);</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160; ssh_set_callbacks(REMMINA_SSH(shell)-&gt;session, &amp;cb);</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160;</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *display = getenv(<span class="stringliteral">&quot;DISPLAY&quot;</span>);</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160; <span class="keywordtype">char</span> *proto = NULL, *cookie = NULL;</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b">remmina_ssh_x11_get_proto</a>(display, &amp;proto, &amp;cookie) != 0) {</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Using fake authentication data for X11 forwarding&quot;</span>);</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160; proto = NULL;</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160; cookie = NULL;</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160; }</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;proto: %s - cookie: %s&quot;</span>, proto, cookie);</div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160; ret = ssh_channel_request_x11(channel, 0, proto, cookie, 0);</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160; }</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160;</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a> &amp;&amp; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>[0]) {</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Requesting an SSH exec channel&quot;</span>);</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160; ret = ssh_channel_request_exec(channel, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>);</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Requesting an SSH shell channel&quot;</span>);</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160; ret = ssh_channel_request_shell(channel);</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160; }</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160; REMMINA_WARNING (<span class="stringliteral">&quot;Could not request shell&quot;</span>);</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(shell), _(<span class="stringliteral">&quot;Could not request shell. %s&quot;</span>));</div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a> = 0;</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160; }</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a> = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160; GFile *rf = g_file_new_for_path(remminafile-&gt;filename);</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogfolder&quot;</span>) == NULL)</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160; dir = g_build_path(<span class="stringliteral">&quot;/&quot;</span>, g_get_user_cache_dir(), <span class="stringliteral">&quot;remmina&quot;</span>, NULL);</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160; dir = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogfolder&quot;</span>);</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogname&quot;</span>) == NULL)</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160; sshlogname = g_strconcat(g_file_get_basename(rf), <span class="stringliteral">&quot;.&quot;</span>, <span class="stringliteral">&quot;log&quot;</span>, NULL);</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; sshlogname = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogname&quot;</span>);</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160; sshlogname = <a class="code" href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a>(remminafile, sshlogname);</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160; filename = g_strconcat(dir, <span class="stringliteral">&quot;/&quot;</span>, sshlogname, NULL);</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">&quot;sshsavesession&quot;</span>, FALSE)) {</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Saving session log to %s&quot;</span>, filename);</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; fp = fopen(filename, <span class="stringliteral">&quot;w&quot;</span>);</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160; }</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; g_free(filename);</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Run_line: %s&quot;</span>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>);</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160; <span class="keywordflow">if</span> (!shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a6b2e8c1d9705b4c5b64a0e07a1159e80">closed</a> &amp;&amp; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a> &amp;&amp; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>[0]) {</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160; <span class="comment">//TODO: Confirm assumption - assuming null terminated gchar string</span></div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160; ssh_channel_write(channel, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>, (gint)strlen(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>));</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160; ssh_channel_write(channel, <span class="stringliteral">&quot;\n&quot;</span>, (gint)1); <span class="comment">//TODO: Test this</span></div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Run_line written to channel&quot;</span>);</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160; }</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160; <span class="comment">// Create new event context.</span></div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a> = ssh_event_new();</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a> == NULL) {</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Internal error in %s: Couldn&#39;t get a event.&quot;</span>, __func__);</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160; }</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;shell-&gt;slave: %d&quot;</span>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>);</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160; <span class="comment">// Add the fd to the event and assign it the callback.</span></div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160; <span class="keywordflow">if</span> (ssh_event_add_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, <a class="code" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61">events</a>, <a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>, channel) != SSH_OK) {</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Internal error in %s: Couldn&#39;t add an fd to the event.&quot;</span>, __func__);</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160; }</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; <span class="comment">// Remove the poll handle from session and assign them to the event.</span></div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160; <span class="keywordflow">if</span> (ssh_event_add_session(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, REMMINA_SSH(shell)-&gt;session) != SSH_OK) {</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Internal error in %s: Couldn&#39;t add the session to the event.&quot;</span>, __func__);</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160; }</div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160;</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160; <a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, TRUE, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; <span class="comment">// Initializes the ssh_callbacks_struct.</span></div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160; <a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>.userdata = &amp;shell;</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160; ssh_callbacks_init(&amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160; <span class="comment">// Set the channel callback functions.</span></div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160; ssh_set_channel_callbacks(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, &amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160; <span class="keywordflow">do</span> {</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160; ssh_event_dopoll(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, 1000);</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; } <span class="keywordflow">while</span>(!ssh_channel_is_closed(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>));</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160; <span class="comment">// Close all OPENED X11 channel</span></div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160; <a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a6b2e8c1d9705b4c5b64a0e07a1159e80">closed</a> = TRUE;</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160; <span class="comment">// Remove socket fd from event context.</span></div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160; ret = ssh_event_remove_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>);</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Remove socket fd from event context: %d&quot;</span>, ret);</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; <span class="comment">// Remove session object from event context.</span></div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; ret = ssh_event_remove_session(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, REMMINA_SSH(shell)-&gt;session);</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Remove session object from event context: %d&quot;</span>, ret);</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160; <span class="comment">// Free event context.</span></div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160; ssh_event_free(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>);</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Free event context&quot;</span>);</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160; <span class="comment">// Remove channel callback.</span></div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160; ret = ssh_remove_channel_callbacks(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, &amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Remove channel callback: %d&quot;</span>, ret);</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">&quot;sshsavesession&quot;</span>, FALSE))</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160; fclose(fp);</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a> = NULL;</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a> = 0;</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a>)</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160; IDLE_ADD((GSourceFunc)remmina_ssh_call_exit_callback_on_main_thread, (gpointer)shell);</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;}</div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;gboolean</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;<a class="code" href="remmina__ssh_8h.html#a1c095a955af21b3ed9952ba2ea94691b">remmina_ssh_shell_open</a>(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell, <a class="code" href="remmina__ssh_8h.html#a4c56936cde97775b102a3e7b48fe5a01">RemminaSSHExitFunc</a> exit_callback, gpointer data)</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;{</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160; gchar *slavedevice;</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160; <span class="keyword">struct </span>termios stermios;</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> = posix_openpt(O_RDWR | O_NOCTTY);</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> == -1 ||</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160; grantpt(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a>) == -1 ||</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160; unlockpt(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a>) == -1 ||</div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160; (slavedevice = ptsname(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a>)) == NULL ||</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160; (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a> = open(slavedevice, O_RDWR | O_NOCTTY)) &lt; 0) {</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160; REMMINA_SSH(shell)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not create PTY device.&quot;</span>));</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160; }</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160; <span class="comment">/* As per libssh documentation */</span></div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160; tcgetattr(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, &amp;stermios);</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160; stermios.c_iflag &amp;= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160; stermios.c_oflag &amp;= ~OPOST;</div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160; stermios.c_lflag &amp;= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);</div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160; stermios.c_cflag &amp;= ~(CSIZE | PARENB);</div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160; stermios.c_cflag |= CS8;</div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160; tcsetattr(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, TCSANOW, &amp;stermios);</div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;</div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a> = exit_callback;</div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#adedb04066148973fed2de9f04b80286d">user_data</a> = data;</div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160;</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160; <span class="comment">/* Once the process started, we should always TRUE and assume the pthread will be created always */</span></div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160; pthread_create(&amp;shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>, NULL, remmina_ssh_shell_thread, shell);</div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160;</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;}</div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;<a class="code" href="remmina__ssh_8h.html#ac2d3f3b6550e4d1fe4caabe1df6af508">remmina_ssh_shell_set_size</a>(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell, gint columns, gint rows)</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;{</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>)</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160; ssh_channel_change_pty_size(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, columns, rows);</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;}</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160;<a class="code" href="remmina__ssh_8h.html#a316f97b879e147ec52967344f6ad1d84">remmina_ssh_shell_free</a>(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell)</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;{</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160; <span class="comment">//pthread_t thread = shell-&gt;thread;</span></div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160; <span class="comment">// Close all OPENED X11 channel</span></div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160; <a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a> = NULL;</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a6b2e8c1d9705b4c5b64a0e07a1159e80">closed</a> = TRUE;</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cancelling the shell thread if needed&quot;</span>);</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>) {</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160; pthread_cancel(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>) pthread_join(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>, NULL);</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160; }</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160; close(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>);</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>) {</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160; g_free(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>);</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a> = NULL;</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160; }</div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>) {</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160; g_free(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>);</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a> = NULL;</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160; }</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160; <span class="comment">/* It’s not necessary to close shell-&gt;slave since the other end (vte) will close it */</span>;</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160; <a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>(REMMINA_SSH(shell));</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;}</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HAVE_LIBSSH */</span><span class="preprocessor"></span></div><div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00110">remmina_ssh.h:110</a></div></div>
+<a href="remmina__ssh_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) 2009-2011 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-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * Copyright (C) 2022-2023 Antenore Gatta, Giovanni Panozzo, Hiroyuki Tanaka</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</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="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * including the two.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> * files in the program, then also delete it here.</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;<span class="comment"> */</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;config.h&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">/* To get definitions of NI_MAXHOST and NI_MAXSERV from &lt;netdb.h&gt; */</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#define _DEFAULT_SOURCE</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#define _DARWIN_C_SOURCE</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">/* Define this before stdlib.h to have posix_openpt */</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#define _XOPEN_SOURCE 600</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"> 49</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#define LIBSSH_STATIC 1</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &lt;libssh/libssh.h&gt;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &lt;gtk/gtk.h&gt;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &lt;glib/gi18n.h&gt;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &lt;poll.h&gt;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &lt;signal.h&gt;</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;time.h&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#include &lt;pthread.h&gt;</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#ifdef HAVE_NETDB_H</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#include &lt;netdb.h&gt;</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#ifdef HAVE_ARPA_INET_H</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor">#include &lt;arpa/inet.h&gt;</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#ifdef HAVE_NETINET_IN_H</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#include &lt;netinet/in.h&gt;</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#ifdef HAVE_SYS_SOCKET_H</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#include &lt;sys/socket.h&gt;</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#ifdef HAVE_FCNTL_H</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#ifdef HAVE_ERRNO_H</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#ifdef HAVE_TERMIOS_H</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor">#include &lt;termios.h&gt;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#ifdef HAVE_UNISTD_H</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#ifdef HAVE_PTY_H</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#include &lt;pty.h&gt;</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#ifdef HAVE_SYS_UN_H</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor">#include &lt;sys/un.h&gt;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__public_8h.html">remmina_public.h</a>&quot;</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="types_8h.html">remmina/types.h</a>&quot;</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__file_8h.html">remmina_file.h</a>&quot;</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__log_8h.html">remmina_log.h</a>&quot;</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>&quot;</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__ssh_8h.html">remmina_ssh.h</a>&quot;</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a>&quot;</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>&quot;</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#ifdef HAVE_NETINET_TCP_H</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#include &lt;netinet/tcp.h&gt;</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor">#if defined(__FreeBSD__) || defined(__OpenBSD__)</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="preprocessor">#ifndef SOL_TCP</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#define SOL_TCP IPPROTO_TCP</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">* SSH Base *</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></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"> 115</span>&#160;<span class="preprocessor">#define LOCK_SSH(ssh) pthread_mutex_lock(&amp;REMMINA_SSH(ssh)-&gt;ssh_mutex);</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#define UNLOCK_SSH(ssh) pthread_mutex_unlock(&amp;REMMINA_SSH(ssh)-&gt;ssh_mutex);</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694"> 118</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *<a class="code" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694">common_identities</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"> 120</span>&#160; <span class="stringliteral">&quot;.ssh/id_ed25519&quot;</span>,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="stringliteral">&quot;.ssh/id_rsa&quot;</span>,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="stringliteral">&quot;.ssh/id_dsa&quot;</span>,</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="stringliteral">&quot;.ssh/identity&quot;</span>,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; NULL</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;};</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;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment">* X11 Channels *</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="preprocessor">#define _PATH_UNIX_X &quot;/tmp/.X11-unix/X%d&quot;</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#define _XAUTH_CMD &quot;/usr/bin/xauth list %s 2&gt;/dev/null&quot;</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="structitem.html"> 133</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structitem.html">item</a> {</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="structitem.html#a456c6639914adbd3be8b4da351775d04"> 134</a></span>&#160; ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="structitem.html#adb779965c903bb950d429e90ebce3162"> 135</a></span>&#160; gint <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="structitem.html#a86aaa250b539e47685bae65032af9ce7"> 136</a></span>&#160; gint <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262"> 137</a></span>&#160; gboolean <span class="keyword">protected</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb"> 138</a></span>&#160; pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5"> 139</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structitem.html">item</a> *<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;} <a class="code" href="remmina__ssh_8c.html#a1cffe594c5d4e018e846308a11c8d05f">node_t</a>;</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"><a class="line" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792"> 142</a></span>&#160;<a class="code" href="structitem.html">node_t</a> *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a> = NULL;</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;<span class="comment">// Mutex</span></div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3"> 145</a></span>&#160;pthread_mutex_t <a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// Linked nodes to manage channel/fd tuples</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, gint <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>, gint <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>, gboolean <span class="keyword">protected</span>, pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef">remmina_ssh_delete_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword">static</span> <a class="code" href="structitem.html">node_t</a> * <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// X11 Display</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b">remmina_ssh_ssh_gai_strerror</a>(<span class="keywordtype">int</span> gaierr);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b">remmina_ssh_x11_get_proto</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *display, <span class="keywordtype">char</span> **_proto, <span class="keywordtype">char</span> **_data);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479">remmina_ssh_set_nodelay</a>(<span class="keywordtype">int</span> fd);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d">remmina_ssh_connect_local_xsocket_path</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pathname);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8">remmina_ssh_connect_local_xsocket</a>(<span class="keywordtype">int</span> display_number);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a">remmina_ssh_x11_connect_display</a>();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">// Send data to channel</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> revents, <span class="keywordtype">void</span> *userdata);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">// Read data from channel</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56">remmina_ssh_cp_to_fd_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *data, uint32_t len, <span class="keywordtype">int</span> is_stderr, <span class="keywordtype">void</span> *userdata);</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="comment">// EOF&amp;Close channel</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *userdata);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment">// Close all X11 channel</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment">// X11 Request</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="keyword">static</span> ssh_channel <a class="code" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100">remmina_ssh_x11_open_request_cb</a>(ssh_session session, <span class="keyword">const</span> <span class="keywordtype">char</span> *shost, <span class="keywordtype">int</span> sport, <span class="keywordtype">void</span> *userdata);</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;<span class="comment">// SSH Channel Callbacks</span></div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb"> 176</a></span>&#160;<span class="keyword">struct </span>ssh_channel_callbacks_struct <a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a> =</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; .channel_data_function = <a class="code" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56">remmina_ssh_cp_to_fd_cb</a>,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; .channel_eof_function = <a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; .channel_close_function = <a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; .userdata = NULL</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;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment">// SSH Event Context</span></div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61"> 185</a></span>&#160;<span class="keywordtype">short</span> <a class="code" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61">events</a> = POLLIN | POLLPRI | POLLERR | POLLHUP | POLLNVAL;</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="comment">// Functions</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1"> 189</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, gint <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>, gint <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>, gboolean <span class="keyword">protected</span>, pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>)</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; TRACE_CALL(__func__);</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; pthread_mutex_lock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;insert node - fd_in: %d - fd_out: %d - protected %d&quot;</span>, fd_in, fd_out, <span class="keyword">protected</span>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="structitem.html">node_t</a> *node_iterator, *<span class="keyword">new</span>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">if</span> (node == NULL) {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">/* Calloc ensure that node is full of 0 */</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; node = (<a class="code" href="structitem.html">node_t</a> *) calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structitem.html">node_t</a>));</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; node-&gt;<a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; node-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a> = <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; node-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a> = <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a> = <span class="keyword">protected</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; node-&gt;<a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a> = <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; node-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> = NULL;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; node_iterator = <a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">while</span> (node_iterator-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> != NULL)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; node_iterator = node_iterator-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="comment">/* Create the new node */</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">new</span> = (<a class="code" href="structitem.html">node_t</a> *) malloc(<span class="keyword">sizeof</span>(<a class="code" href="structitem.html">node_t</a>));</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">new</span>-&gt;<a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">new</span>-&gt;fd_in = <a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">new</span>-&gt;fd_out = <a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">new</span>-&gt;protected = <span class="keyword">protected</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">new</span>-&gt;thread = <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">new</span>-&gt;next = NULL;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; node_iterator-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> = <span class="keyword">new</span>;</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; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;}</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;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef"> 226</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef">remmina_ssh_delete_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;delete node&quot;</span>);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; pthread_mutex_lock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="structitem.html">node_t</a> *current, *previous = NULL;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">for</span> (current = node; current; previous = current, current = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>) {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (current-&gt;channel != channel)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (previous == NULL)</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; node = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; previous-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a> = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</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"> 244</span>&#160; free(current);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</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; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;}</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;<span class="keyword">static</span> <a class="code" href="structitem.html">node_t</a> *</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda"> 253</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// TODO: too verbose REMMINA_DEBUG(&quot;search node&quot;);</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; pthread_mutex_lock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="structitem.html">node_t</a> *current = <a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">while</span> (current != NULL) {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">if</span> (current-&gt;<a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> == channel) {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// TODO: too verbose REMMINA_DEBUG(&quot;found node - fd_in: %d - fd_out: %d - protected: %d&quot;, current-&gt;fd_in, current-&gt;fd_out, current-&gt;protected);</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> current;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; current = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</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;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; pthread_mutex_unlock(&amp;<a class="code" href="remmina__ssh_8c.html#a4acff8232e4aec9cd5c6dc200ac55ef3">mutex</a>);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;}</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479"> 278</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479">remmina_ssh_set_nodelay</a>(<span class="keywordtype">int</span> fd)</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;{</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">int</span> opt;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; socklen_t optlen;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; optlen = <span class="keyword">sizeof</span>(opt);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">if</span> (getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &amp;opt, &amp;optlen) == -1) {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;getsockopt TCP_NODELAY: %.100s&quot;</span>, strerror(errno));</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (opt == 1) {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d is TCP_NODELAY&quot;</span>, fd);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; opt = 1;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d setting TCP_NODELAY&quot;</span>, fd);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span> (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &amp;opt, <span class="keyword">sizeof</span>(opt)) == -1)</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;setsockopt TCP_NODELAY: %.100s&quot;</span>, strerror(errno));</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"> 298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b"> 300</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b">remmina_ssh_ssh_gai_strerror</a>(<span class="keywordtype">int</span> gaierr)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;{</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (gaierr == EAI_SYSTEM &amp;&amp; errno != 0)</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> strerror(errno);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> gai_strerror(gaierr);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b"> 310</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b">remmina_ssh_x11_get_proto</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *display, <span class="keywordtype">char</span> **_proto, <span class="keywordtype">char</span> **_cookie)</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; TRACE_CALL(__func__);</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; <span class="keywordtype">char</span> cmd[1024], line[512], xdisplay[512];</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> proto[512], cookie[512];</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; FILE *f;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordtype">int</span> ret = 0, r;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; *_proto = proto;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; *_cookie = cookie;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; proto[0] = cookie[0] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (strncmp(display, <span class="stringliteral">&quot;localhost:&quot;</span>, 10) == 0) {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> ((r = snprintf(xdisplay, <span class="keyword">sizeof</span>(xdisplay), <span class="stringliteral">&quot;unix:%s&quot;</span>, display + 10)) &lt; 0 || (<span class="keywordtype">size_t</span>)r &gt;= <span class="keyword">sizeof</span>(xdisplay)) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;display name too long. display: %s&quot;</span>, display);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; display = xdisplay;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; snprintf(cmd, <span class="keyword">sizeof</span>(cmd), _XAUTH_CMD, display);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;xauth cmd: %s&quot;</span>, cmd);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; f = popen(cmd, <span class="stringliteral">&quot;r&quot;</span>);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span> (f &amp;&amp; fgets(line, <span class="keyword">sizeof</span>(line), f) &amp;&amp; sscanf(line, <span class="stringliteral">&quot;%*s %511s %511s&quot;</span>, proto, cookie) == 2) {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; ret = 0;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; ret = 1;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</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="keywordflow">if</span> (f) pclose(f);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;proto: %s - cookie: %s - ret: %d&quot;</span>, proto, cookie, ret);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d"> 350</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d">remmina_ssh_connect_local_xsocket_path</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pathname)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;{</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; TRACE_CALL(__func__);</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"> 354</span>&#160; <span class="keywordtype">int</span> sock;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">struct </span>sockaddr_un addr;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; sock = socket(AF_UNIX, SOCK_STREAM, 0);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span> (sock == -1)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;socket: %.100s&quot;</span>, strerror(errno));</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; memset(&amp;addr, 0, <span class="keyword">sizeof</span>(addr));</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; addr.sun_family = AF_UNIX;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; addr.sun_path[0] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; memcpy(addr.sun_path + 1, pathname, strlen(pathname));</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span> (connect(sock, (<span class="keyword">struct</span> sockaddr *)&amp;addr, offsetof(<span class="keyword">struct</span> sockaddr_un, sun_path) + 1 + strlen(pathname)) == 0) {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;sock: %d&quot;</span>, sock);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> sock;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;connect %.100s: %.100s&quot;</span>, addr.sun_path, strerror(errno));</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; close(sock);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;}</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8"> 377</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8">remmina_ssh_connect_local_xsocket</a>(<span class="keywordtype">int</span> display_number)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;{</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordtype">char</span> buf[1024];</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; snprintf(buf, <span class="keyword">sizeof</span>(buf), _PATH_UNIX_X, display_number);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8c.html#a686f8ba4a7816c7e33e7bde3b10f723d">remmina_ssh_connect_local_xsocket_path</a>(buf);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;}</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a"> 387</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a">remmina_ssh_x11_connect_display</a>()</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;{</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; TRACE_CALL(__func__);</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> display_number;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *display;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordtype">char</span> buf[1024], *cp;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keyword">struct </span>addrinfo hints, *ai, *aitop;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">char</span> strport[NI_MAXSERV];</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordtype">int</span> gaierr, sock = 0;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">/* Try to open a socket for the local X server. */</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; display = getenv(<span class="stringliteral">&quot;DISPLAY&quot;</span>);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">if</span> (!display) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</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; REMMINA_DEBUG(<span class="stringliteral">&quot;display: %s&quot;</span>, display);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">/* Check if it is a unix domain socket. */</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">if</span> (strncmp(display, <span class="stringliteral">&quot;unix:&quot;</span>, 5) == 0 || display[0] == <span class="charliteral">&#39;:&#39;</span>) {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">/* Connect to the unix domain socket. */</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">if</span> (sscanf(strrchr(display, <span class="charliteral">&#39;:&#39;</span>) + 1, <span class="stringliteral">&quot;%u&quot;</span>, &amp;display_number) != 1) {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Could not parse display number from DISPLAY: %.100s&quot;</span>, display);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</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; REMMINA_DEBUG(<span class="stringliteral">&quot;display_number: %d&quot;</span>, display_number);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">/* Create a socket. */</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; sock = <a class="code" href="remmina__ssh_8c.html#a6a8653ae6e45acff9e6b01aeda5f45e8">remmina_ssh_connect_local_xsocket</a>(display_number);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;socket: %d&quot;</span>, sock);</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; <span class="keywordflow">if</span> (sock &lt; 0)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span> -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; <span class="comment">/* OK, we now have a connection to the display. */</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">return</span> sock;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</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; <span class="comment">/* Connect to an inet socket. */</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; strncpy(buf, display, <span class="keyword">sizeof</span>(buf) - 1);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; cp = strchr(buf, <span class="charliteral">&#39;:&#39;</span>);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (!cp) {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Could not find &#39;:&#39; in DISPLAY: %.100s&quot;</span>, display);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; *cp = 0;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (sscanf(cp + 1, <span class="stringliteral">&quot;%u&quot;</span>, &amp;display_number) != 1) {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Could not parse display number from DISPLAY: %.100s&quot;</span>, display);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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="comment">/* Look up the host address */</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; memset(&amp;hints, 0, <span class="keyword">sizeof</span>(hints));</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; hints.ai_family = AF_INET;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; hints.ai_socktype = SOCK_STREAM;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; snprintf(strport, <span class="keyword">sizeof</span>(strport), <span class="stringliteral">&quot;%u&quot;</span>, 6000 + display_number);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">if</span> ((gaierr = getaddrinfo(buf, strport, &amp;hints, &amp;aitop)) != 0) {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;%.100s: unknown host. (%s)&quot;</span>, buf, <a class="code" href="remmina__ssh_8c.html#a17089d163f313f0acc43615ba6f29d9b">remmina_ssh_ssh_gai_strerror</a>(gaierr));</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">for</span> (ai = aitop; ai; ai = ai-&gt;ai_next) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">/* Create a socket. */</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; sock = socket(ai-&gt;ai_family, ai-&gt;ai_socktype, ai-&gt;ai_protocol);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span> (sock == -1) {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;socket: %.100s&quot;</span>, strerror(errno));</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">/* Connect it to the display. */</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">if</span> (connect(sock, ai-&gt;ai_addr, ai-&gt;ai_addrlen) == -1) {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;connect %.100s port %u: %.100s&quot;</span>, buf, 6000 + display_number, strerror(errno));</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; close(sock);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="comment">/* Success */</span></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; }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; freeaddrinfo(aitop);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (!ai) {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;connect %.100s port %u: %.100s&quot;</span>, buf, 6000 + display_number, strerror(errno));</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1daf0b140ecf3ef9665d1c5d4c0ec479">remmina_ssh_set_nodelay</a>(sock);</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; REMMINA_DEBUG(<span class="stringliteral">&quot;sock: %d&quot;</span>, sock);</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; <span class="keywordflow">return</span> sock;</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;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65"> 479</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">int</span> revents, <span class="keywordtype">void</span> *userdata)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;{</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = (ssh_channel)userdata;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; gchar *buf = (gchar *) g_malloc ( <span class="keyword">sizeof</span>(gchar) * 0x200000 );</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">if</span> (buf ==NULL){</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; gint sz = 0, ret = 0;</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; <a class="code" href="structitem.html">node_t</a> *temp_node = <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(channel);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span> (!temp_node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; shutdown(fd, SHUT_RDWR);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; close(fd);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d closed.&quot;</span>, fd);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;channel does not exist.&quot;</span>);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</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; <span class="keywordflow">if</span> ((revents &amp; POLLIN) || (revents &amp; POLLPRI)) {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; sz = read(fd, buf, <span class="keyword">sizeof</span>(buf));</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (sz &gt; 0) {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; ret = ssh_channel_write(channel, buf, sz);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (ret != sz){</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; g_free(buf);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> -1;</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; </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">//TODO: too verbose REMMINA_DEBUG(&quot;ssh_channel_write ret: %d sz: %d&quot;, ret, sz);</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sz &lt; 0) {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// TODO: too verbose REMMINA_WARNING(&quot;fd bytes read: %d&quot;, sz);</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; g_free(buf);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Why the hell am I here?&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">if</span> (!temp_node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; shutdown(fd, SHUT_RDWR);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; close(fd);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d closed.&quot;</span>, fd);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; g_free(buf);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">if</span> ((revents &amp; POLLHUP) || (revents &amp; POLLNVAL) || (revents &amp; POLLERR)) {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Closing channel.&quot;</span>);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; ret = -1;</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; g_free(buf);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;}</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56"> 537</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#aa836e9642f5703d984c65513c7220b56">remmina_ssh_cp_to_fd_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *data, uint32_t len, <span class="keywordtype">int</span> is_stderr, <span class="keywordtype">void</span> *userdata)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; (void)session;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; (void)is_stderr;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="comment">// Expecting userdata to be type RemminaSSHShell *, but it is unused</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="comment">// in this function.</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; (void)userdata;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="structitem.html">node_t</a> *temp_node = <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(channel);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; gint fd = temp_node-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; gint sz = 0;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; sz = write(fd, data, len);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="comment">// TODO: too verbose REMMINA_DEBUG(&quot;fd bytes written: %d&quot;, sz);</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">return</span> sz;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;}</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6"> 557</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a758df1cb9f9c781ed4b6dad9ca19f2f6">remmina_ssh_ch_close_cb</a>(ssh_session session, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, <span class="keywordtype">void</span> *userdata)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;{</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; (void)session;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)userdata;</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; <a class="code" href="structitem.html">node_t</a> *temp_node = <a class="code" href="remmina__ssh_8c.html#af39f90e2343e62348226aed0d7496dda">remmina_ssh_search_item</a>(channel);</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> (temp_node != NULL) {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordtype">int</span> fd = temp_node-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">if</span> (!temp_node-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <a class="code" href="remmina__ssh_8c.html#a998d504fc1ae83365d905bd0b72e07ef">remmina_ssh_delete_item</a>(channel);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; ssh_event_remove_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, fd);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; shutdown(fd, SHUT_RDWR);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; close(fd);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;fd %d closed.&quot;</span>, fd);</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; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Channel closed.&quot;</span>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;}</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;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae"> 581</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>)</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;{</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; TRACE_CALL(__func__);</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; REMMINA_DEBUG(<span class="stringliteral">&quot;Close all X11 channels&quot;</span>);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="structitem.html">node_t</a> *current = <a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">while</span> (current != NULL) {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span> (current-&gt;<a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a> == thread &amp;&amp; !current-&gt;<a class="code" href="structitem.html#a38ed39bc82590b07b2746c48a2eef262">protected</a>) {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; shutdown(current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>, SHUT_RDWR);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; close(current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;thread: %d - fd %d closed.&quot;</span>, thread, current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a>);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (current-&gt;<a class="code" href="structitem.html#adb779965c903bb950d429e90ebce3162">fd_in</a> != current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>) {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; shutdown(current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>, SHUT_RDWR);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; close(current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;thread: %d - fd %d closed.&quot;</span>, thread, current-&gt;<a class="code" href="structitem.html#a86aaa250b539e47685bae65032af9ce7">fd_out</a>);</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; }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; current = current-&gt;<a class="code" href="structitem.html#a975a1b37d9e003e1abb2a505474894b5">next</a>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;}</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="keyword">static</span> ssh_channel</div><div class="line"><a name="l00604"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100"> 604</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100">remmina_ssh_x11_open_request_cb</a>(ssh_session session, <span class="keyword">const</span> <span class="keywordtype">char</span> *shost, <span class="keywordtype">int</span> sport, <span class="keywordtype">void</span> *userdata)</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; TRACE_CALL(__func__);</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; (void)shost;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; (void)sport;</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"> 611</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)userdata;</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; ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a> = ssh_channel_new(session);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordtype">int</span> sock = <a class="code" href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a">remmina_ssh_x11_connect_display</a>();</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(channel, sock, sock, FALSE, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; ssh_event_add_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, sock, <a class="code" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61">events</a>, <a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>, channel);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; ssh_event_add_session(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, session);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; ssh_add_channel_callbacks(channel, &amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;}</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;gchar *</div><div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#a72a58e416c4eeb9d17eaf76360ebee42"> 628</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a72a58e416c4eeb9d17eaf76360ebee42">remmina_ssh_identity_path</a>(<span class="keyword">const</span> gchar *<span class="keywordtype">id</span>)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == NULL) <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">if</span> (<span class="keywordtype">id</span>[0] == <span class="charliteral">&#39;/&#39;</span>) <span class="keywordflow">return</span> g_strdup(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">return</span> g_strdup_printf(<span class="stringliteral">&quot;%s/%s&quot;</span>, g_get_home_dir(), <span class="keywordtype">id</span>);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;}</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;gchar *</div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#ab6d8bdad543b3caead2b2b0339484798"> 637</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#ab6d8bdad543b3caead2b2b0339484798">remmina_ssh_find_identity</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;{</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; gchar *path;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; gint i;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">for</span> (i = 0; <a class="code" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694">common_identities</a>[i]; i++) {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; path = <a class="code" href="remmina__ssh_8c.html#a72a58e416c4eeb9d17eaf76360ebee42">remmina_ssh_identity_path</a>(<a class="code" href="remmina__ssh_8c.html#a8920b4663823da39661a108f04b33694">common_identities</a>[i]);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">if</span> (g_file_test(path, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS))</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">return</span> path;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; g_free(path);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;}</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l00653"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#abc556f0a4335083436f6e19c204fa553"> 653</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *fmt)</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;{</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> gchar *err;</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; err = ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(fmt, err);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;}</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;<span class="keywordtype">void</span></div><div class="line"><a name="l00663"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#a1f3297263703b4259c1c9607d710995d"> 663</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *fmt, ...)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;{</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; va_list args;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; va_start(args, fmt);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_vprintf(fmt, args);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; va_end(args);</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;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c"> 674</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c">remmina_ssh_auth_interactive</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;{</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; gint ret;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; gint n;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; gint i;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keyword">const</span> gchar *name, *instruction = NULL;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">//gchar *prompt,*ptr;</span></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"> 683</span>&#160; ret = SSH_AUTH_ERROR;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>) <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="comment">/* TODO: What if I have an empty password? */</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> == NULL) {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, <span class="stringliteral">&quot;OTP code is empty&quot;</span>);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;OTP code is empty, returning&quot;</span>);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; REMMINA_DEBUG(<span class="stringliteral">&quot;OTP code has been set to: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; ret = ssh_userauth_kbdint(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, NULL);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">while</span> (ret == SSH_AUTH_INFO) {</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; name = ssh_userauth_kbdint_getname(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">if</span> (strlen(name) &gt; 0)</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive name: %s&quot;</span>, name);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive name is empty&quot;</span>);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; instruction = ssh_userauth_kbdint_getinstruction(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span> (strlen(instruction) &gt; 0)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive instruction: %s&quot;</span>, instruction);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH kbd-interactive instruction is empty&quot;</span>);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; n = ssh_userauth_kbdint_getnprompts(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; n; i++)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; ssh_userauth_kbdint_setanswer(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, i, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; ret = ssh_userauth_kbdint(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, NULL);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</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;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_userauth_kbdint returned %d&quot;</span>, ret);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH keyboard interactive. Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">//Authentication success</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH keyboard interactive. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_INFO:</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="comment">//The server asked some questions. Use ssh_userauth_kbdint_getnprompts() and such.</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticating aagin with SSH keyboard interactive??? %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with keyboard interactive, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="comment">//A serious error happened</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with TOTP/OTP/2FA. %s&quot;</span>));</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate with TOTP/OTP/2FA. Error is %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;}</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;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00753"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#ad6f3f5c196175412049af0c440414e65"> 753</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#ad6f3f5c196175412049af0c440414e65">remmina_ssh_auth_password</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</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; gint ret;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Password authentication&quot;</span>);</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"> 760</span>&#160; ret = SSH_AUTH_ERROR;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>) {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Already authenticated&quot;</span>);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> == NULL) {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, <span class="stringliteral">&quot;Password is null&quot;</span>);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Password is null, returning&quot;</span>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; ret = ssh_userauth_password(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with SSH password returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; }</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH password, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH password. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with SSH password, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a416a26d636d492c3530b6c5f0f04a623">REMMINA_SSH_AUTH_AGAIN</a>;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate with password. Error is %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with SSH password. %s&quot;</span>));</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;}</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00811"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a06d627fbf258c617a3ff3bd7b8086dee"> 811</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a06d627fbf258c617a3ff3bd7b8086dee">remmina_ssh_auth_pubkey</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;{</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; ssh_key key = NULL;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; ssh_key cert = NULL;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; gchar pubkey[132] = { 0 }; <span class="comment">// +&quot;.pub&quot;</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; gint ret;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>) <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</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; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH certificate file: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;File for private SSH key: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a> != NULL) {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">/* First we import the private key */</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">if</span> (ssh_pki_import_privkey_file(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>, (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> ? ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> : <span class="stringliteral">&quot;&quot;</span>),</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; NULL, NULL, &amp;key) != SSH_OK) {</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> == NULL || ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;No saved SSH password supplied. Asking user to enter it.&quot;</span>));</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; }</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; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</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; REMMINA_DEBUG (<span class="stringliteral">&quot;Imported private SSH key file&quot;</span>);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="comment">/* First we import the certificate */</span></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; ret = ssh_pki_import_cert_file(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>, &amp;cert );</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Certificate import returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;SSH certificate cannot be imported. %s&quot;</span>));</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;certificate imported correctly&quot;</span>);</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="comment">/* We copy th certificate in the private key */</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; ret = ssh_pki_copy_cert_to_privkey(cert, key);</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Copying the certificate into a key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;SSH certificate cannot be copied into the private SSH key. %s&quot;</span>));</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; ssh_key_free(cert);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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; REMMINA_DEBUG (<span class="stringliteral">&quot;%s certificate copied into the private SSH key&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="comment">/* We try to authenticate */</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; ret = ssh_userauth_try_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, cert);</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keywordflow">if</span> (ret != SSH_AUTH_SUCCESS &amp;&amp; ret != SSH_AUTH_AGAIN ) {</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Trying to authenticate with the new key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate using SSH certificate. %s&quot;</span>));</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; ssh_key_free(key);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; ssh_key_free(cert);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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; REMMINA_DEBUG (<span class="stringliteral">&quot;Authentication with a certificate file works, we can authenticate&quot;</span>);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;lbssh &gt;= 0.9.0 is required to authenticate with certificate file&quot;</span>);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="comment">/* if it goes well we authenticate (later on) with the key, not the cert*/</span></div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> == NULL) {</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>),</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; _(<span class="stringliteral">&quot;SSH identity file not selected.&quot;</span>));</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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"> 881</span>&#160; g_snprintf(pubkey, <span class="keyword">sizeof</span>(pubkey), <span class="stringliteral">&quot;%s.pub&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</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; <span class="comment">/*G_FILE_TEST_EXISTS*/</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keywordflow">if</span> (g_file_test(pubkey, G_FILE_TEST_EXISTS)) {</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; ret = ssh_pki_import_pubkey_file(pubkey, &amp;key);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Public SSH key cannot be imported. %s&quot;</span>));</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; ssh_key_free(key);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</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; }</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordflow">if</span> (ssh_pki_import_privkey_file(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>, (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> ? ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> : <span class="stringliteral">&quot;&quot;</span>),</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; NULL, NULL, &amp;key) != SSH_OK) {</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> == NULL || ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;No saved SSH password supplied. Asking user to enter it.&quot;</span>));</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; }</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">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; }</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; }</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; ret = ssh_userauth_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, key);</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; ssh_key_free(key);</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; ssh_key_free(cert);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with public SSH key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</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; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;}</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00948"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#aa8aee72091b09cde34c0e0efadde719a"> 948</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#aa8aee72091b09cde34c0e0efadde719a">remmina_ssh_auth_auto_pubkey</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</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; TRACE_CALL(__func__);</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; gint ret;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; ret = ssh_userauth_publickey_auto(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL, (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> ? ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> : NULL));</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with public SSH key returned: %d&quot;</span>, ret);</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; }</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate automatically with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate automatically with public SSH key. %s&quot;</span>));</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;}</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l00994"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a6e57a1b5ba4a3886c4cb79ece8894796"> 994</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a6e57a1b5ba4a3886c4cb79ece8894796">remmina_ssh_auth_agent</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;{</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; gint ret;</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; ret = ssh_userauth_agent(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL);</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with SSH agent returned: %d&quot;</span>, ret);</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"> 1002</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</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; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate automatically with SSH agent. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate automatically with SSH agent. %s&quot;</span>));</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; }</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;}</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="keyword">static</span> <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l01040"></a><span class="lineno"><a class="line" href="remmina__ssh_8c.html#a0eb19f950b34b360b28243a0b1883d67"> 1040</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#a0eb19f950b34b360b28243a0b1883d67">remmina_ssh_auth_gssapi</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;{</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; gint ret;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; ret = ssh_userauth_gssapi(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication with SSH GSSAPI/Kerberos: %d&quot;</span>, ret);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_PARTIAL:</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="comment">//You&#39;ve been partially authenticated, you still have to use another method.</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Another method is required. %d&quot;</span>, ret);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a> = TRUE;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_SUCCESS:</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="comment">//The public key is accepted.</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_AGAIN:</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="comment">//In nonblocking mode, you&#39;ve got to call this again later.</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authenticated with public SSH key, Requested to authenticate again. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_DENIED:</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_ERROR:</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="comment">//A serious error happened.</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot authenticate with SSH GSSAPI/Kerberos. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not authenticate with SSH GSSAPI/Kerberos. %s&quot;</span>));</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;}</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l01085"></a><span class="lineno"><a class="line" href="remmina__ssh_8h.html#aad84c6609cb431d48121ae5e0902441b"> 1085</a></span>&#160;<a class="code" href="remmina__ssh_8c.html#aad84c6609cb431d48121ae5e0902441b">remmina_ssh_auth</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *password, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;{</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; gint method;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a> rv = <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1af9e9ce1f259cc359c6e5eb0dbaa090da">REMMINA_SSH_AUTH_NULL</a>;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">/* Check known host again to ensure it’s still the original server when user forks</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="comment"> * a new session from existing one */</span></div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="comment">/* TODO: Add error checking</span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OK: The server is known and has not changed.</span></div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_CHANGED: The server key has changed. Either you are under attack or the administrator changed the key. You HAVE to warn the user about a possible attack.</span></div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OTHER: The server gave use a key of a type while we had an other type recorded. It is a possible attack.</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_UNKNOWN: The server is unknown. User should confirm the public key hash is correct.</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_NOT_FOUND: The known host file does not exist. The host is thus unknown. File will be created if host key is accepted.</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_ERROR: There had been an error checking the host.</span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (ssh_session_is_known_server(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>) != SSH_KNOWN_HOSTS_OK) {</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span> (ssh_is_server_known(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>) != SSH_SERVER_KNOWN_OK) {</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(ssh, _(<span class="stringliteral">&quot;The public SSH key changed!&quot;</span>));</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span> (password) {</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">if</span> (password != ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">if</span> (password != ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>) g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(password);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> = g_strdup(password);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; method = ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Methods supported by server: %s%s%s%s%s%s%s&quot;</span>,</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; (method &amp; SSH_AUTH_METHOD_NONE) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_NONE &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; (method &amp; SSH_AUTH_METHOD_UNKNOWN) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_UNKNOWN &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; (method &amp; SSH_AUTH_METHOD_PASSWORD) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_PASSWORD &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; (method &amp; SSH_AUTH_METHOD_PUBLICKEY) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_PUBLICKEY &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; (method &amp; SSH_AUTH_METHOD_HOSTBASED) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_HOSTBASED &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; (method &amp; SSH_AUTH_METHOD_INTERACTIVE) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_INTERACTIVE &quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; (method &amp; SSH_AUTH_METHOD_GSSAPI_MIC) ? <span class="stringliteral">&quot;SSH_AUTH_METHOD_GSSAPI_MIC &quot;</span> : <span class="stringliteral">&quot;&quot;</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; );</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">switch</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>) {</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>:</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <span class="comment">/* This authentication method is normally disabled on SSHv2 server. You should use keyboard-interactive mode. */</span></div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_PASSWORD (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a>)</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ae5b80d959def61ac57ee6a919ca87266">REMMINA_SSH_AUTH_SUCCESS</a>;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_PASSWORD) {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH using remmina_ssh_auth_password&quot;</span>);</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#ad6f3f5c196175412049af0c440414e65">remmina_ssh_auth_password</a>(ssh);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; }</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> &amp;&amp; (method &amp; SSH_AUTH_METHOD_INTERACTIVE)) {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="comment">/* SSH server is requesting us to do interactive auth. */</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH using remmina_ssh_auth_interactive after password has failed&quot;</span>);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c">remmina_ssh_auth_interactive</a>(ssh);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; }</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; }</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host-based authentication method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User-based authentication method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; }</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with SSH password. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>:</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH using remmina_ssh_auth_interactive&quot;</span>);</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_INTERACTIVE) {</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a976d3c1a549c17f00a64eb05d4e0823c">remmina_ssh_auth_interactive</a>(ssh);</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; }</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host-based authentication method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User-based authentication method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; }</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; }</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with keyboard-interactive. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>:</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_PUBLICKEY (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_PUBLICKEY) {</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a06d627fbf258c617a3ff3bd7b8086dee">remmina_ssh_auth_pubkey</a>(ssh, gp, remminafile);</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; }</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; }</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; }</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; }</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="comment">// The real error here should be: &quot;The SSH server %s:%d does not support public key authentication&quot;</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with public SSH key. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a39a8dcea793c406f0fe90f3175c4318e">SSH_AUTH_AGENT</a>:</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_AGENT (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a6e57a1b5ba4a3886c4cb79ece8894796">remmina_ssh_auth_agent</a>(ssh);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; }</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; }</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; }</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a>:</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_AUTO_PUBLICKEY (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#aa8aee72091b09cde34c0e0efadde719a">remmina_ssh_auth_auto_pubkey</a>(ssh, gp, remminafile);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="comment">/* ssh_agent or none */</span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_PUBLICKEY) {</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; }</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; }</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; }</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="comment">// The real error here should be: &quot;The SSH server %s:%d does not support public key authentication&quot;</span></div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with automatic public SSH key. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="comment">/* Not yet supported by libssh */</span></div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_HOSTBASED:</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_HOSTBASED)</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="comment">//return remmina_ssh_auth_hostbased;</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a6264a71469928ad51fa802f65f1a934a">SSH_AUTH_GSSAPI</a>:</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_AUTH_GSSAPI (%d)&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keywordflow">if</span> (method &amp; SSH_AUTH_METHOD_GSSAPI_MIC) {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; rv = <a class="code" href="remmina__ssh_8c.html#a0eb19f950b34b360b28243a0b1883d67">remmina_ssh_auth_gssapi</a>(ssh);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordflow">if</span> (rv == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a>) {</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>) {</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; }</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="keywordflow">switch</span> (ssh_userauth_list(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL)) {</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PASSWORD:</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_PUBLICKEY:</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_HOSTBASED:</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Host based auth method not implemented: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_INTERACTIVE:</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="comment">//REMMINA_DEBUG(&quot;Interactive auth method not implemented: %d&quot;, ssh-&gt;auth);</span></div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keywordflow">case</span> SSH_AUTH_METHOD_UNKNOWN:</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; }</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; }</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">return</span> rv;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <span class="comment">// The real error here should be: &quot;The SSH server %s:%d does not support SSH GSSAPI/Kerberos authentication&quot;</span></div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(_(<span class="stringliteral">&quot;Could not authenticate with SSH GSSAPI/Kerberos. %s&quot;</span>), <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;User auth method not supported: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; }</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <span class="comment">// We come here after a &quot;break&quot;. ssh-&gt;error should be already set</span></div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;}</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;<span class="keyword">enum</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;<a class="code" href="remmina__ssh_8h.html#acf69725720378340e1a51c87e7638a7f">remmina_ssh_auth_gui</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;{</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; gchar *keyname;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; gchar *pwdfkey = NULL;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; gchar *message;</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; gchar *current_pwd;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; gchar *current_user;</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <span class="keyword">const</span> gchar *instruction = NULL;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; gint ret;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <span class="keywordtype">size_t</span> len;</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; guchar *pubkey;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; ssh_key server_pubkey;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; gboolean disablepasswordstoring;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; gboolean save_password;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; gint attempt;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="comment">/* Check if the server’s public key is known */</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <span class="comment">/* TODO: Add error checking</span></div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OK: The server is known and has not changed.</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_CHANGED: The server key has changed. Either you are under attack or the administrator changed the key. You HAVE to warn the user about a possible attack.</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_OTHER: The server gave use a key of a type while we had an other type recorded. It is a possible attack.</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_UNKNOWN: The server is unknown. User should confirm the public key hash is correct.</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_NOT_FOUND: The known host file does not exist. The host is thus unknown. File will be created if host key is accepted.</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="comment"> * SSH_KNOWN_HOSTS_ERROR: There had been an error checking the host.</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; ret = ssh_session_is_known_server(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_OK:</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keywordflow">break</span>; <span class="comment">/* ok */</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <span class="comment">/* TODO: These are all wrong, we should deal with each of them */</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_CHANGED:</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_OTHER:</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_UNKNOWN:</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_NOT_FOUND:</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; ret = ssh_is_server_known(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="keywordflow">switch</span> (ret) {</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_KNOWN_OK:</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <span class="keywordflow">break</span>; <span class="comment">/* ok */</span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="comment">/* fallback to SSH_SERVER_NOT_KNOWN behavior */</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_KNOWN_CHANGED:</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_FOUND_OTHER:</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_NOT_KNOWN:</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_FILE_NOT_FOUND:</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 8, 6)</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <span class="keywordflow">if</span> (ssh_get_server_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, &amp;server_pubkey) != SSH_OK) {</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not fetch the server\&#39;s public SSH key. %s&quot;</span>));</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_get_server_publickey() has failed&quot;</span>);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; }</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keywordflow">if</span> (ssh_get_publickey(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, &amp;server_pubkey) != SSH_OK) {</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not fetch public SSH key. %s&quot;</span>));</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_get_publickey() has failed&quot;</span>);</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <span class="keywordflow">if</span> (ssh_get_publickey_hash(server_pubkey, SSH_PUBLICKEY_HASH_MD5, &amp;pubkey, &amp;len) != 0) {</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; ssh_key_free(server_pubkey);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not fetch checksum of the public SSH key. %s&quot;</span>));</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_get_publickey_hash() has failed&quot;</span>);</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; }</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; ssh_key_free(server_pubkey);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; keyname = ssh_get_hexa(pubkey, len);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; <span class="keywordflow">if</span> (ret == SSH_KNOWN_HOSTS_UNKNOWN || ret == SSH_KNOWN_HOSTS_NOT_FOUND) {</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keywordflow">if</span> (ret == SSH_SERVER_NOT_KNOWN || ret == SSH_SERVER_FILE_NOT_FOUND) {</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; message = g_strdup_printf(<span class="stringliteral">&quot;%s\n%s\n\n%s&quot;</span>,</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; _(<span class="stringliteral">&quot;The server is unknown. The public key fingerprint is:&quot;</span>),</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; keyname,</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; _(<span class="stringliteral">&quot;Do you trust the new public key?&quot;</span>));</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; message = g_strdup_printf(<span class="stringliteral">&quot;%s\n%s\n\n%s&quot;</span>,</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; _(<span class="stringliteral">&quot;Warning: The server has changed its public key. This means you are either under attack,\n&quot;</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="stringliteral">&quot;or the administrator has changed the key. The new public key fingerprint is:&quot;</span>),</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; keyname,</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; _(<span class="stringliteral">&quot;Do you trust the new public key?&quot;</span>));</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; }</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#a9092c29f585fdabaf0ce7e865670053b">remmina_protocol_widget_panel_question_yesno</a>(gp, message);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; g_free(message);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; ssh_string_free_char(keyname);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; ssh_clean_pubkey_hash(&amp;pubkey);</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">if</span> (ret != GTK_RESPONSE_YES) <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; ssh_session_update_known_hosts(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; ssh_write_knownhost(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 9, 0)</span></div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <span class="keywordflow">case</span> SSH_KNOWN_HOSTS_ERROR:</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; <span class="keywordflow">case</span> SSH_SERVER_ERROR:</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(ssh, _(<span class="stringliteral">&quot;Could not check list of known SSH hosts. %s&quot;</span>));</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Could not check list of known SSH hosts&quot;</span>);</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; }</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <span class="keyword">enum</span> { REMMINA_SSH_AUTH_PASSWORD, REMMINA_SSH_AUTH_PKPASSPHRASE, REMMINA_SSH_AUTH_KRBTOKEN, REMMINA_SSH_AUTH_KBDINTERACTIVE } remmina_ssh_auth_type;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <span class="keywordflow">switch</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>) {</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a>:</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; keyname = _(<span class="stringliteral">&quot;SSH password&quot;</span>);</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; pwdfkey = ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_password&quot;</span> : <span class="stringliteral">&quot;password&quot;</span>;</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_PASSWORD;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a>:</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a39a8dcea793c406f0fe90f3175c4318e">SSH_AUTH_AGENT</a>:</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a>:</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; keyname = _(<span class="stringliteral">&quot;Password for private SSH key&quot;</span>);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; pwdfkey = ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_passphrase&quot;</span> : <span class="stringliteral">&quot;ssh_passphrase&quot;</span>;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_PKPASSPHRASE;</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a6264a71469928ad51fa802f65f1a934a">SSH_AUTH_GSSAPI</a>:</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; keyname = _(<span class="stringliteral">&quot;SSH Kerberos/GSSAPI&quot;</span>);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; pwdfkey = ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_kerberos_token&quot;</span> : <span class="stringliteral">&quot;ssh_kerberos_token&quot;</span>;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_KRBTOKEN;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a>:</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; instruction = _(<span class="stringliteral">&quot;Enter TOTP/OTP/2FA code&quot;</span>);</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; remmina_ssh_auth_type = REMMINA_SSH_AUTH_KBDINTERACTIVE;</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; }</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; disablepasswordstoring = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">&quot;disablepasswordstoring&quot;</span>, FALSE);</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; current_pwd = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, pwdfkey));</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="comment">/* Try existing password/passphrase first */</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; ret = <a class="code" href="remmina__ssh_8c.html#aad84c6609cb431d48121ae5e0902441b">remmina_ssh_auth</a>(ssh, current_pwd, gp, remminafile);</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Returned %d at 1st attempt with the following message:&quot;</span>, ret);</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;%s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="comment">/* It seems that functions like ssh_userauth_password() can only be called 3 times</span></div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;<span class="comment"> * on a ssh connection. And the 3rd failed attempt will block the calling thread forever.</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;<span class="comment"> * So we retry only 2 extra time authentication. */</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">for</span> (attempt = 0;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; attempt &lt; 2 &amp;&amp; ret == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a>;</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; attempt++) {</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>)</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Retrying auth because %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">if</span> (remmina_ssh_auth_type == REMMINA_SSH_AUTH_PKPASSPHRASE) {</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(gp,</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; (disablepasswordstoring ? 0 :</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>),</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? _(<span class="stringliteral">&quot;SSH tunnel credentials&quot;</span>) : _(<span class="stringliteral">&quot;SSH credentials&quot;</span>),</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; NULL,</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, pwdfkey),</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; NULL,</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; _(<span class="stringliteral">&quot;Password for private SSH key&quot;</span>));</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; current_pwd = <a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(gp);</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; save_password = <a class="code" href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a>(gp);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="keywordflow">if</span> (save_password)</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, current_pwd);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, NULL);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; }</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (remmina_ssh_auth_type == REMMINA_SSH_AUTH_PASSWORD) {</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; <span class="comment">/* Ask for user credentials. Username cannot be changed here,</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="comment"> * because we already sent it when opening the connection */</span></div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Showing panel for password\n&quot;</span>);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; current_user = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span> : <span class="stringliteral">&quot;username&quot;</span>));</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(gp,</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; (disablepasswordstoring ? 0 : <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a>)</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; | <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a10be0730fc3ea326856019ae139a922a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME</a></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; | (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? 0 : <a class="code" href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a1f63bf86b8f6da71137cf0a28ebf024a">REMMINA_MESSAGE_PANEL_FLAG_USERNAME_READONLY</a>),</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? _(<span class="stringliteral">&quot;SSH tunnel credentials&quot;</span>) : _(<span class="stringliteral">&quot;SSH credentials&quot;</span>),</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; current_user,</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; current_pwd,</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; NULL,</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; NULL);</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; current_pwd = <a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(gp);</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; save_password = <a class="code" href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a>(gp);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keywordflow">if</span> (save_password)</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, current_pwd);</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, pwdfkey, NULL);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> &amp;&amp; !ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a6de32421fea0537fb29c03e0ae8b41d6">is_multiauth</a>) {</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; g_free(current_user);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; current_user = <a class="code" href="remmina__protocol__widget_8c.html#a96159bd8e9d70c74967e666e2f188df0">remmina_protocol_widget_get_username</a>(gp);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">&quot;username&quot;</span>, current_user);</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> != NULL) {</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = NULL;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; }</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(current_user);</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> != NULL) {</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; }</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(current_pwd);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; g_free(current_user);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ad56c3878c4a651b51fdb3d0e8b9cebd7">REMMINA_SSH_AUTH_RECONNECT</a>;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; }</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; g_free(current_user);</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; g_free(current_user);</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; }</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (remmina_ssh_auth_type == REMMINA_SSH_AUTH_KBDINTERACTIVE) {</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Showing panel for keyboard interactive login\n&quot;</span>);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; ret = <a class="code" href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a>(</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; gp,</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; 0,</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; _(<span class="stringliteral">&quot;Keyboard interactive login, TOTP/OTP/2FA&quot;</span>),</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; NULL,</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; NULL,</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; NULL,</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; instruction);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keywordflow">if</span> (ret == GTK_RESPONSE_OK) {</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; current_pwd = <a class="code" href="remmina__protocol__widget_8c.html#a3fc52d61f77327534286f57e563e0923">remmina_protocol_widget_get_password</a>(gp);</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;OTP code is: %s&quot;</span>, current_pwd);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(current_pwd);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1aa554c8cad3a99ccb8cf3a48ed9e219ea">REMMINA_SSH_AUTH_USERCANCEL</a>;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; }</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; g_print(<span class="stringliteral">&quot;Unimplemented.&quot;</span>);</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; g_free(current_pwd);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keywordflow">return</span> <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; }</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Retrying authentication&quot;</span>);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; ret = <a class="code" href="remmina__ssh_8c.html#aad84c6609cb431d48121ae5e0902441b">remmina_ssh_auth</a>(ssh, current_pwd, gp, remminafile);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Authentication attempt n° %d returned %d with the following message:&quot;</span>, attempt + 2, ret);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;%s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; g_free(current_pwd); current_pwd = NULL;</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; <span class="comment">/* After attempting the max number of times, REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment"> * becomes REMMINA_SSH_AUTH_FATAL_ERROR */</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="keywordflow">if</span> (ret == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a> || ret == <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a416a26d636d492c3530b6c5f0f04a623">REMMINA_SSH_AUTH_AGAIN</a>) {</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH Authentication failed&quot;</span>);</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; ret = <a class="code" href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ab4ec94c8b9ef6d9b69d0b836750a8735">REMMINA_SSH_AUTH_FATAL_ERROR</a>;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; }</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;}</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;remmina_ssh_log_callback(ssh_session session, <span class="keywordtype">int</span> priority, <span class="keyword">const</span> <span class="keywordtype">char</span> *message, <span class="keywordtype">void</span> *userdata)</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;{</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; REMMINA_DEBUG(message);</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;}</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;gboolean</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;<a class="code" href="remmina__ssh_8h.html#a624b8ac30ddcd00ebda0b51d504f5a33">remmina_ssh_init_session</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;{</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; gint verbosity;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; gint rc;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; gchar *parsed_config;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;<span class="preprocessor">#ifdef HAVE_NETINET_TCP_H</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; socket_t sshsock;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; gint optval;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; <span class="comment">// Handle IPv4 / IPv6 dual stack</span></div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <span class="keywordtype">char</span> *hostname;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="keyword">struct </span>addrinfo hints,*aitop,*ai;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordtype">char</span> ipstr[INET6_ADDRSTRLEN];</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="keywordtype">void</span> *addr4=NULL;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="keywordtype">void</span> *addr6=NULL;</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a> = g_new0(<span class="keyword">struct</span> ssh_callbacks_struct, 1);</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="comment">/* Init &amp; startup the SSH session */</span></div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server=%s port=%d is_tunnel=%s tunnel_entrance_host=%s tunnel_entrance_port=%d&quot;</span>,</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>,</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>,</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> ? <span class="stringliteral">&quot;Yes&quot;</span> : <span class="stringliteral">&quot;No&quot;</span>,</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = ssh_new();</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; <span class="comment">/* Tunnel sanity checks */</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> &amp;&amp; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> != NULL) {</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(<span class="stringliteral">&quot;Internal error in %s: is_tunnel and tunnel_entrance != NULL&quot;</span>, __func__);</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; REMMINA_DEBUG(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; }</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> &amp;&amp; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> == NULL) {</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(<span class="stringliteral">&quot;Internal error in %s: is_tunnel == false and tunnel_entrance == NULL&quot;</span>, __func__);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; REMMINA_DEBUG(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; <span class="comment">/* Set connection host/port */</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a>) {</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PORT, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to %s and SSH_OPTIONS_PORT to %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PORT, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to %s and SSH_OPTIONS_PORT to %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; }</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> &amp;&amp; *ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> != 0) {</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_IDENTITY, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_IDENTITY is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_IDENTITY is not set, by default the files “identity”, “id_dsa” and “id_rsa” are used.&quot;</span>);</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; }</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;<span class="preprocessor">#ifdef SNAP_BUILD</span></div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_SSH_DIR, g_strdup_printf(<span class="stringliteral">&quot;%s/.ssh&quot;</span>, g_getenv(<span class="stringliteral">&quot;SNAP_USER_COMMON&quot;</span>)));</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; ssh_callbacks_init(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__log_8c.html#a96f5bb72acbdcbf8793b4a5f4a6132b5">remmina_log_running</a>()) {</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; verbosity = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aac4f34f297a653052752b571777bc001">ssh_loglevel</a>;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_LOG_VERBOSITY, &amp;verbosity);</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>-&gt;log_function = remmina_ssh_log_callback;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <span class="comment">/* Reset libssh legacy userdata. This is a workaround for a libssh bug */</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; ssh_set_log_userdata(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>-&gt;userdata = ssh;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; ssh_set_callbacks(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>);</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <span class="comment">/* As the latest parse the ~/.ssh/config file */</span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="keywordflow">if</span> (g_strcmp0(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, <span class="stringliteral">&quot;127.0.0.1&quot;</span>) == 0) {</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_HOST temporary set to the destination host as ssh-&gt;tunnel_entrance_host is 127.0.0.1,&quot;</span>);</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; }</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1d7deb091e0d51a8d7885ad9e22dc9a7">ssh_parseconfig</a>) {</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="keywordflow">if</span> (ssh_options_parse_config(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL) == 0)</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh_config have been correctly parsed&quot;</span>);</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot parse ssh_config: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; }</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; <span class="keywordflow">if</span> (g_strcmp0(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>, <span class="stringliteral">&quot;127.0.0.1&quot;</span>) == 0) {</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to ssh-&gt;tunnel_entrance_host is 127.0.0.1,&quot;</span>);</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>);</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; }</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; <span class="keywordflow">if</span> (!ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> || *ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> == 0) {</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_USER, &amp;parsed_config);</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>)</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_USER returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; }</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; }</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_USER, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_USER is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <span class="comment">/* SSH_OPTIONS_PROXYCOMMAND */</span></div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PROXYCOMMAND, &amp;parsed_config);</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_PROXYCOMMAND returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; }</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_PROXYCOMMAND, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_PROXYCOMMAND is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_PROXYCOMMAND does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; <span class="comment">/* SSH_OPTIONS_HOSTKEYS */</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOSTKEYS, &amp;parsed_config);</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_HOSTKEYS returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; }</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOSTKEYS, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_HOSTKEYS is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_HOSTKEYS does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="comment">/* SSH_OPTIONS_KEY_EXCHANGE */</span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_KEY_EXCHANGE, &amp;parsed_config);</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_KEY_EXCHANGE returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; }</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_KEY_EXCHANGE, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_KEY_EXCHANGE is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_KEY_EXCHANGE does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160; <span class="comment">/* SSH_OPTIONS_CIPHERS_C_S */</span></div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_CIPHERS_C_S, &amp;parsed_config);</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_CIPHERS_C_S returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; }</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_CIPHERS_C_S, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_CIPHERS_C_S has been set to %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_CIPHERS_C_S does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; <span class="comment">/* SSH_OPTIONS_STRICTHOSTKEYCHECK */</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_STRICTHOSTKEYCHECK, &amp;parsed_config);</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a> = atoi(parsed_config);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_STRICTHOSTKEYCHECK returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; }</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_STRICTHOSTKEYCHECK, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_STRICTHOSTKEYCHECK is now %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_STRICTHOSTKEYCHECK does not have a valid value. %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <span class="comment">/* SSH_OPTIONS_COMPRESSION */</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; rc = ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_COMPRESSION, &amp;parsed_config);</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <span class="keywordflow">if</span> (rc == SSH_OK) {</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a> = g_strdup(parsed_config);</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; ssh_string_free_char(parsed_config);</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Parsing ssh_config for SSH_OPTIONS_COMPRESSION returned an error: %s&quot;</span>, ssh_get_error(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>));</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; }</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; rc = ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_COMPRESSION, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <span class="keywordflow">if</span> (rc == 0)</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_COMPRESSION is now %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH_OPTIONS_COMPRESSION does not have a valid value. %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; <span class="comment">// Handle the dual IPv4 / IPv6 stack</span></div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <span class="comment">// Prioritize IPv6 and fallback to IPv4</span></div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <span class="keywordtype">int</span> success = 0;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <span class="comment">// Run the DNS resolution </span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="comment">// First retrieve host from the ssh-&gt;session structure</span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; ssh_options_get(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, &amp;hostname);</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; <span class="comment">// Call getaddrinfo</span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; memset(&amp;hints, 0, <span class="keyword">sizeof</span>(hints));</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; hints.ai_family = AF_INET6;</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; hints.ai_socktype = SOCK_STREAM;</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; <span class="keywordflow">if</span> ((getaddrinfo(hostname, NULL, &amp;hints, &amp;aitop)) != 0) {</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(<span class="stringliteral">&quot;Could not resolve hostname %s to IPv6&quot;</span>, hostname);</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; REMMINA_DEBUG(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; }</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; <span class="comment">// We have one or more IPV6 addesses now, extract them</span></div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; ai = aitop;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; <span class="keywordflow">while</span> (ai != NULL) {</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; <span class="keyword">struct </span>sockaddr_in6 *ipv6 = (<span class="keyword">struct </span>sockaddr_in6 *)ai-&gt;ai_addr;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; addr6 = &amp;(ipv6-&gt;sin6_addr);</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; inet_ntop(AF_INET6, addr6, ipstr, <span class="keyword">sizeof</span> ipstr);</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ipstr);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to IPv6 %s&quot;</span>, ipstr);</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; <span class="keywordflow">if</span> (ssh_connect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>)) {</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; ssh_disconnect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;IPv6 session failed&quot;</span>);</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; success = 1;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;IPv6 session success !&quot;</span>);</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; }</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; ai = ai-&gt;ai_next;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; }</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; freeaddrinfo(aitop);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; }</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; <span class="keywordflow">if</span> (success == 0) {</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; <span class="comment">// Fallback to IPv4</span></div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="comment">// Call getaddrinfo</span></div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; memset(&amp;hints, 0, <span class="keyword">sizeof</span>(hints));</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; hints.ai_family = AF_INET;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; hints.ai_socktype = SOCK_STREAM;</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; <span class="keywordflow">if</span> ((getaddrinfo(hostname, NULL, &amp;hints, &amp;aitop)) != 0) {</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = g_strdup_printf(<span class="stringliteral">&quot;Could not resolve hostname %s to IPv4&quot;</span>, hostname);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; REMMINA_DEBUG(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; }</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; <span class="comment">// We have one or more IPV4 addesses now, extract them</span></div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; ai = aitop;</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <span class="keywordflow">while</span> (ai != NULL) {</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; <span class="keyword">struct </span>sockaddr_in *ipv4 = (<span class="keyword">struct </span>sockaddr_in *)ai-&gt;ai_addr;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; addr4 = &amp;(ipv4-&gt;sin_addr);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; inet_ntop(AF_INET, addr4, ipstr, <span class="keyword">sizeof</span> ipstr);</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; ssh_options_set(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, SSH_OPTIONS_HOST, ipstr);</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Setting SSH_OPTIONS_HOST to IPv4 %s&quot;</span>, ipstr);</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keywordflow">if</span> (ssh_connect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>)) {</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; ssh_disconnect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;IPv4 session failed&quot;</span>);</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; success = 1;</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;IPv4 session success !&quot;</span>);</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; }</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; ai = ai-&gt;ai_next;</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; }</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; freeaddrinfo(aitop);</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; }</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; }</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; <span class="keywordflow">if</span> (success == 0){</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; }</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; </div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;<span class="preprocessor"> #ifdef HAVE_NETINET_TCP_H</span></div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; <span class="comment">/* Set keepalive on SSH socket, so we can keep firewalls awaken and detect</span></div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;<span class="comment"> * when we loss the tunnel */</span></div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; sshsock = ssh_get_fd(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; <span class="keywordflow">if</span> (sshsock &gt;= 0) {</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; optval = 1;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, SOL_SOCKET, SO_KEEPALIVE, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP KeepAlive not set&quot;</span>);</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP KeepAlive enabled&quot;</span>);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;<span class="preprocessor">#ifdef TCP_KEEPIDLE</span></div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a2bf96a40b9f63300d02e158b26546203">ssh_tcp_keepidle</a>;</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_KEEPIDLE, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPIDLE not set&quot;</span>);</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPIDLE set to %i&quot;</span>, optval);</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;<span class="preprocessor">#ifdef TCP_KEEPCNT</span></div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a082f698b8aa7cec3c1cb0fd987d4358f">ssh_tcp_keepcnt</a>;</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_KEEPCNT, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPCNT not set&quot;</span>);</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPCNT set to %i&quot;</span>, optval);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;<span class="preprocessor">#ifdef TCP_KEEPINTVL</span></div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a793ae9c3e2f88eed85551c85d6832ebd">ssh_tcp_keepintvl</a>;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_KEEPINTVL, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPINTVL not set&quot;</span>);</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_KEEPINTVL set to %i&quot;</span>, optval);</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;<span class="preprocessor">#ifdef TCP_USER_TIMEOUT</span></div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; optval = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad92d70d47d7ad80298efe591955fa8b8">ssh_tcp_usrtimeout</a>;</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="keywordflow">if</span> (setsockopt(sshsock, IPPROTO_TCP, TCP_USER_TIMEOUT, &amp;optval, <span class="keyword">sizeof</span>(optval)) &lt; 0)</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_USER_TIMEOUT not set&quot;</span>);</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;TCP_USER_TIMEOUT set to %i&quot;</span>, optval);</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; }</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; <span class="comment">/* Try the &quot;none&quot; authentication */</span></div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; <span class="keywordflow">if</span> (ssh_userauth_none(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>, NULL) == SSH_AUTH_SUCCESS)</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = TRUE;</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;}</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;gboolean</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;<a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gboolean is_tunnel)</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;{</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <span class="keyword">const</span> gchar *username;</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <span class="keyword">const</span> gchar *privatekey;</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; <span class="keyword">const</span> gchar *server;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; gchar *s;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = NULL;</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a> = NULL;</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = NULL;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> = NULL;</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> = is_tunnel;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; pthread_mutex_init(&amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a547feb6e46dfb8e37a4eb338c17d7b52">ssh_mutex</a>, NULL);</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> = NULL;</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a> = 0;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; username = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_username&quot;</span> : <span class="stringliteral">&quot;username&quot;</span>);</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; privatekey = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_privatekey&quot;</span> : <span class="stringliteral">&quot;ssh_privatekey&quot;</span>);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_certfile&quot;</span> : <span class="stringliteral">&quot;ssh_certfile&quot;</span>));</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <span class="comment">/* The ssh-&gt;server and ssh-&gt;port values */</span></div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <span class="keywordflow">if</span> (is_tunnel) {</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;We are initializing an SSH tunnel session&quot;</span>);</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_tunnel_server&quot;</span>);</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <span class="keywordflow">if</span> (server == NULL || server[0] == 0) {</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <span class="comment">// ssh_tunnel_server empty or invalid, we are opening a tunnel, it means that &quot;Same server at port 22&quot; has been selected</span></div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>);</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <span class="keywordflow">if</span> (server == NULL || server[0] == 0)</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; server = <span class="stringliteral">&quot;localhost&quot;</span>;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 22, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a> = 22;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 22, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; }</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server:port = %s, server = %s, port = %d&quot;</span>, server, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;We are initializing an SSH session&quot;</span>);</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;server&quot;</span>);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; <span class="keywordflow">if</span> (server == NULL || server[0] == 0)</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; server = <span class="stringliteral">&quot;localhost&quot;</span>;</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 22, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;server:port = %s, server = %s, port = %d&quot;</span>, server, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; }</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>[0] == <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; <span class="comment">// ???</span></div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Calling remmina_public_get_server_port&quot;</span>);</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, 0, &amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, NULL);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; }</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Initialized SSH struct from file with ssh-&gt;server = %s and SSH-&gt;port = %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(username ? username : NULL);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = NULL;</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_auth&quot;</span> : <span class="stringliteral">&quot;ssh_auth&quot;</span>, 0);</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;ssh_charset&quot;</span>));</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_kex_algorithms&quot;</span> : <span class="stringliteral">&quot;ssh_kex_algorithms&quot;</span>));</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_ciphers&quot;</span> : <span class="stringliteral">&quot;ssh_ciphers&quot;</span>));</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_hostkeytypes&quot;</span> : <span class="stringliteral">&quot;ssh_hostkeytypes&quot;</span>));</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_proxycommand&quot;</span> : <span class="stringliteral">&quot;ssh_proxycommand&quot;</span>));</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a> = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_stricthostkeycheck&quot;</span> : <span class="stringliteral">&quot;ssh_stricthostkeycheck&quot;</span>, 0);</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; gint c = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, is_tunnel ? <span class="stringliteral">&quot;ssh_tunnel_compression&quot;</span> : <span class="stringliteral">&quot;ssh_compression&quot;</span>, 0);</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a> = (c == 1) ? <span class="stringliteral">&quot;yes&quot;</span> : <span class="stringliteral">&quot;no&quot;</span>;</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;user: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;password: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;auth: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>);</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;charset: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>);</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;kex_algorithms: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;ciphers: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;hostkeytypes: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;proxycommand: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;stricthostkeycheck: %d&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>);</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;compression: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>);</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; <span class="comment">/* Public/Private keys */</span></div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; s = (privatekey ? g_strdup(privatekey) : <a class="code" href="remmina__ssh_8c.html#ab6d8bdad543b3caead2b2b0339484798">remmina_ssh_find_identity</a>());</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; <span class="keywordflow">if</span> (s) {</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> = <a class="code" href="remmina__ssh_8c.html#a72a58e416c4eeb9d17eaf76360ebee42">remmina_ssh_identity_path</a>(s);</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;ssh-&gt;privkeyfile: %s&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; g_free(s);</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> = NULL;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; }</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;}</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;<span class="keyword">static</span> gboolean</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;remmina_ssh_init_from_ssh(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> <a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh_src)</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;{</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = NULL;</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac148c436afa70f426d665b4ddd2d8f4d">authenticated</a> = FALSE;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a> = NULL;</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; pthread_mutex_init(&amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a547feb6e46dfb8e37a4eb338c17d7b52">ssh_mutex</a>, NULL);</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ace4bb7170f349bd7f127f72c9c7b6ac6">is_tunnel</a>;</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">port</a>;</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> ? ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a> : NULL);</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#abf5a73c3444790177635a6eab6417d03">auth</a>;</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa34e103281dafaa073d2a676b3368529">passphrase</a>);</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>);</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">proxycommand</a>);</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a345d41b54490dd39e35280122d22feed">kex_algorithms</a>);</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b3e071eb2c6011efdcea3f65f8e7fa0">ciphers</a>);</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a69e209a1ee77d6dfe5d87961e2a50a6a">hostkeytypes</a>);</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a62e6a209747daa65061273243e830ae9">stricthostkeycheck</a>;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#ab017331f59fceff63bb33ff00d088870">compression</a>;</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a> = g_strdup(ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#aebc7525b6f72d22c1ce4df93c1576602">tunnel_entrance_host</a>);</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a> = ssh_src-&gt;<a class="code" href="struct___remmina_s_s_h.html#a76ed92539dfe749a24a3a3b99f3a644f">tunnel_entrance_port</a>;</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;}</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;gchar *</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;<a class="code" href="remmina__ssh_8h.html#a09bd4aee40b6e8d6ba8ffaa84dc95330">remmina_ssh_convert</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *from)</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;{</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; gchar *to = NULL;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> &amp;&amp; from)</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; to = g_convert(from, -1, <span class="stringliteral">&quot;UTF-8&quot;</span>, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>, NULL, NULL, NULL);</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; <span class="keywordflow">if</span> (!to) to = g_strdup(from);</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; <span class="keywordflow">return</span> to;</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;}</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;gchar *</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;<a class="code" href="remmina__ssh_8h.html#aeccf94afb57bcad37b4241d45fcb3fea">remmina_ssh_unconvert</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh, <span class="keyword">const</span> gchar *from)</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;{</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; gchar *to = NULL;</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a> &amp;&amp; from)</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; to = g_convert(from, -1, ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>, <span class="stringliteral">&quot;UTF-8&quot;</span>, NULL, NULL, NULL);</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <span class="keywordflow">if</span> (!to) to = g_strdup(from);</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <span class="keywordflow">return</span> to;</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;}</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;{</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; <span class="keywordflow">if</span> (ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>) {</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Disconnecting SSH session&quot;</span>);</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; ssh_disconnect(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; ssh_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a> = NULL;</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; }</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#aa8e75d0a635b3390100218bee6b49378">callback</a>);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#ae396f0b535e2e92d640a0eb971aa082b">server</a>);</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3a8dc7679e22208bbdf076c520f25bbb">user</a>);</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">password</a>);</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">privkeyfile</a>);</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a37cb349f88211ed4a65a3486f8523eaa">certfile</a>);</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a0b35a5a573abb5e8b8a27a91434a00a5">charset</a>);</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; g_free(ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">error</a>);</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; pthread_mutex_destroy(&amp;ssh-&gt;<a class="code" href="struct___remmina_s_s_h.html#a547feb6e46dfb8e37a4eb338c17d7b52">ssh_mutex</a>);</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; g_free(ssh);</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;}</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;<span class="comment">* SSH Tunnel *</span></div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;<span class="keyword">struct </span>_RemminaSSHTunnelBuffer {</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; gchar * data;</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; gchar * ptr;</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; ssize_t len;</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;};</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;<span class="keyword">static</span> <a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;remmina_ssh_tunnel_buffer_new(ssize_t len)</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;{</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; <a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *buffer;</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; buffer = g_new(<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a>, 1);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; buffer-&gt;data = (gchar *)g_malloc(len);</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; buffer-&gt;ptr = buffer-&gt;data;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; buffer-&gt;len = len;</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; <span class="keywordflow">return</span> buffer;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;}</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;remmina_ssh_tunnel_buffer_free(<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *buffer)</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;{</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <span class="keywordflow">if</span> (buffer) {</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; g_free(buffer-&gt;data);</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; g_free(buffer);</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; }</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;}</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;<a class="code" href="remmina__ssh_8h.html#abf04fd329ab77bbd4f6aa1cb1eaa349d">remmina_ssh_tunnel_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;{</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; tunnel = g_new(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a>, 1);</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; <a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(REMMINA_SSH(tunnel), remminafile, TRUE);</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = -1;</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a> = NULL;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a> = NULL;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a> = NULL;</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> = 0;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a> = 0;</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = -1;</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a> = NULL;</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> = 0;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a> = NULL;</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a> = 0;</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a> = NULL;</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> = 0;</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a> = NULL;</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> = NULL;</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a> = NULL;</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a> = NULL;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a> = NULL;</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; <span class="keywordflow">return</span> tunnel;</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;}</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;remmina_ssh_tunnel_close_all_channels(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;{</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>; i++) {</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i]);</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; remmina_ssh_tunnel_buffer_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]);</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160; ssh_channel_close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i]);</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; ssh_channel_send_eof(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i]);</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; ssh_channel_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i]);</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; }</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>);</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a> = NULL;</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>);</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a> = NULL;</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>);</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a> = NULL;</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> = 0;</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a> = 0;</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;}</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;remmina_ssh_tunnel_remove_channel(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gint n)</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;{</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; ssh_channel_close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n]);</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; ssh_channel_send_eof(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n]);</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; ssh_channel_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n]);</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[n]);</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160; remmina_ssh_tunnel_buffer_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[n]);</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>--;</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[n] = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>];</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>] = NULL;</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[n] = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>];</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[n] = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>];</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;}</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160;<span class="comment">/* Register the new channel/socket pair */</span></div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;remmina_ssh_tunnel_add_channel(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, ssh_channel <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>, gint sock)</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;{</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; gint flags;</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; gint i;</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160; i = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>++;</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> &gt; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a>) {</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160; <span class="comment">/* Allocate an extra NULL pointer in channels for ssh_select */</span></div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a> = (ssh_channel *)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>,</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160; <span class="keyword">sizeof</span>(ssh_channel) * (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> + 1));</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a> = (gint *)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>,</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; <span class="keyword">sizeof</span>(gint) * tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>);</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a> = (<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> **)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>,</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160; <span class="keyword">sizeof</span>(<a class="code" href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a> *) * tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>);</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6a184c6ca8fa267012d86986dac396c6">max_channels</a> = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>;</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a> = (ssh_channel *)g_realloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a>,</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; <span class="keyword">sizeof</span>(ssh_channel) * (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> + 1));</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; }</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i] = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i + 1] = NULL;</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i] = sock;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i] = NULL;</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; flags = fcntl(sock, F_GETFL, 0);</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; fcntl(sock, F_SETFL, flags | O_NONBLOCK);</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;}</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;remmina_ssh_tunnel_accept_local_connection(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gboolean blocking)</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;{</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160; gint sock, sock_flags;</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160; sock_flags = fcntl(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>, F_GETFL, 0);</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160; <span class="keywordflow">if</span> (blocking)</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160; sock_flags &amp;= ~O_NONBLOCK;</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160; sock_flags |= O_NONBLOCK;</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160; fcntl(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>, F_SETFL, sock_flags);</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160; <span class="comment">/* Accept a local connection */</span></div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; sock = accept(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>, NULL, NULL);</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; <span class="keywordflow">if</span> (blocking) {</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; g_free(REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(<span class="stringliteral">&quot;Local socket not accepted&quot;</span>);</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160; }</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; }</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; <span class="keywordflow">return</span> sock;</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;}</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;<span class="keyword">static</span> ssh_channel</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;remmina_ssh_tunnel_create_forward_channel(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;{</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; ssh_channel channel = NULL;</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; channel = ssh_channel_new(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad9887ee0673a2b0b03b091746ae02d23">ssh</a>.<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not create channel. %s&quot;</span>));</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; }</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160;</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; <span class="comment">/* Request the SSH server to connect to the destination */</span></div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;SSH tunnel destination is %s&quot;</span>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a>);</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; <span class="keywordflow">if</span> (ssh_channel_open_forward(channel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>, <span class="stringliteral">&quot;127.0.0.1&quot;</span>, 0) != SSH_OK) {</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not connect to SSH tunnel. %s&quot;</span>));</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; }</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;}</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;<span class="keyword">static</span> gpointer</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;remmina_ssh_tunnel_main_thread_proc(gpointer data)</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;{</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)data;</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; gchar *ptr;</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; ssize_t len = 0, lenw = 0;</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; fd_set <span class="keyword">set</span>;</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <span class="keyword">struct </span>timeval timeout;</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160; g_autoptr(GDateTime) t1 = NULL;</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; g_autoptr(GDateTime) t2 = NULL;</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; GTimeSpan diff; <span class="comment">// microseconds</span></div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; ssh_channel channel = NULL;</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; gboolean first = TRUE;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; gboolean disconnected;</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; gint sock;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; gint maxfd;</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; gint i;</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; gint ret;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; <span class="keyword">struct </span>sockaddr_in sin;</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; t1 = g_date_time_new_now_local();</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; t2 = g_date_time_new_now_local();</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; <span class="keywordflow">switch</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a>) {</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798a78cac65c66c1f72592488c7c5728ea14">REMMINA_SSH_TUNNEL_OPEN</a>:</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; sock = remmina_ssh_tunnel_accept_local_connection(tunnel, TRUE);</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; <span class="keywordflow">if</span> (tunnel)</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160; }</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; channel = remmina_ssh_tunnel_create_forward_channel(tunnel);</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; <span class="keywordflow">if</span> (!tunnel) {</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; close(sock);</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; }</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; remmina_ssh_tunnel_add_channel(tunnel, channel, sock);</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a>:</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160; <span class="comment">/* Detect the next available port starting from 6010 on the server */</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160; <span class="keywordflow">for</span> (i = 10; i &lt;= MAX_X_DISPLAY_NUMBER; i++) {</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160; <span class="keywordflow">if</span> (ssh_channel_listen_forward(REMMINA_SSH(tunnel)-&gt;session, (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> ? <span class="stringliteral">&quot;localhost&quot;</span> : NULL), 6000 + i, NULL)) {</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> = i;</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160; }</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160; <span class="keywordflow">if</span> (ssh_forward_listen(REMMINA_SSH(tunnel)-&gt;session, (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> ? <span class="stringliteral">&quot;localhost&quot;</span> : NULL), 6000 + i, NULL)) {</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> = i;</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160; }</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160; }</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> &lt; 1) {</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not request port forwarding. %s&quot;</span>));</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160; }</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> &amp;&amp;</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160; !(*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>)) {</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160; }</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160; <span class="keywordflow">case</span> <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>:</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; <span class="keywordflow">if</span> (ssh_channel_listen_forward(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>, NULL)) {</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not request port forwarding. %s&quot;</span>));</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160; }</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160; <span class="keywordflow">if</span> (ssh_forward_listen(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>, NULL)) {</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not request port forwarding. %s&quot;</span>));</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; }</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a> &amp;&amp;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; !(*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a8066492c4a0181f1b39b2fb2098fb56d">init_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>)) {</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; }</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160;</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; }</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a> = 10240;</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a> = g_malloc(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a>);</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; <span class="comment">/* Start the tunnel data transmission */</span></div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; <span class="keywordflow">while</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) {</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a> ||</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; <span class="keywordflow">if</span> (first) {</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; first = FALSE;</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; channel = ssh_channel_accept_forward(REMMINA_SSH(tunnel)-&gt;session, 15000, &amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;The server did not respond.&quot;</span>));</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; }</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a>)</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa904bb1d9f643f6fde2b0eea4a8b1660">connect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; <span class="comment">/* For reverse tunnel, we only need one connection. */</span></div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; ssh_channel_cancel_forward(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; ssh_forward_cancel(REMMINA_SSH(tunnel)-&gt;session, NULL, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160; }</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> != <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160; <span class="comment">/* Poll once per some period of time if no incoming connections.</span></div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;<span class="comment"> * Don’t try to poll continuously as it will significantly slow down the loop */</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; t1 = g_date_time_new_now_local();</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160; diff = g_date_time_difference(t1, t2) * 10000000</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; + g_date_time_difference(t1, t2) / 100000;</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; <span class="keywordflow">if</span> (diff &gt; 1) {</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Polling tunnel channels&quot;</span>);</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; channel = ssh_channel_accept_forward(REMMINA_SSH(tunnel)-&gt;session, 0, &amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a>);</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160; <span class="keywordflow">if</span> (channel == NULL)</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160; t2 = g_date_time_new_now_local();</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; }</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160; }</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160; <span class="keywordflow">if</span> (channel) {</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>) {</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160; sin.sin_family = AF_INET;</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160; sin.sin_port = htons(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ae41b6af92643cfbcd3e13275f4281260">localport</a>);</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</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="l02496"></a><span class="lineno"> 2496</span>&#160; sock = socket(AF_INET, SOCK_STREAM, 0);</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160; <span class="keywordflow">if</span> (connect(sock, (<span class="keyword">struct</span> sockaddr *)&amp;sin, <span class="keyword">sizeof</span>(sin)) &lt; 0) {</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel),</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160; _(<span class="stringliteral">&quot;Cannot connect to local port %i.&quot;</span>), tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ae41b6af92643cfbcd3e13275f4281260">localport</a>);</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160; close(sock);</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160; sock = -1;</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160; }</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160; sock = <a class="code" href="remmina__public_8c.html#a52656bbe00a83068f36337f449bdc767">remmina_public_open_xdisplay</a>(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>);</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160; <span class="keywordflow">if</span> (sock &gt;= 0)</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160; remmina_ssh_tunnel_add_channel(tunnel, channel, sock);</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160; <span class="comment">/* Failed to create unix socket. Will this happen? */</span></div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160; }</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; channel = NULL;</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; }</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160; }</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a> &lt;= 0)</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160; <span class="comment">/* No more connections. We should quit */</span></div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160; timeout.tv_sec = 0;</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; timeout.tv_usec = 200000;</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160; FD_ZERO(&amp;<span class="keyword">set</span>);</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; maxfd = 0;</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">num_channels</a>; i++) {</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i] &gt; maxfd)</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; maxfd = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i];</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160; FD_SET(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], &amp;<span class="keyword">set</span>);</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160; }</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160; ret = ssh_select(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a>, maxfd + 1, &amp;<span class="keyword">set</span>, &amp;timeout);</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160; <span class="keywordflow">if</span> (!tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160; <span class="keywordflow">if</span> (ret == SSH_EINTR) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160; <span class="keywordflow">if</span> (ret == -1) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160; i = 0;</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160; <span class="keywordflow">while</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> &amp;&amp; i &lt; tunnel-&gt;num_channels) {</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160; disconnected = FALSE;</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160; <span class="keywordflow">if</span> (FD_ISSET(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], &amp;<span class="keyword">set</span>)) {</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160; <span class="keywordflow">while</span> (!disconnected &amp;&amp;</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160; (len = read(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a88ae4fb816713bd90d8e452b5e7ef0bb">buffer_len</a>)) &gt; 0) {</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160; <span class="keywordflow">for</span> (ptr = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a>, lenw = 0; len &gt; 0; len -= lenw, ptr += lenw) {</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160; lenw = ssh_channel_write(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i], (<span class="keywordtype">char</span> *)ptr, len);</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160; <span class="keywordflow">if</span> (lenw &lt;= 0) {</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not write to SSH channel. %s&quot;</span>));</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160; }</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160; }</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; }</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; <span class="keywordflow">if</span> (len == 0) {</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not read from tunnel listening socket. %s&quot;</span>));</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160; }</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160; }</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160; <span class="keywordflow">if</span> (disconnected) {</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;tunnel disconnected because %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160; remmina_ssh_tunnel_remove_channel(tunnel, i);</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160; }</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160; i++;</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160; }</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160; <span class="keywordflow">if</span> (!tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160; i = 0;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160; <span class="keywordflow">while</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> &amp;&amp; i &lt; tunnel-&gt;num_channels) {</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160; disconnected = FALSE;</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; <span class="keywordflow">if</span> (!tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]) {</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; len = ssh_channel_poll(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i], 0);</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160; <span class="keywordflow">if</span> (len == SSH_ERROR || len == SSH_EOF) {</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not poll SSH channel. %s&quot;</span>));</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len &gt; 0) {</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i] = remmina_ssh_tunnel_buffer_new(len);</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160; len = ssh_channel_read_nonblocking(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ab11c1bcc8549ce8b154f65f9009c65d4">channels</a>[i], tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;data, len, 0);</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160; <span class="keywordflow">if</span> (len &lt;= 0) {</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not read SSH channel in a non-blocking way. %s&quot;</span>));</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len = len;</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; }</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; }</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160; }</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; <span class="keywordflow">if</span> (!disconnected &amp;&amp; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]) {</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; <span class="keywordflow">for</span> (lenw = 0; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len &gt; 0;</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len -= lenw, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;ptr += lenw) {</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; lenw = write(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">sockets</a>[i], tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;ptr, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len);</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; <span class="keywordflow">if</span> (lenw == -1 &amp;&amp; errno == EAGAIN &amp;&amp; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>)</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</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="l02596"></a><span class="lineno"> 2596</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="l02597"></a><span class="lineno"> 2597</span>&#160;<span class="comment"> * break, leave the buffer there, and continue with other data */</span></div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; <span class="keywordflow">if</span> (lenw &lt;= 0) {</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not send data to tunnel listening socket. %s&quot;</span>));</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160; disconnected = TRUE;</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160; }</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160; }</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]-&gt;len &lt;= 0) {</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160; remmina_ssh_tunnel_buffer_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i]);</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a27cb79f54113bb4aa46ea163717087b1">socketbuffers</a>[i] = NULL;</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160; }</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; }</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; <span class="keywordflow">if</span> (disconnected) {</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Connection to SSH tunnel dropped. %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160; remmina_ssh_tunnel_remove_channel(tunnel, i);</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160; }</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; i++;</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; }</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; sock = remmina_ssh_tunnel_accept_local_connection(tunnel, FALSE);</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160; <span class="keywordflow">if</span> (sock &gt; 0) {</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160; channel = remmina_ssh_tunnel_create_forward_channel(tunnel);</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160; <span class="keywordflow">if</span> (!channel) {</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Could not open new SSH connection. %s&quot;</span>, REMMINA_SSH(tunnel)-&gt;error);</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; close(sock);</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160; <span class="comment">/* Leave thread loop */</span></div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160; remmina_ssh_tunnel_add_channel(tunnel, channel, sock);</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160; }</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160; }</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160; }</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160; remmina_ssh_tunnel_close_all_channels(tunnel);</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160; <span class="comment">/* Notify tunnel owner of disconnection */</span></div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a19fed9a85494d40d3f2ae2ae1d1bc18c">disconnect_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6f2cd8a2535e180e7bd428e84030ffb6">callback_data</a>);</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;}</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;<span class="keyword">static</span> gboolean remmina_ssh_notify_tunnel_main_thread_end(gpointer data)</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;{</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)data;</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160; <span class="comment">/* Ask tunnel owner to destroy tunnel object */</span></div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a1e1f1bfaec497b1365ea70ebe795d778">destroy_func</a>)</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160; (*tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a1e1f1bfaec497b1365ea70ebe795d778">destroy_func</a>)(tunnel, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a33ae9b7cd8cb3dcd85223017dfd13795">destroy_func_callback_data</a>);</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;}</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;<span class="keyword">static</span> gpointer</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;remmina_ssh_tunnel_main_thread(gpointer data)</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;{</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160; <a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel = (<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *)data;</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160;</div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);</div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160;</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; <span class="keywordflow">while</span> (TRUE) {</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160; remmina_ssh_tunnel_main_thread_proc(data);</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> &lt; 0 || tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> == 0 || !tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a>) <span class="keywordflow">break</span>;</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160; }</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160;</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160; <span class="comment">/* Do after tunnel thread cleanup */</span></div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; IDLE_ADD((GSourceFunc)remmina_ssh_notify_tunnel_main_thread_end, (gpointer)tunnel);</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160;</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160;}</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160;</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;<a class="code" href="remmina__ssh_8h.html#ae9f52b1a3a545acae8c93007e20ec909">remmina_ssh_tunnel_cancel_accept</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160;{</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> &gt;= 0) {</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>);</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = -1;</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160; }</div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160;}</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;gboolean</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;<a class="code" href="remmina__ssh_8h.html#a52b3f47eac79f2781ba81d61505f4f53">remmina_ssh_tunnel_open</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, <span class="keyword">const</span> gchar *host, gint port, gint local_port)</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;{</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160; gint sock;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160; gint sockopt = 1;</div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160; <span class="keyword">struct </span>sockaddr_in sin;</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160;</div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798a78cac65c66c1f72592488c7c5728ea14">REMMINA_SSH_TUNNEL_OPEN</a>;</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a> = g_strdup(host);</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> = port;</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> == 0) {</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Assign a destination port.&quot;</span>));</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160; }</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160; <span class="comment">/* Create the server socket that listens on the local port */</span></div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160; sock = socket(AF_INET, SOCK_STREAM, 0);</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; <span class="keywordflow">if</span> (sock &lt; 0) {</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not create socket.&quot;</span>));</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160; }</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &amp;sockopt, <span class="keyword">sizeof</span>(sockopt));</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160; sin.sin_family = AF_INET;</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; sin.sin_port = htons(local_port);</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</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="l02718"></a><span class="lineno"> 2718</span>&#160;</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</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="l02720"></a><span class="lineno"> 2720</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not bind server socket to local port.&quot;</span>));</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160; close(sock);</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160; }</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160; <span class="keywordflow">if</span> (listen(sock, 1)) {</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160; REMMINA_SSH(tunnel)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not listen to local port.&quot;</span>));</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160; close(sock);</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160; }</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = sock;</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = TRUE;</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160;</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160; <span class="keywordflow">if</span> (pthread_create(&amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>, NULL, remmina_ssh_tunnel_main_thread, tunnel)) {</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160; <span class="comment">// TRANSLATORS: Do not translate pthread</span></div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not start pthread.&quot;</span>));</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160; }</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;}</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;gboolean</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;<a class="code" href="remmina__ssh_8h.html#aba49db2ced40e21e8adfad69dcfda2c4">remmina_ssh_tunnel_xport</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gboolean bindlocalhost)</div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160;{</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a>;</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a6fa916d3736cb8e2a0e6541f608c209b">bindlocalhost</a> = bindlocalhost;</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = TRUE;</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160; <span class="keywordflow">if</span> (pthread_create(&amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>, NULL, remmina_ssh_tunnel_main_thread, tunnel)) {</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160; <span class="comment">// TRANSLATORS: Do not translate pthread</span></div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not start pthread.&quot;</span>));</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160; }</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;}</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160;</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;gboolean</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;<a class="code" href="remmina__ssh_8h.html#ae47c8270267b02b9c0ff5b36074101c2">remmina_ssh_tunnel_reverse</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel, gint port, gint local_port)</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;{</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> = <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798ae14c0d50235951946ca18866a1329459">REMMINA_SSH_TUNNEL_REVERSE</a>;</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ad883561d61ee8d32d2201e642b0ab9cc">port</a> = port;</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ae41b6af92643cfbcd3e13275f4281260">localport</a> = local_port;</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = TRUE;</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160; <span class="keywordflow">if</span> (pthread_create(&amp;tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>, NULL, remmina_ssh_tunnel_main_thread, tunnel)) {</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; <span class="comment">// TRANSLATORS: Do not translate pthread</span></div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160; <a class="code" href="remmina__ssh_8c.html#a1f3297263703b4259c1c9607d710995d">remmina_ssh_set_application_error</a>(REMMINA_SSH(tunnel), _(<span class="stringliteral">&quot;Could not start pthread.&quot;</span>));</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160; }</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;}</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160;</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;gboolean</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160;<a class="code" href="remmina__ssh_8h.html#aeb20d31243a4d30e469a34fe01684e38">remmina_ssh_tunnel_terminated</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;{</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160; <span class="keywordflow">return</span> tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> == 0;</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;}</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;<a class="code" href="remmina__ssh_8h.html#a223f8dd7a678bcec2ece40a2d8f7ea06">remmina_ssh_tunnel_free</a>(<a class="code" href="struct___remmina_s_s_h_tunnel.html">RemminaSSHTunnel</a> *tunnel)</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;{</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160; pthread_t <a class="code" href="structitem.html#a1bfbfa35087440a4b217fd9fa4466bdb">thread</a>;</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;tunnel-&gt;thread = %lX\n&quot;</span>, tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>);</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160; thread = tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a>;</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160; <span class="keywordflow">if</span> (thread != 0) {</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a956cb7289e147875ae5f745b33514ebd">running</a> = FALSE;</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160; pthread_cancel(thread);</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160; pthread_join(thread, NULL);</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#aa496acab4967f380e3520aeb9dae2bbd">thread</a> = 0;</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160; }</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#ac86d0d359e5d97d8d60fac69c9af69df">tunnel_type</a> == <a class="code" href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798afbca41cd7b252c2594e1d53cd081b326">REMMINA_SSH_TUNNEL_XPORT</a> &amp;&amp; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a> &gt; 0) {</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;<span class="preprocessor">#if LIBSSH_VERSION_INT &gt;= SSH_VERSION_INT(0, 7, 0)</span></div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160; ssh_channel_cancel_forward(REMMINA_SSH(tunnel)-&gt;session, NULL, 6000 + tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a>);</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160; ssh_forward_cancel(REMMINA_SSH(tunnel)-&gt;session, NULL, 6000 + tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">remotedisplay</a>);</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160; }</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160; <span class="keywordflow">if</span> (tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> &gt;= 0) {</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160; close(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a>);</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160; tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a7fd94fc8f610d86eb71a7a7fa1500d69">server_sock</a> = -1;</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160; }</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160; remmina_ssh_tunnel_close_all_channels(tunnel);</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a155d773294b0671aac4e710e97d90047">buffer</a>);</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a37244b9fafd3ab48c0f11ad0b8cfdf91">channels_out</a>);</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a4d61f0c0926686f8451dcf49d2d857da">dest</a>);</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160; g_free(tunnel-&gt;<a class="code" href="struct___remmina_s_s_h_tunnel.html#a071153b511500c3faa6804ebd76aeba1">localdisplay</a>);</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160;</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160; <a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>((<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *)tunnel);</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;}</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;<span class="comment">* SSH SFTP *</span></div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;<a class="code" href="remmina__ssh_8h.html#a3d7138d9cbbe44aea15440436ce85d6e">remmina_sftp_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;{</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160; <a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp;</div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160; sftp = g_new(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a>, 1);</div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;</div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160; <a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(REMMINA_SSH(sftp), remminafile, FALSE);</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = NULL;</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160; <span class="keywordflow">return</span> sftp;</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;}</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;<a class="code" href="remmina__ssh_8h.html#a1500d65d1f0751812f237c1cb4d15188">remmina_sftp_new_from_ssh</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;{</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160; <a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp;</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;</div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160; sftp = g_new(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a>, 1);</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160; remmina_ssh_init_from_ssh(REMMINA_SSH(sftp), ssh);</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = NULL;</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160; <span class="keywordflow">return</span> sftp;</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;}</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;gboolean</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;<a class="code" href="remmina__ssh_8h.html#a1e09b32044c240a7dce0ad8afcbf0ff2">remmina_sftp_open</a>(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp)</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;{</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = sftp_new(sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#a7dab48a7603f1dd6671a8dd1efe1958e">ssh</a>.<a class="code" href="struct___remmina_s_s_h.html#a46cdb47db9c0ce8c1ac267cb3d10bbb3">session</a>);</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160; <span class="keywordflow">if</span> (!sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>) {</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(sftp), _(<span class="stringliteral">&quot;Could not create SFTP session. %s&quot;</span>));</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160; }</div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160; <span class="keywordflow">if</span> (sftp_init(sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>)) {</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(sftp), _(<span class="stringliteral">&quot;Could not start SFTP session. %s&quot;</span>));</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160; }</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;}</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160;<a class="code" href="remmina__ssh_8h.html#aaaf171c31b73f06f1026239253d9f6b9">remmina_sftp_free</a>(<a class="code" href="struct___remmina_s_f_t_p.html">RemminaSFTP</a> *sftp)</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;{</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160; <span class="keywordflow">if</span> (sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>) {</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160; sftp_free(sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a>);</div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160; sftp-&gt;<a class="code" href="struct___remmina_s_f_t_p.html#adef92bcfa7b9a86debf0531d0239a5df">sftp_sess</a> = NULL;</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160; }</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160; <a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>(REMMINA_SSH(sftp));</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;}</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160;</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;<span class="comment">/*-----------------------------------------------------------------------------*</span></div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160;<span class="comment">* SSH Shell *</span></div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160;<span class="comment">*-----------------------------------------------------------------------------*/</span></div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;<a class="code" href="remmina__ssh_8h.html#a30412e0b4302f5ae0b9be2749390a48d">remmina_ssh_shell_new_from_file</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;{</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell;</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160;</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160; shell = g_new0(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a>, 1);</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160; <a class="code" href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a>(REMMINA_SSH(shell), remminafile, FALSE);</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> = -1;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a> = -1;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;exec&quot;</span>));</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a> = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;run_line&quot;</span>));</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160; <span class="keywordflow">return</span> shell;</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;}</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;<a class="code" href="remmina__ssh_8h.html#ae0792ddb4adcaafefc1a4604cefdd8f4">remmina_ssh_shell_new_from_ssh</a>(<a class="code" href="struct___remmina_s_s_h.html">RemminaSSH</a> *ssh)</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;{</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell;</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160; shell = g_new0(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a>, 1);</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160; remmina_ssh_init_from_ssh(REMMINA_SSH(shell), ssh);</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> = -1;</div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a> = -1;</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160; <span class="keywordflow">return</span> shell;</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;}</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160;<span class="keyword">static</span> gboolean</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;remmina_ssh_call_exit_callback_on_main_thread(gpointer data)</div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;{</div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160;</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)data;</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a>)</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#adedb04066148973fed2de9f04b80286d">user_data</a>);</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160; <span class="keywordflow">if</span> (shell) {</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160; <a class="code" href="remmina__ssh_8h.html#a316f97b879e147ec52967344f6ad1d84">remmina_ssh_shell_free</a>(shell);</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160; shell = NULL;</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160; }</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160;}</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;<span class="keyword">static</span> gpointer</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160;remmina_ssh_shell_thread(gpointer data)</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;{</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160; <a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell = (<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *)data;</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160; <a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *gp = (<a class="code" href="struct___remmina_protocol_widget.html">RemminaProtocolWidget</a> *)shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#adedb04066148973fed2de9f04b80286d">user_data</a>;</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160; <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160; remminafile = <a class="code" href="remmina__protocol__widget_8c.html#a2506e80d482c34532d0e534856452069">remmina_protocol_widget_get_file</a>(gp);</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160; ssh_channel channel = NULL;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160; gint ret;</div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160; gchar *filename;</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160; <span class="keyword">const</span> gchar *dir;</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160; <span class="keyword">const</span> gchar *sshlogname;</div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160; FILE *fp = NULL;</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160;</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160; <span class="comment">//gint screen;</span></div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160;</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160; <span class="keywordflow">if</span> ((channel = ssh_channel_new(REMMINA_SSH(shell)-&gt;session)) == NULL ||</div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160; ssh_channel_open_session(channel)) {</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(shell), _(<span class="stringliteral">&quot;Could not open channel. %s&quot;</span>));</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160; <span class="keywordflow">if</span> (channel) ssh_channel_free(channel);</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a> = 0;</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160; }</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160; ssh_channel_request_pty(channel);</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160; <span class="comment">// SSH Callbacks</span></div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160; <span class="keyword">struct </span>ssh_callbacks_struct cb =</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160; {</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160; .channel_open_request_x11_function = <a class="code" href="remmina__ssh_8c.html#ab8f07d5ab2ee8aa8423a11808b6cb100">remmina_ssh_x11_open_request_cb</a>,</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160; .userdata = shell,</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160; };</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160;</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">&quot;ssh_forward_x11&quot;</span>, FALSE)) {</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160; ssh_callbacks_init(&amp;cb);</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160; ssh_set_callbacks(REMMINA_SSH(shell)-&gt;session, &amp;cb);</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *display = getenv(<span class="stringliteral">&quot;DISPLAY&quot;</span>);</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160; <span class="keywordtype">char</span> *proto = NULL, *cookie = NULL;</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__ssh_8c.html#a672175c0933ab32fd1f84817c410c15b">remmina_ssh_x11_get_proto</a>(display, &amp;proto, &amp;cookie) != 0) {</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Using fake authentication data for X11 forwarding&quot;</span>);</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160; proto = NULL;</div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160; cookie = NULL;</div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160; }</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;proto: %s - cookie: %s&quot;</span>, proto, cookie);</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160; ret = ssh_channel_request_x11(channel, 0, proto, cookie, 0);</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160; }</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a> &amp;&amp; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>[0]) {</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Requesting an SSH exec channel&quot;</span>);</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160; ret = ssh_channel_request_exec(channel, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>);</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160; REMMINA_DEBUG (<span class="stringliteral">&quot;Requesting an SSH shell channel&quot;</span>);</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160; ret = ssh_channel_request_shell(channel);</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160; }</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160; <span class="keywordflow">if</span> (ret != SSH_OK) {</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160; REMMINA_WARNING (<span class="stringliteral">&quot;Could not request shell&quot;</span>);</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160; <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160; <a class="code" href="remmina__ssh_8c.html#abc556f0a4335083436f6e19c204fa553">remmina_ssh_set_error</a>(REMMINA_SSH(shell), _(<span class="stringliteral">&quot;Could not request shell. %s&quot;</span>));</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a> = 0;</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160; }</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a> = <a class="code" href="structitem.html#a456c6639914adbd3be8b4da351775d04">channel</a>;</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; GFile *rf = g_file_new_for_path(remminafile-&gt;filename);</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogfolder&quot;</span>) == NULL)</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160; dir = g_build_path(<span class="stringliteral">&quot;/&quot;</span>, g_get_user_cache_dir(), <span class="stringliteral">&quot;remmina&quot;</span>, NULL);</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160; dir = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogfolder&quot;</span>);</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogname&quot;</span>) == NULL)</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160; sshlogname = g_strconcat(g_file_get_basename(rf), <span class="stringliteral">&quot;.&quot;</span>, <span class="stringliteral">&quot;log&quot;</span>, NULL);</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160; sshlogname = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">&quot;sshlogname&quot;</span>);</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160; sshlogname = <a class="code" href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a>(remminafile, sshlogname);</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; filename = g_strconcat(dir, <span class="stringliteral">&quot;/&quot;</span>, sshlogname, NULL);</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">&quot;sshsavesession&quot;</span>, FALSE)) {</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Saving session log to %s&quot;</span>, filename);</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160; fp = fopen(filename, <span class="stringliteral">&quot;w&quot;</span>);</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160; }</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160; g_free(filename);</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Run_line: %s&quot;</span>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>);</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160; <span class="keywordflow">if</span> (!shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a6b2e8c1d9705b4c5b64a0e07a1159e80">closed</a> &amp;&amp; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a> &amp;&amp; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>[0]) {</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160; <span class="comment">//TODO: Confirm assumption - assuming null terminated gchar string</span></div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160; ssh_channel_write(channel, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>, (gint)strlen(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>));</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160; ssh_channel_write(channel, <span class="stringliteral">&quot;\n&quot;</span>, (gint)1); <span class="comment">//TODO: Test this</span></div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Run_line written to channel&quot;</span>);</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; }</div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160;</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160; <span class="comment">// Create new event context.</span></div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a> = ssh_event_new();</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a> == NULL) {</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Internal error in %s: Couldn&#39;t get a event.&quot;</span>, __func__);</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160; }</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;shell-&gt;slave: %d&quot;</span>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>);</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; <span class="comment">// Add the fd to the event and assign it the callback.</span></div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160; <span class="keywordflow">if</span> (ssh_event_add_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, <a class="code" href="remmina__ssh_8c.html#a82463718695c17094aa41c974eb35d61">events</a>, <a class="code" href="remmina__ssh_8c.html#a4c6a24749cbe8be70b2878de21f57c65">remmina_ssh_cp_to_ch_cb</a>, channel) != SSH_OK) {</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Internal error in %s: Couldn&#39;t add an fd to the event.&quot;</span>, __func__);</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; }</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160; <span class="comment">// Remove the poll handle from session and assign them to the event.</span></div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160; <span class="keywordflow">if</span> (ssh_event_add_session(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, REMMINA_SSH(shell)-&gt;session) != SSH_OK) {</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160; REMMINA_WARNING(<span class="stringliteral">&quot;Internal error in %s: Couldn&#39;t add the session to the event.&quot;</span>, __func__);</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160; }</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160; <a class="code" href="remmina__ssh_8c.html#adfe0e9338fec4a1c03677595c15514d1">remmina_ssh_insert_item</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, TRUE, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160; <span class="comment">// Initializes the ssh_callbacks_struct.</span></div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160; <a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>.userdata = &amp;shell;</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160; ssh_callbacks_init(&amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; <span class="comment">// Set the channel callback functions.</span></div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; ssh_set_channel_callbacks(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, &amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160; <span class="keywordflow">do</span> {</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160; ssh_event_dopoll(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, 1000);</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160; } <span class="keywordflow">while</span>(!ssh_channel_is_closed(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>));</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160; <span class="comment">// Close all OPENED X11 channel</span></div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160; <a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160;</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a6b2e8c1d9705b4c5b64a0e07a1159e80">closed</a> = TRUE;</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160;</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160; <span class="comment">// Remove socket fd from event context.</span></div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160; ret = ssh_event_remove_fd(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>);</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Remove socket fd from event context: %d&quot;</span>, ret);</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160;</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160; <span class="comment">// Remove session object from event context.</span></div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160; ret = ssh_event_remove_session(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>, REMMINA_SSH(shell)-&gt;session);</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Remove session object from event context: %d&quot;</span>, ret);</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160;</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160; <span class="comment">// Free event context.</span></div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160; ssh_event_free(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ad5b89efd933067ed40c917a02905e1ea">event</a>);</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Free event context&quot;</span>);</div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160; <span class="comment">// Remove channel callback.</span></div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160; ret = ssh_remove_channel_callbacks(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, &amp;<a class="code" href="remmina__ssh_8c.html#ab1ac2a91d14c557598f168f66ba130eb">channel_cb</a>);</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Remove channel callback: %d&quot;</span>, ret);</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">&quot;sshsavesession&quot;</span>, FALSE))</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160; fclose(fp);</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a> = NULL;</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160; ssh_channel_close(channel);</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160; ssh_channel_send_eof(channel);</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160; ssh_channel_free(channel);</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a> = 0;</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a>)</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160; IDLE_ADD((GSourceFunc)remmina_ssh_call_exit_callback_on_main_thread, (gpointer)shell);</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160; <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;}</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160;gboolean</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;<a class="code" href="remmina__ssh_8h.html#a1c095a955af21b3ed9952ba2ea94691b">remmina_ssh_shell_open</a>(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell, <a class="code" href="remmina__ssh_8h.html#a4c56936cde97775b102a3e7b48fe5a01">RemminaSSHExitFunc</a> exit_callback, gpointer data)</div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160;{</div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160; gchar *slavedevice;</div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160; <span class="keyword">struct </span>termios stermios;</div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;</div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> = posix_openpt(O_RDWR | O_NOCTTY);</div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a> == -1 ||</div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160; grantpt(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a>) == -1 ||</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160; unlockpt(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a>) == -1 ||</div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160; (slavedevice = ptsname(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#ab02f57e79ea0ba35f8a3788ef01a707f">master</a>)) == NULL ||</div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160; (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a> = open(slavedevice, O_RDWR | O_NOCTTY)) &lt; 0) {</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160; REMMINA_SSH(shell)-&gt;error = g_strdup(_(<span class="stringliteral">&quot;Could not create PTY device.&quot;</span>));</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160; }</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160; <span class="comment">/* As per libssh documentation */</span></div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160; tcgetattr(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, &amp;stermios);</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160; stermios.c_iflag &amp;= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160; stermios.c_oflag &amp;= ~OPOST;</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160; stermios.c_lflag &amp;= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160; stermios.c_cflag &amp;= ~(CSIZE | PARENB);</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160; stermios.c_cflag |= CS8;</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160; tcsetattr(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>, TCSANOW, &amp;stermios);</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a> = exit_callback;</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#adedb04066148973fed2de9f04b80286d">user_data</a> = data;</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160; <span class="comment">/* Once the process started, we should always TRUE and assume the pthread will be created always */</span></div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160; pthread_create(&amp;shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>, NULL, remmina_ssh_shell_thread, shell);</div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;}</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160;<a class="code" href="remmina__ssh_8h.html#ac2d3f3b6550e4d1fe4caabe1df6af508">remmina_ssh_shell_set_size</a>(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell, gint columns, gint rows)</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160;{</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160; LOCK_SSH(shell)</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>)</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160; ssh_channel_change_pty_size(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a7c546634f855c217faa75ab4d4c7c2e2">channel</a>, columns, rows);</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160; UNLOCK_SSH(shell)</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;}</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;<span class="keywordtype">void</span></div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160;<a class="code" href="remmina__ssh_8h.html#a316f97b879e147ec52967344f6ad1d84">remmina_ssh_shell_free</a>(<a class="code" href="struct___remmina_s_s_h_shell.html">RemminaSSHShell</a> *shell)</div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;{</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160; TRACE_CALL(__func__);</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; <span class="comment">//pthread_t thread = shell-&gt;thread;</span></div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160;</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160; <span class="comment">// Close all OPENED X11 channel</span></div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160; <a class="code" href="remmina__ssh_8c.html#a8a66c667543dd8c4c4f7c8d929863fae">remmina_ssh_close_all_x11_ch</a>(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a88090ecb372853a19640c883f5bf606a">exit_callback</a> = NULL;</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a6b2e8c1d9705b4c5b64a0e07a1159e80">closed</a> = TRUE;</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160; REMMINA_DEBUG(<span class="stringliteral">&quot;Cancelling the shell thread if needed&quot;</span>);</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>) {</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160; pthread_cancel(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>);</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>) pthread_join(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a878854125f24a8de520ec91066d0d226">thread</a>, NULL);</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160; }</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160; close(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a78edb0cd27564e88b6c92b425a383df6">slave</a>);</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>) {</div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160; g_free(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a>);</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#a2d56befd61e28b83f90fe3eff0e6dfe7">exec</a> = NULL;</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160; }</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160; <span class="keywordflow">if</span> (shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>) {</div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160; g_free(shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a>);</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160; shell-&gt;<a class="code" href="struct___remmina_s_s_h_shell.html#af5c36c45f7e0beedee2e365da48a1331">run_line</a> = NULL;</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160; }</div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160; <span class="comment">/* It’s not necessary to close shell-&gt;slave since the other end (vte) will close it */</span>;</div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160; <a class="code" href="remmina__ssh_8h.html#acdb9f57d2f9b47913715a8d8a0ea0c02">remmina_ssh_free</a>(REMMINA_SSH(shell));</div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;}</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;</div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HAVE_LIBSSH */</span><span class="preprocessor"></span></div><div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a17f0c32b34a9d3a56fbb8cb09ad896a0">REMMINA_SSH_AUTH_PARTIAL</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00110">remmina_ssh.h:110</a></div></div>
<div class="ttc" id="struct___remmina_s_s_h_tunnel_html"><div class="ttname"><a href="struct___remmina_s_s_h_tunnel.html">_RemminaSSHTunnel</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00148">remmina_ssh.h:148</a></div></div>
<div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1a61bd3f6b00c5a5cf2983990eb6f0840f">REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00112">remmina_ssh.h:112</a></div></div>
<div class="ttc" id="remmina__ssh_8h_html_afd166711167c39b8c1f6e8be3eb0c4e0"><div class="ttname"><a href="remmina__ssh_8h.html#afd166711167c39b8c1f6e8be3eb0c4e0">RemminaSSHTunnelBuffer</a></div><div class="ttdeci">struct _RemminaSSHTunnelBuffer RemminaSSHTunnelBuffer</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00137">remmina_ssh.h:137</a></div></div>