blob: 345f07b017b01a8802f35947ef378e9b0f7001f6 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.14"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libguac: guacamole/user-fntypes.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libguac
&#160;<span id="projectnumber">1.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_6bb9fad85c98b48a11165f494b9f53ce.html">guacamole</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> </div>
<div class="headertitle">
<div class="title">user-fntypes.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Function type definitions related to the <a class="el" href="structguac__user.html" title="Representation of a physical connection within a larger logical connection which may be shared...">guac_user</a> object.
<a href="#details">More...</a></p>
<p><a href="user-fntypes_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a99c5146e0ab1df9ba2b2574fb26fbddf"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a99c5146e0ab1df9ba2b2574fb26fbddf">guac_user_callback</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, void *data)</td></tr>
<tr class="memdesc:a99c5146e0ab1df9ba2b2574fb26fbddf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback which relates to a single <a class="el" href="structguac__user.html" title="Representation of a physical connection within a larger logical connection which may be shared...">guac_user</a> at a time, along with arbitrary data. <a href="#a99c5146e0ab1df9ba2b2574fb26fbddf">More...</a><br /></td></tr>
<tr class="separator:a99c5146e0ab1df9ba2b2574fb26fbddf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a337a3fe8b983e3e25e25dbb836ea2694"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a337a3fe8b983e3e25e25dbb836ea2694">guac_user_mouse_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, int x, int y, int button_mask)</td></tr>
<tr class="memdesc:a337a3fe8b983e3e25e25dbb836ea2694"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole mouse events, invoked when a "mouse" instruction has been received from a user. <a href="#a337a3fe8b983e3e25e25dbb836ea2694">More...</a><br /></td></tr>
<tr class="separator:a337a3fe8b983e3e25e25dbb836ea2694"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a48d196c39615f6a1ff9b129267cb402e"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a48d196c39615f6a1ff9b129267cb402e">guac_user_key_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, int keysym, int pressed)</td></tr>
<tr class="memdesc:a48d196c39615f6a1ff9b129267cb402e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole key events, invoked when a "key" event has been received from a user. <a href="#a48d196c39615f6a1ff9b129267cb402e">More...</a><br /></td></tr>
<tr class="separator:a48d196c39615f6a1ff9b129267cb402e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d2777aaa35f39e5ba5e803a3ffbd137"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a1d2777aaa35f39e5ba5e803a3ffbd137">guac_user_audio_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype)</td></tr>
<tr class="memdesc:a1d2777aaa35f39e5ba5e803a3ffbd137"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole audio streams received from a user. <a href="#a1d2777aaa35f39e5ba5e803a3ffbd137">More...</a><br /></td></tr>
<tr class="separator:a1d2777aaa35f39e5ba5e803a3ffbd137"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1658ce15f8c6fe958e873015e12aeed9"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a1658ce15f8c6fe958e873015e12aeed9">guac_user_clipboard_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype)</td></tr>
<tr class="memdesc:a1658ce15f8c6fe958e873015e12aeed9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole clipboard streams received from a user. <a href="#a1658ce15f8c6fe958e873015e12aeed9">More...</a><br /></td></tr>
<tr class="separator:a1658ce15f8c6fe958e873015e12aeed9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca3c0d12202f7888146bb95986011b6f"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#aca3c0d12202f7888146bb95986011b6f">guac_user_size_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, int width, int height)</td></tr>
<tr class="memdesc:aca3c0d12202f7888146bb95986011b6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole size events, invoked when a "size" instruction has been received from a user. <a href="#aca3c0d12202f7888146bb95986011b6f">More...</a><br /></td></tr>
<tr class="separator:aca3c0d12202f7888146bb95986011b6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c24aa9dee9ee4be3f3d21e1e24b9e3e"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a6c24aa9dee9ee4be3f3d21e1e24b9e3e">guac_user_file_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *filename)</td></tr>
<tr class="memdesc:a6c24aa9dee9ee4be3f3d21e1e24b9e3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole file streams received from a user. <a href="#a6c24aa9dee9ee4be3f3d21e1e24b9e3e">More...</a><br /></td></tr>
<tr class="separator:a6c24aa9dee9ee4be3f3d21e1e24b9e3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7ae6833c33b39618a8b78603581ff79"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#ab7ae6833c33b39618a8b78603581ff79">guac_user_pipe_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *name)</td></tr>
<tr class="memdesc:ab7ae6833c33b39618a8b78603581ff79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole pipe streams received from a user. <a href="#ab7ae6833c33b39618a8b78603581ff79">More...</a><br /></td></tr>
<tr class="separator:ab7ae6833c33b39618a8b78603581ff79"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50636d9fb70c454a5e82cbf6ee4f9c8a"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a50636d9fb70c454a5e82cbf6ee4f9c8a">guac_user_argv_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *name)</td></tr>
<tr class="memdesc:a50636d9fb70c454a5e82cbf6ee4f9c8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole argument value (argv) streams received from a user. <a href="#a50636d9fb70c454a5e82cbf6ee4f9c8a">More...</a><br /></td></tr>
<tr class="separator:a50636d9fb70c454a5e82cbf6ee4f9c8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aead320956199884ff6af82d49d6163c1"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#aead320956199884ff6af82d49d6163c1">guac_user_blob_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, void *data, int length)</td></tr>
<tr class="memdesc:aead320956199884ff6af82d49d6163c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole stream blobs. <a href="#aead320956199884ff6af82d49d6163c1">More...</a><br /></td></tr>
<tr class="separator:aead320956199884ff6af82d49d6163c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88f4b7af6d47c82f65e9332afcc7ab09"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a88f4b7af6d47c82f65e9332afcc7ab09">guac_user_ack_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *error, <a class="el" href="protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2">guac_protocol_status</a> status)</td></tr>
<tr class="memdesc:a88f4b7af6d47c82f65e9332afcc7ab09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole stream "ack" instructions. <a href="#a88f4b7af6d47c82f65e9332afcc7ab09">More...</a><br /></td></tr>
<tr class="separator:a88f4b7af6d47c82f65e9332afcc7ab09"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa8b0e25073cbe710265dc8a0ed150ca"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#afa8b0e25073cbe710265dc8a0ed150ca">guac_user_end_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream)</td></tr>
<tr class="memdesc:afa8b0e25073cbe710265dc8a0ed150ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole stream "end" instructions. <a href="#afa8b0e25073cbe710265dc8a0ed150ca">More...</a><br /></td></tr>
<tr class="separator:afa8b0e25073cbe710265dc8a0ed150ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88717a7ab29ac1e4a853fcc2caa8f872"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#a88717a7ab29ac1e4a853fcc2caa8f872">guac_user_join_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, int argc, char **argv)</td></tr>
<tr class="memdesc:a88717a7ab29ac1e4a853fcc2caa8f872"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole join events. <a href="#a88717a7ab29ac1e4a853fcc2caa8f872">More...</a><br /></td></tr>
<tr class="separator:a88717a7ab29ac1e4a853fcc2caa8f872"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa5806d288a42d93a54864b6c35617b8"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#aaa5806d288a42d93a54864b6c35617b8">guac_user_leave_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user)</td></tr>
<tr class="memdesc:aaa5806d288a42d93a54864b6c35617b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole leave events. <a href="#aaa5806d288a42d93a54864b6c35617b8">More...</a><br /></td></tr>
<tr class="separator:aaa5806d288a42d93a54864b6c35617b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab60c51d865526c5c5d2c096e4fcb5539"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#ab60c51d865526c5c5d2c096e4fcb5539">guac_user_sync_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="timestamp-types_8h.html#a69e916d1ff324fbe0e527f32359c9cea">guac_timestamp</a> timestamp)</td></tr>
<tr class="memdesc:ab60c51d865526c5c5d2c096e4fcb5539"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole sync events. <a href="#ab60c51d865526c5c5d2c096e4fcb5539">More...</a><br /></td></tr>
<tr class="separator:ab60c51d865526c5c5d2c096e4fcb5539"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8b7cadf31aeac0b2ac0ce4f46dafe81"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#ab8b7cadf31aeac0b2ac0ce4f46dafe81">guac_user_get_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__object.html">guac_object</a> *object, char *name)</td></tr>
<tr class="memdesc:ab8b7cadf31aeac0b2ac0ce4f46dafe81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole object get requests. <a href="#ab8b7cadf31aeac0b2ac0ce4f46dafe81">More...</a><br /></td></tr>
<tr class="separator:ab8b7cadf31aeac0b2ac0ce4f46dafe81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd4c60871cc2dbbbdc82f58ae1c5baa0"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user-fntypes_8h.html#afd4c60871cc2dbbbdc82f58ae1c5baa0">guac_user_put_handler</a>(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__object.html">guac_object</a> *object, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *name)</td></tr>
<tr class="memdesc:afd4c60871cc2dbbbdc82f58ae1c5baa0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handler for Guacamole object put requests. <a href="#afd4c60871cc2dbbbdc82f58ae1c5baa0">More...</a><br /></td></tr>
<tr class="separator:afd4c60871cc2dbbbdc82f58ae1c5baa0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Function type definitions related to the <a class="el" href="structguac__user.html" title="Representation of a physical connection within a larger logical connection which may be shared...">guac_user</a> object. </p>
</div><h2 class="groupheader">Typedef Documentation</h2>
<a id="a88f4b7af6d47c82f65e9332afcc7ab09"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a88f4b7af6d47c82f65e9332afcc7ab09">&#9670;&nbsp;</a></span>guac_user_ack_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_ack_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *error, <a class="el" href="protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2">guac_protocol_status</a> status)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole stream "ack" instructions. </p>
<p>A user will send "ack" instructions to acknowledge the successful receipt of blobs along a stream opened by the server, or to notify of errors. An "ack" with an error status implicitly closes the stream.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user sending the "ack" instruction.</td></tr>
<tr><td class="paramname">stream</td><td>The stream for which the "ack" was received.</td></tr>
<tr><td class="paramname">error</td><td>An arbitrary, human-readable message describing the error that occurred, if any. If no error occurs, this will likely be blank, "SUCCESS", or similar. This value exists for the sake of readability, not for the sake of data interchange.</td></tr>
<tr><td class="paramname">status</td><td>GUAC_PROTOCOL_STATUS_SUCCESS if the blob was received and handled successfully, or a different status code describing the problem if an error occurred and the stream has been implicitly closed.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the "ack" message was successfully handled, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="a50636d9fb70c454a5e82cbf6ee4f9c8a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a50636d9fb70c454a5e82cbf6ee4f9c8a">&#9670;&nbsp;</a></span>guac_user_argv_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_argv_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *name)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole argument value (argv) streams received from a user. </p>
<p>Argument value streams are real-time revisions to the connection parameters of an in-progress connection. Each such argument value stream begins when the user sends a "argv" instruction. To handle received data along this stream, implementations of this handler must assign blob and end handlers to the given stream object.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that opened the argument value stream.</td></tr>
<tr><td class="paramname">stream</td><td>The stream object allocated by libguac to represent the argument value stream opened by the user.</td></tr>
<tr><td class="paramname">mimetype</td><td>The mimetype of the data that will be sent along the stream.</td></tr>
<tr><td class="paramname">name</td><td>The name of the connection parameter being updated. It is up to the implementation of this handler to decide whether and how to update a connection parameter.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the opening of the argument value stream has been handled successfully, or non-zero if an error occurs. </dd></dl>
</div>
</div>
<a id="a1d2777aaa35f39e5ba5e803a3ffbd137"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1d2777aaa35f39e5ba5e803a3ffbd137">&#9670;&nbsp;</a></span>guac_user_audio_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_audio_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole audio streams received from a user. </p>
<p>Each such audio stream begins when the user sends an "audio" instruction. To handle received data along this stream, implementations of this handler must assign blob and end handlers to the given stream object.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that opened the audio stream.</td></tr>
<tr><td class="paramname">stream</td><td>The stream object allocated by libguac to represent the audio stream opened by the user.</td></tr>
<tr><td class="paramname">mimetype</td><td>The mimetype of the data that will be sent along the stream.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the opening of the audio stream has been handled successfully, or non-zero if an error occurs. </dd></dl>
</div>
</div>
<a id="aead320956199884ff6af82d49d6163c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aead320956199884ff6af82d49d6163c1">&#9670;&nbsp;</a></span>guac_user_blob_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_blob_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, void *data, int length)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole stream blobs. </p>
<p>Each blob originates from a "blob" instruction which was associated with a previously-created stream.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that is sending this blob of data along the stream.</td></tr>
<tr><td class="paramname">stream</td><td>The stream along which the blob was received. The semantics associated with this stream are determined by the manner of its creation.</td></tr>
<tr><td class="paramname">data</td><td>The blob of data received.</td></tr>
<tr><td class="paramname">length</td><td>The number of bytes within the blob of data received.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the blob of data was successfully handled, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="a99c5146e0ab1df9ba2b2574fb26fbddf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99c5146e0ab1df9ba2b2574fb26fbddf">&#9670;&nbsp;</a></span>guac_user_callback</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void* guac_user_callback(<a class="el" href="structguac__user.html">guac_user</a> *user, void *data)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback which relates to a single <a class="el" href="structguac__user.html" title="Representation of a physical connection within a larger logical connection which may be shared...">guac_user</a> at a time, along with arbitrary data. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="client_8h.html#af652f3db0f89d488cef6d90f612a2077" title="Calls the given function on all currently-connected users of the given client. ">guac_client_foreach_user()</a> </dd>
<dd>
<a class="el" href="client_8h.html#af3f4ed85d98b16376e2cdc031ff1b44a" title="Calls the given function with the currently-connected user that is marked as the owner. ">guac_client_for_owner()</a></dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user for which this callback was invoked. Depending on whether <a class="el" href="client_8h.html#af652f3db0f89d488cef6d90f612a2077" title="Calls the given function on all currently-connected users of the given client. ">guac_client_foreach_user()</a> or <a class="el" href="client_8h.html#af3f4ed85d98b16376e2cdc031ff1b44a" title="Calls the given function with the currently-connected user that is marked as the owner. ">guac_client_for_owner()</a> was called, this will either be the current user as the "foreach" iteration continues, or the owner of the connection. If <a class="el" href="client_8h.html#af3f4ed85d98b16376e2cdc031ff1b44a" title="Calls the given function with the currently-connected user that is marked as the owner. ">guac_client_for_owner()</a> was called for a connection which has no owner, this may be NULL.</td></tr>
<tr><td class="paramname">data</td><td>The arbitrary data passed to <a class="el" href="client_8h.html#af652f3db0f89d488cef6d90f612a2077" title="Calls the given function on all currently-connected users of the given client. ">guac_client_foreach_user()</a> or <a class="el" href="client_8h.html#af3f4ed85d98b16376e2cdc031ff1b44a" title="Calls the given function with the currently-connected user that is marked as the owner. ">guac_client_for_owner()</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>An arbitrary return value, the semantics of which are determined by the implementation of the callback and the manner of its user. In the case of a callback provided to <a class="el" href="client_8h.html#af652f3db0f89d488cef6d90f612a2077" title="Calls the given function on all currently-connected users of the given client. ">guac_client_foreach_user()</a>, this value is always discarded. </dd></dl>
</div>
</div>
<a id="a1658ce15f8c6fe958e873015e12aeed9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1658ce15f8c6fe958e873015e12aeed9">&#9670;&nbsp;</a></span>guac_user_clipboard_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_clipboard_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole clipboard streams received from a user. </p>
<p>Each such clipboard stream begins when the user sends a "clipboard" instruction. To handle received data along this stream, implementations of this handler must assign blob and end handlers to the given stream object.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that opened the clipboard stream.</td></tr>
<tr><td class="paramname">stream</td><td>The stream object allocated by libguac to represent the clipboard stream opened by the user.</td></tr>
<tr><td class="paramname">mimetype</td><td>The mimetype of the data that will be sent along the stream.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the opening of the clipboard stream has been handled successfully, or non-zero if an error occurs. </dd></dl>
</div>
</div>
<a id="afa8b0e25073cbe710265dc8a0ed150ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa8b0e25073cbe710265dc8a0ed150ca">&#9670;&nbsp;</a></span>guac_user_end_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_end_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole stream "end" instructions. </p>
<p>End instructions are sent by the user when a stream is closing because its end has been reached.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that sent the "end" instruction.</td></tr>
<tr><td class="paramname">stream</td><td>The stream that is being closed.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the end-of-stream condition has been sucessfully handled, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="a6c24aa9dee9ee4be3f3d21e1e24b9e3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c24aa9dee9ee4be3f3d21e1e24b9e3e">&#9670;&nbsp;</a></span>guac_user_file_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_file_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *filename)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole file streams received from a user. </p>
<p>Each such file stream begins when the user sends a "file" instruction. To handle received data along this stream, implementations of this handler must assign blob and end handlers to the given stream object.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that opened the file stream.</td></tr>
<tr><td class="paramname">stream</td><td>The stream object allocated by libguac to represent the file stream opened by the user.</td></tr>
<tr><td class="paramname">mimetype</td><td>The mimetype of the data that will be sent along the stream.</td></tr>
<tr><td class="paramname">filename</td><td>The name of the file being transferred.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the opening of the file stream has been handled successfully, or non-zero if an error occurs. </dd></dl>
</div>
</div>
<a id="ab8b7cadf31aeac0b2ac0ce4f46dafe81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8b7cadf31aeac0b2ac0ce4f46dafe81">&#9670;&nbsp;</a></span>guac_user_get_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_get_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__object.html">guac_object</a> *object, char *name)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole object get requests. </p>
<p>The semantics of the stream which will be created in response to the request are determined by the type of the object and the name of the stream requested. It is up to the implementation of this handler to then respond with a "body" instruction that begins the requested stream.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user requesting read access to the stream having the given name.</td></tr>
<tr><td class="paramname">object</td><td>The object from which the given named stream is being requested.</td></tr>
<tr><td class="paramname">name</td><td>The name of the stream being requested.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the get request was successfully handled, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="a88717a7ab29ac1e4a853fcc2caa8f872"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a88717a7ab29ac1e4a853fcc2caa8f872">&#9670;&nbsp;</a></span>guac_user_join_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_join_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, int argc, char **argv)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole join events. </p>
<p>A join event is fired by the <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a> whenever a <a class="el" href="structguac__user.html" title="Representation of a physical connection within a larger logical connection which may be shared...">guac_user</a> joins the connection. There is no instruction associated with a join event.</p>
<p>Implementations of the join handler MUST NOT use the client-level broadcast socket, nor invoke <a class="el" href="client_8h.html#af652f3db0f89d488cef6d90f612a2077" title="Calls the given function on all currently-connected users of the given client. ">guac_client_foreach_user()</a> or <a class="el" href="client_8h.html#af3f4ed85d98b16376e2cdc031ff1b44a" title="Calls the given function with the currently-connected user that is marked as the owner. ">guac_client_for_owner()</a>. Doing so will result in undefined behavior, including segfaults.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user joining the connection. The <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a> associated with the connection will already be populated within the user object.</td></tr>
<tr><td class="paramname">argc</td><td>The number of arguments stored within argv.</td></tr>
<tr><td class="paramname">argv</td><td>An array of all arguments provided by the user when they joined. These arguments must correspond to the argument names declared when the <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a> was initialized. If the number of arguments does not match the number of argument names declared, then the joining user has violated the Guacamole protocol.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the user has been successfully initialized and should be allowed to join the connection, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="a48d196c39615f6a1ff9b129267cb402e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a48d196c39615f6a1ff9b129267cb402e">&#9670;&nbsp;</a></span>guac_user_key_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_key_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, int keysym, int pressed)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole key events, invoked when a "key" event has been received from a user. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that sent the key event.</td></tr>
<tr><td class="paramname">keysym</td><td>The X11 keysym of the key that was pressed or released.</td></tr>
<tr><td class="paramname">pressed</td><td>Non-zero if the key represented by the given keysym is currently pressed, zero if it is released.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the key event was handled successfully, or non-zero if an error occurred. </dd></dl>
</div>
</div>
<a id="aaa5806d288a42d93a54864b6c35617b8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaa5806d288a42d93a54864b6c35617b8">&#9670;&nbsp;</a></span>guac_user_leave_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_leave_handler(<a class="el" href="structguac__user.html">guac_user</a> *user)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole leave events. </p>
<p>A leave event is fired by the <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a> whenever a <a class="el" href="structguac__user.html" title="Representation of a physical connection within a larger logical connection which may be shared...">guac_user</a> leaves the connection. There is no instruction associated with a leave event.</p>
<p>Implementations of the leave handler MUST NOT use the client-level broadcast socket, nor invoke <a class="el" href="client_8h.html#af652f3db0f89d488cef6d90f612a2077" title="Calls the given function on all currently-connected users of the given client. ">guac_client_foreach_user()</a> or <a class="el" href="client_8h.html#af3f4ed85d98b16376e2cdc031ff1b44a" title="Calls the given function with the currently-connected user that is marked as the owner. ">guac_client_for_owner()</a>. Doing so will result in undefined behavior, including segfaults.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that has left the connection.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the leave event has been successfully handled, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="a337a3fe8b983e3e25e25dbb836ea2694"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a337a3fe8b983e3e25e25dbb836ea2694">&#9670;&nbsp;</a></span>guac_user_mouse_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_mouse_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, int x, int y, int button_mask)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole mouse events, invoked when a "mouse" instruction has been received from a user. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that sent the mouse event.</td></tr>
<tr><td class="paramname">x</td><td>The X coordinate of the mouse within the display when the event occurred, in pixels. This value is not guaranteed to be within the bounds of the display area.</td></tr>
<tr><td class="paramname">y</td><td>The Y coordinate of the mouse within the display when the event occurred, in pixels. This value is not guaranteed to be within the bounds of the display area.</td></tr>
<tr><td class="paramname">button_mask</td><td>An integer value representing the current state of each button, where the Nth bit within the integer is set to 1 if and only if the Nth mouse button is currently pressed. The lowest-order bit is the left mouse button, followed by the middle button, right button, and finally the up and down buttons of the scroll wheel.</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="client-constants_8h.html#a4bb4f5b852ac8c3e2d3c89cd5e63efd2" title="The flag set in the mouse button mask when the left mouse button is down. ">GUAC_CLIENT_MOUSE_LEFT</a> </dd>
<dd>
<a class="el" href="client-constants_8h.html#ad14c5f1800aac863bbebcd676c5c2124" title="The flag set in the mouse button mask when the middle mouse button is down. ">GUAC_CLIENT_MOUSE_MIDDLE</a> </dd>
<dd>
<a class="el" href="client-constants_8h.html#a88917d2d7143a483c219eee62fd6317f" title="The flag set in the mouse button mask when the right mouse button is down. ">GUAC_CLIENT_MOUSE_RIGHT</a> </dd>
<dd>
<a class="el" href="client-constants_8h.html#a134afd8a0d8f10a34af51fc70981e39d" title="The flag set in the mouse button mask when the mouse scrollwheel is scrolled up. ">GUAC_CLIENT_MOUSE_SCROLL_UP</a> </dd>
<dd>
<a class="el" href="client-constants_8h.html#a771231574e9d303aa08fc1cecc9069f0" title="The flag set in the mouse button mask when the mouse scrollwheel is scrolled down. ">GUAC_CLIENT_MOUSE_SCROLL_DOWN</a></dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the mouse event was handled successfully, or non-zero if an error occurred. </dd></dl>
</div>
</div>
<a id="ab7ae6833c33b39618a8b78603581ff79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab7ae6833c33b39618a8b78603581ff79">&#9670;&nbsp;</a></span>guac_user_pipe_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_pipe_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *name)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole pipe streams received from a user. </p>
<p>Pipe streams are unidirectional, arbitrary, named pipes. Each such pipe stream begins when the user sends a "pipe" instruction. To handle received data along this stream, implementations of this handler must assign blob and end handlers to the given stream object.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that opened the pipe stream.</td></tr>
<tr><td class="paramname">stream</td><td>The stream object allocated by libguac to represent the pipe stream opened by the user.</td></tr>
<tr><td class="paramname">mimetype</td><td>The mimetype of the data that will be sent along the stream.</td></tr>
<tr><td class="paramname">name</td><td>The arbitrary name assigned to this pipe. It is up to the implementation of this handler and the application containing the Guacamole client to determine the semantics of a pipe stream having this name.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the opening of the pipe stream has been handled successfully, or non-zero if an error occurs. </dd></dl>
</div>
</div>
<a id="afd4c60871cc2dbbbdc82f58ae1c5baa0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afd4c60871cc2dbbbdc82f58ae1c5baa0">&#9670;&nbsp;</a></span>guac_user_put_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_put_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__object.html">guac_object</a> *object, <a class="el" href="structguac__stream.html">guac_stream</a> *stream, char *mimetype, char *name)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole object put requests. </p>
<p>Put requests implicitly create a stream, the semantics of which are determined by the type of the object and the name of the stream requested.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user requesting write access to the stream having the given name.</td></tr>
<tr><td class="paramname">object</td><td>The object from which the given named stream is being requested.</td></tr>
<tr><td class="paramname">stream</td><td>The stream along which the blobs which should be written to the named stream will be received.</td></tr>
<tr><td class="paramname">mimetype</td><td>The mimetype of the data that will be received along the given stream.</td></tr>
<tr><td class="paramname">name</td><td>The name of the stream being requested.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the put request was successfully handled, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="aca3c0d12202f7888146bb95986011b6f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca3c0d12202f7888146bb95986011b6f">&#9670;&nbsp;</a></span>guac_user_size_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_size_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, int width, int height)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole size events, invoked when a "size" instruction has been received from a user. </p>
<p>A "size" instruction indicates that the desired display size has changed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user whose desired display size has changed.</td></tr>
<tr><td class="paramname">width</td><td>The desired width of the display, in pixels.</td></tr>
<tr><td class="paramname">height</td><td>The desired height of the display, in pixels.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the size event has been successfully handled, non-zero otherwise. </dd></dl>
</div>
</div>
<a id="ab60c51d865526c5c5d2c096e4fcb5539"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab60c51d865526c5c5d2c096e4fcb5539">&#9670;&nbsp;</a></span>guac_user_sync_handler</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_user_sync_handler(<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="timestamp-types_8h.html#a69e916d1ff324fbe0e527f32359c9cea">guac_timestamp</a> timestamp)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Handler for Guacamole sync events. </p>
<p>A sync event is fired by the <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a> whenever a <a class="el" href="structguac__user.html" title="Representation of a physical connection within a larger logical connection which may be shared...">guac_user</a> responds to a "sync" instruction. Sync instructions are sent by the Guacamole server to mark the logical end of a frame, and to inform the Guacamole client that all data up to a particular point in time has been sent. The response from the Guacamole client similarly indicates that all data received up to a particular point in server time has been handled.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user that sent the "sync" instruction.</td></tr>
<tr><td class="paramname">timestamp</td><td>The timestamp contained within the sync instruction.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the sync event has been handled successfully, non-zero otherwise. </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
</body>
</html>