blob: 30c1fc95ebe55a19b9fa4c98831590f3b97a4273 [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.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="#nested-classes">Data Structures</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">user.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Defines 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, which represents a physical connection within a larger, possibly shared, logical connection represented by a <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a>.
<a href="#details">More...</a></p>
<p><a href="user_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="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structguac__user__info.html">guac_user_info</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Information exposed by the remote client during the connection handshake which can be used by a client plugin. <a href="structguac__user__info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structguac__user.html">guac_user</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Representation of a physical connection within a larger logical connection which may be shared. <a href="structguac__user.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a586cd1d712dce0db02d57684ddcb02ef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a586cd1d712dce0db02d57684ddcb02ef">guac_user_alloc</a> ()</td></tr>
<tr class="memdesc:a586cd1d712dce0db02d57684ddcb02ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates a new, blank user, not associated with any specific client or socket. <a href="#a586cd1d712dce0db02d57684ddcb02ef">More...</a><br /></td></tr>
<tr class="separator:a586cd1d712dce0db02d57684ddcb02ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7e0e1220fd00fd769b8e6b731f8c9bf8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a7e0e1220fd00fd769b8e6b731f8c9bf8">guac_user_free</a> (<a class="el" href="structguac__user.html">guac_user</a> *user)</td></tr>
<tr class="memdesc:a7e0e1220fd00fd769b8e6b731f8c9bf8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the given user and all associated resources. <a href="#a7e0e1220fd00fd769b8e6b731f8c9bf8">More...</a><br /></td></tr>
<tr class="separator:a7e0e1220fd00fd769b8e6b731f8c9bf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28f08ab54f138796dea4655ef54526fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a28f08ab54f138796dea4655ef54526fe">guac_user_handle_connection</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, int usec_timeout)</td></tr>
<tr class="memdesc:a28f08ab54f138796dea4655ef54526fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles all I/O for the portion of a user's Guacamole connection following the initial "select" instruction, including the rest of the handshake. <a href="#a28f08ab54f138796dea4655ef54526fe">More...</a><br /></td></tr>
<tr class="separator:a28f08ab54f138796dea4655ef54526fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0303ef487d51b06bb0f007f1a5df0d78"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a0303ef487d51b06bb0f007f1a5df0d78">guac_user_handle_instruction</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, const char *opcode, int argc, char **argv)</td></tr>
<tr class="memdesc:a0303ef487d51b06bb0f007f1a5df0d78"><td class="mdescLeft">&#160;</td><td class="mdescRight">Call the appropriate handler defined by the given user for the given instruction. <a href="#a0303ef487d51b06bb0f007f1a5df0d78">More...</a><br /></td></tr>
<tr class="separator:a0303ef487d51b06bb0f007f1a5df0d78"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35a47c81b581f7aff3eb04c2a6d35b7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__stream.html">guac_stream</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a35a47c81b581f7aff3eb04c2a6d35b7c">guac_user_alloc_stream</a> (<a class="el" href="structguac__user.html">guac_user</a> *user)</td></tr>
<tr class="memdesc:a35a47c81b581f7aff3eb04c2a6d35b7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates a new stream. <a href="#a35a47c81b581f7aff3eb04c2a6d35b7c">More...</a><br /></td></tr>
<tr class="separator:a35a47c81b581f7aff3eb04c2a6d35b7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b3c740837b8e2cae6a232b45ca362f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a3b3c740837b8e2cae6a232b45ca362f4">guac_user_free_stream</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:a3b3c740837b8e2cae6a232b45ca362f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the given stream to the pool of available streams, such that it can be reused by any subsequent call to <a class="el" href="user_8h.html#a35a47c81b581f7aff3eb04c2a6d35b7c" title="Allocates a new stream. ">guac_user_alloc_stream()</a>. <a href="#a3b3c740837b8e2cae6a232b45ca362f4">More...</a><br /></td></tr>
<tr class="separator:a3b3c740837b8e2cae6a232b45ca362f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8216ec7024947564fb4ea6b8b0b07eaf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a8216ec7024947564fb4ea6b8b0b07eaf">guac_user_stop</a> (<a class="el" href="structguac__user.html">guac_user</a> *user)</td></tr>
<tr class="memdesc:a8216ec7024947564fb4ea6b8b0b07eaf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signals the given user that it must disconnect, or advises cooperating services that the given user is no longer connected. <a href="#a8216ec7024947564fb4ea6b8b0b07eaf">More...</a><br /></td></tr>
<tr class="separator:a8216ec7024947564fb4ea6b8b0b07eaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0eff54a869374e37237b2006ad77b958"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a0eff54a869374e37237b2006ad77b958">guac_user_abort</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2">guac_protocol_status</a> status, const char *format,...)</td></tr>
<tr class="memdesc:a0eff54a869374e37237b2006ad77b958"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred. <a href="#a0eff54a869374e37237b2006ad77b958">More...</a><br /></td></tr>
<tr class="separator:a0eff54a869374e37237b2006ad77b958"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8529247b551cb93509236a7f9138dd2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#ad8529247b551cb93509236a7f9138dd2">vguac_user_abort</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2">guac_protocol_status</a> status, const char *format, va_list ap)</td></tr>
<tr class="memdesc:ad8529247b551cb93509236a7f9138dd2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred. <a href="#ad8529247b551cb93509236a7f9138dd2">More...</a><br /></td></tr>
<tr class="separator:ad8529247b551cb93509236a7f9138dd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab19481d0800901190d3d734eae466151"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#ab19481d0800901190d3d734eae466151">guac_user_log</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="client-types_8h.html#adfeeb4ff06541220c91ce3401d840727">guac_client_log_level</a> level, const char *format,...)</td></tr>
<tr class="memdesc:ab19481d0800901190d3d734eae466151"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes a message in the log used by the given user. <a href="#ab19481d0800901190d3d734eae466151">More...</a><br /></td></tr>
<tr class="separator:ab19481d0800901190d3d734eae466151"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af15509bcb891932a3fa93a142018b95c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#af15509bcb891932a3fa93a142018b95c">vguac_user_log</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="client-types_8h.html#adfeeb4ff06541220c91ce3401d840727">guac_client_log_level</a> level, const char *format, va_list ap)</td></tr>
<tr class="memdesc:af15509bcb891932a3fa93a142018b95c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes a message in the log used by the given user. <a href="#af15509bcb891932a3fa93a142018b95c">More...</a><br /></td></tr>
<tr class="separator:af15509bcb891932a3fa93a142018b95c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fa98ba49213d610491248cf085aaf56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__object.html">guac_object</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a6fa98ba49213d610491248cf085aaf56">guac_user_alloc_object</a> (<a class="el" href="structguac__user.html">guac_user</a> *user)</td></tr>
<tr class="memdesc:a6fa98ba49213d610491248cf085aaf56"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates a new object. <a href="#a6fa98ba49213d610491248cf085aaf56">More...</a><br /></td></tr>
<tr class="separator:a6fa98ba49213d610491248cf085aaf56"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf92065fb6bbc92f9794ea50255acdb9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#acf92065fb6bbc92f9794ea50255acdb9">guac_user_free_object</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__object.html">guac_object</a> *object)</td></tr>
<tr class="memdesc:acf92065fb6bbc92f9794ea50255acdb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the given object to the pool of available objects, such that it can be reused by any subsequent call to <a class="el" href="user_8h.html#a6fa98ba49213d610491248cf085aaf56" title="Allocates a new object. ">guac_user_alloc_object()</a>. <a href="#acf92065fb6bbc92f9794ea50255acdb9">More...</a><br /></td></tr>
<tr class="separator:acf92065fb6bbc92f9794ea50255acdb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3f85461f15abfb46fd7c732538b33ea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#aa3f85461f15abfb46fd7c732538b33ea">guac_user_stream_argv</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__socket.html">guac_socket</a> *socket, const char *mimetype, const char *name, const char *value)</td></tr>
<tr class="memdesc:aa3f85461f15abfb46fd7c732538b33ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Streams the given connection parameter value over an argument value stream ("argv" instruction), exposing the current value of the named connection parameter to the given user. <a href="#aa3f85461f15abfb46fd7c732538b33ea">More...</a><br /></td></tr>
<tr class="separator:aa3f85461f15abfb46fd7c732538b33ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35e4c7ba75a16c0b512d543ef4fe9630"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a35e4c7ba75a16c0b512d543ef4fe9630">guac_user_stream_png</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__socket.html">guac_socket</a> *socket, <a class="el" href="protocol-types_8h.html#a93612063886db58071d02b5393abf186">guac_composite_mode</a> mode, const <a class="el" href="structguac__layer.html">guac_layer</a> *layer, int x, int y, cairo_surface_t *surface)</td></tr>
<tr class="memdesc:a35e4c7ba75a16c0b512d543ef4fe9630"><td class="mdescLeft">&#160;</td><td class="mdescRight">Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded data. <a href="#a35e4c7ba75a16c0b512d543ef4fe9630">More...</a><br /></td></tr>
<tr class="separator:a35e4c7ba75a16c0b512d543ef4fe9630"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e947ee6996d5711f18d5b785757ccb3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a6e947ee6996d5711f18d5b785757ccb3">guac_user_stream_jpeg</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__socket.html">guac_socket</a> *socket, <a class="el" href="protocol-types_8h.html#a93612063886db58071d02b5393abf186">guac_composite_mode</a> mode, const <a class="el" href="structguac__layer.html">guac_layer</a> *layer, int x, int y, cairo_surface_t *surface, int quality)</td></tr>
<tr class="memdesc:a6e947ee6996d5711f18d5b785757ccb3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded data at the given quality. <a href="#a6e947ee6996d5711f18d5b785757ccb3">More...</a><br /></td></tr>
<tr class="separator:a6e947ee6996d5711f18d5b785757ccb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af00042d94cb64fb8ac92cd84aff05bf8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#af00042d94cb64fb8ac92cd84aff05bf8">guac_user_stream_webp</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, <a class="el" href="structguac__socket.html">guac_socket</a> *socket, <a class="el" href="protocol-types_8h.html#a93612063886db58071d02b5393abf186">guac_composite_mode</a> mode, const <a class="el" href="structguac__layer.html">guac_layer</a> *layer, int x, int y, cairo_surface_t *surface, int quality, int lossless)</td></tr>
<tr class="memdesc:af00042d94cb64fb8ac92cd84aff05bf8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded data at the given quality. <a href="#af00042d94cb64fb8ac92cd84aff05bf8">More...</a><br /></td></tr>
<tr class="separator:af00042d94cb64fb8ac92cd84aff05bf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26d186ee6b669c78278124ece46cc8f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a26d186ee6b669c78278124ece46cc8f7">guac_user_supports_webp</a> (<a class="el" href="structguac__user.html">guac_user</a> *user)</td></tr>
<tr class="memdesc:a26d186ee6b669c78278124ece46cc8f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns whether the given user supports WebP. <a href="#a26d186ee6b669c78278124ece46cc8f7">More...</a><br /></td></tr>
<tr class="separator:a26d186ee6b669c78278124ece46cc8f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7530b31b5a621a4f68fdce4bee2bdc5f"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a7530b31b5a621a4f68fdce4bee2bdc5f">guac_user_parse_args_string</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, const char **arg_names, const char **argv, int index, const char *default_value)</td></tr>
<tr class="memdesc:a7530b31b5a621a4f68fdce4bee2bdc5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Automatically handles a single argument received from a joining user, returning a newly-allocated string containing that value. <a href="#a7530b31b5a621a4f68fdce4bee2bdc5f">More...</a><br /></td></tr>
<tr class="separator:a7530b31b5a621a4f68fdce4bee2bdc5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08f6fd4d84de665487a45fb324dc8844"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a08f6fd4d84de665487a45fb324dc8844">guac_user_parse_args_int</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, const char **arg_names, const char **argv, int index, int default_value)</td></tr>
<tr class="memdesc:a08f6fd4d84de665487a45fb324dc8844"><td class="mdescLeft">&#160;</td><td class="mdescRight">Automatically handles a single integer argument received from a joining user, returning the integer value of that argument. <a href="#a08f6fd4d84de665487a45fb324dc8844">More...</a><br /></td></tr>
<tr class="separator:a08f6fd4d84de665487a45fb324dc8844"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f0bae838d82357e95e98769f7b98cd2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="user_8h.html#a5f0bae838d82357e95e98769f7b98cd2">guac_user_parse_args_boolean</a> (<a class="el" href="structguac__user.html">guac_user</a> *user, const char **arg_names, const char **argv, int index, int default_value)</td></tr>
<tr class="memdesc:a5f0bae838d82357e95e98769f7b98cd2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Automatically handles a single boolean argument received from a joining user, returning the value of that argument (either 1 for true or 0 for false). <a href="#a5f0bae838d82357e95e98769f7b98cd2">More...</a><br /></td></tr>
<tr class="separator:a5f0bae838d82357e95e98769f7b98cd2"><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>Defines 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, which represents a physical connection within a larger, possibly shared, logical connection represented by a <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a>. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a0eff54a869374e37237b2006ad77b958"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0eff54a869374e37237b2006ad77b958">&#9670;&nbsp;</a></span>guac_user_abort()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_abort </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2">guac_protocol_status</a>&#160;</td>
<td class="paramname"><em>status</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>format</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred. </p>
<p>Note that this is a completely cooperative signal, and can be ignored by the user or the hosting daemon. The message given will be logged to the system logs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user to signal to stop. </td></tr>
<tr><td class="paramname">status</td><td>The status to send over the Guacamole protocol. </td></tr>
<tr><td class="paramname">format</td><td>A printf-style format string to log. </td></tr>
<tr><td class="paramname">...</td><td>Arguments to use when filling the format string for printing. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a586cd1d712dce0db02d57684ddcb02ef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a586cd1d712dce0db02d57684ddcb02ef">&#9670;&nbsp;</a></span>guac_user_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__user.html">guac_user</a>* guac_user_alloc </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates a new, blank user, not associated with any specific client or socket. </p>
<dl class="section return"><dt>Returns</dt><dd>The newly allocated <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>, or NULL if allocation failed. </dd></dl>
</div>
</div>
<a id="a6fa98ba49213d610491248cf085aaf56"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fa98ba49213d610491248cf085aaf56">&#9670;&nbsp;</a></span>guac_user_alloc_object()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__object.html">guac_object</a>* guac_user_alloc_object </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates a new object. </p>
<p>An arbitrary index is automatically assigned if no previously-allocated object is available for use.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user to allocate the object for.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The next available object, or a newly allocated object. </dd></dl>
</div>
</div>
<a id="a35a47c81b581f7aff3eb04c2a6d35b7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a35a47c81b581f7aff3eb04c2a6d35b7c">&#9670;&nbsp;</a></span>guac_user_alloc_stream()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__stream.html">guac_stream</a>* guac_user_alloc_stream </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates a new stream. </p>
<p>An arbitrary index is automatically assigned if no previously-allocated stream is available for use.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user to allocate the stream for.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The next available stream, or a newly allocated stream, or NULL if the maximum number of active streams has been reached. </dd></dl>
</div>
</div>
<a id="a7e0e1220fd00fd769b8e6b731f8c9bf8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e0e1220fd00fd769b8e6b731f8c9bf8">&#9670;&nbsp;</a></span>guac_user_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Frees the given user and all associated resources. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>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> to free. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="acf92065fb6bbc92f9794ea50255acdb9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf92065fb6bbc92f9794ea50255acdb9">&#9670;&nbsp;</a></span>guac_user_free_object()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_free_object </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structguac__object.html">guac_object</a> *&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the given object to the pool of available objects, such that it can be reused by any subsequent call to <a class="el" href="user_8h.html#a6fa98ba49213d610491248cf085aaf56" title="Allocates a new object. ">guac_user_alloc_object()</a>. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user to return the object to.</td></tr>
<tr><td class="paramname">object</td><td>The object to return to the pool of available object. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3b3c740837b8e2cae6a232b45ca362f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3b3c740837b8e2cae6a232b45ca362f4">&#9670;&nbsp;</a></span>guac_user_free_stream()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_free_stream </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structguac__stream.html">guac_stream</a> *&#160;</td>
<td class="paramname"><em>stream</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the given stream to the pool of available streams, such that it can be reused by any subsequent call to <a class="el" href="user_8h.html#a35a47c81b581f7aff3eb04c2a6d35b7c" title="Allocates a new stream. ">guac_user_alloc_stream()</a>. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user to return the stream to. </td></tr>
<tr><td class="paramname">stream</td><td>The stream to return to the pool of available stream. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a28f08ab54f138796dea4655ef54526fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a28f08ab54f138796dea4655ef54526fe">&#9670;&nbsp;</a></span>guac_user_handle_connection()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_user_handle_connection </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>usec_timeout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Handles all I/O for the portion of a user's Guacamole connection following the initial "select" instruction, including the rest of the handshake. </p>
<p>The handshake-related properties of the given <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> are automatically populated, and <a class="el" href="user_8h.html#a0303ef487d51b06bb0f007f1a5df0d78" title="Call the appropriate handler defined by the given user for the given instruction. ...">guac_user_handle_instruction()</a> is invoked for all instructions received after the handshake has completed. This function blocks until the connection/user is aborted or the user disconnects.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user whose handshake and entire Guacamole protocol exchange should be handled. The user must already be associated with a <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> and <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a>, and the <a class="el" href="structguac__client.html" title="Guacamole proxy client. ">guac_client</a> must already be fully initialized.</td></tr>
<tr><td class="paramname">usec_timeout</td><td>The number of microseconds to wait for instructions from the given user before closing the connection with an error.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero if the user's Guacamole connection was successfully handled and the user has disconnected, or non-zero if an error prevented the user's connection from being handled properly. </dd></dl>
</div>
</div>
<a id="a0303ef487d51b06bb0f007f1a5df0d78"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0303ef487d51b06bb0f007f1a5df0d78">&#9670;&nbsp;</a></span>guac_user_handle_instruction()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_user_handle_instruction </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>opcode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>argc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char **&#160;</td>
<td class="paramname"><em>argv</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Call the appropriate handler defined by the given user for the given instruction. </p>
<p>A comparison is made between the instruction opcode and the initial handler lookup table defined in user-handlers.c. The initial handlers will in turn call the user's handler (if defined).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user whose handlers should be called.</td></tr>
<tr><td class="paramname">opcode</td><td>The opcode of the instruction to pass to the user via the appropriate handler.</td></tr>
<tr><td class="paramname">argc</td><td>The number of arguments which are part of the instruction.</td></tr>
<tr><td class="paramname">argv</td><td>An array of all arguments which are part of the instruction.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Non-negative if the instruction was handled successfully, or negative if an error occurred. </dd></dl>
</div>
</div>
<a id="ab19481d0800901190d3d734eae466151"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab19481d0800901190d3d734eae466151">&#9670;&nbsp;</a></span>guac_user_log()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_log </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="client-types_8h.html#adfeeb4ff06541220c91ce3401d840727">guac_client_log_level</a>&#160;</td>
<td class="paramname"><em>level</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>format</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes a message in the log used by the given user. </p>
<p>The logger used will normally be defined by guacd (or whichever program loads the user) by setting the logging handlers of the user when it is loaded.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user logging this message. </td></tr>
<tr><td class="paramname">level</td><td>The level at which to log this message. </td></tr>
<tr><td class="paramname">format</td><td>A printf-style format string to log. </td></tr>
<tr><td class="paramname">...</td><td>Arguments to use when filling the format string for printing. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5f0bae838d82357e95e98769f7b98cd2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f0bae838d82357e95e98769f7b98cd2">&#9670;&nbsp;</a></span>guac_user_parse_args_boolean()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_user_parse_args_boolean </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>arg_names</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>argv</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>default_value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Automatically handles a single boolean argument received from a joining user, returning the value of that argument (either 1 for true or 0 for false). </p>
<p>Only "true" and "false" are legitimate values for a boolean argument. If the argument provided by the user is blank or invalid, the default value is returned.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user joining the connection and providing the given arguments.</td></tr>
<tr><td class="paramname">arg_names</td><td>A NULL-terminated array of argument names, corresponding to the provided array of argument values. This array must be exactly the same size as the argument value array, with one additional entry for the NULL terminator.</td></tr>
<tr><td class="paramname">argv</td><td>An array of all argument values, corresponding to the provided array of argument names. This array must be exactly the same size as the argument name array, with the exception of the NULL terminator.</td></tr>
<tr><td class="paramname">index</td><td>The index of the entry in both the arg_names and argv arrays which corresponds to the argument being parsed.</td></tr>
<tr><td class="paramname">default_value</td><td>The value to return if the provided argument is blank or invalid.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true (1) if the provided argument value is "true", false (0) if the provided argument value is "false", or the default value if the provided argument value is blank or invalid. </dd></dl>
</div>
</div>
<a id="a08f6fd4d84de665487a45fb324dc8844"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08f6fd4d84de665487a45fb324dc8844">&#9670;&nbsp;</a></span>guac_user_parse_args_int()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_user_parse_args_int </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>arg_names</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>argv</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>default_value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Automatically handles a single integer argument received from a joining user, returning the integer value of that argument. </p>
<p>If the argument provided by the user is blank or invalid, the default value is returned.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user joining the connection and providing the given arguments.</td></tr>
<tr><td class="paramname">arg_names</td><td>A NULL-terminated array of argument names, corresponding to the provided array of argument values. This array must be exactly the same size as the argument value array, with one additional entry for the NULL terminator.</td></tr>
<tr><td class="paramname">argv</td><td>An array of all argument values, corresponding to the provided array of argument names. This array must be exactly the same size as the argument name array, with the exception of the NULL terminator.</td></tr>
<tr><td class="paramname">index</td><td>The index of the entry in both the arg_names and argv arrays which corresponds to the argument being parsed.</td></tr>
<tr><td class="paramname">default_value</td><td>The value to return if the provided argument is blank or invalid.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The integer value parsed from the provided argument value, or the default value if the provided argument value is blank or invalid. </dd></dl>
</div>
</div>
<a id="a7530b31b5a621a4f68fdce4bee2bdc5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7530b31b5a621a4f68fdce4bee2bdc5f">&#9670;&nbsp;</a></span>guac_user_parse_args_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* guac_user_parse_args_string </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>arg_names</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>argv</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>default_value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Automatically handles a single argument received from a joining user, returning a newly-allocated string containing that value. </p>
<p>If the argument provided by the user is blank, a newly-allocated string containing the default value is returned.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user joining the connection and providing the given arguments.</td></tr>
<tr><td class="paramname">arg_names</td><td>A NULL-terminated array of argument names, corresponding to the provided array of argument values. This array must be exactly the same size as the argument value array, with one additional entry for the NULL terminator.</td></tr>
<tr><td class="paramname">argv</td><td>An array of all argument values, corresponding to the provided array of argument names. This array must be exactly the same size as the argument name array, with the exception of the NULL terminator.</td></tr>
<tr><td class="paramname">index</td><td>The index of the entry in both the arg_names and argv arrays which corresponds to the argument being parsed.</td></tr>
<tr><td class="paramname">default_value</td><td>The value to return if the provided argument is blank. If this value is not NULL, the returned value will be a newly-allocated string containing this value.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly-allocated string containing the provided argument value. If the provided argument value is blank, this newly-allocated string will contain the default value. If the default value is NULL and the provided argument value is blank, no string will be allocated and NULL is returned. </dd></dl>
</div>
</div>
<a id="a8216ec7024947564fb4ea6b8b0b07eaf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8216ec7024947564fb4ea6b8b0b07eaf">&#9670;&nbsp;</a></span>guac_user_stop()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_stop </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Signals the given user that it must disconnect, or advises cooperating services that the given user is no longer connected. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user to stop. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aa3f85461f15abfb46fd7c732538b33ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3f85461f15abfb46fd7c732538b33ea">&#9670;&nbsp;</a></span>guac_user_stream_argv()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_stream_argv </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>mimetype</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Streams the given connection parameter value over an argument value stream ("argv" instruction), exposing the current value of the named connection parameter to the given user. </p>
<p>The argument value stream will be automatically allocated and freed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The Guacamole user who should receive the connection parameter value.</td></tr>
<tr><td class="paramname">socket</td><td>The socket over which instructions associated with the argument value stream should be sent.</td></tr>
<tr><td class="paramname">mimetype</td><td>The mimetype of the data within the connection parameter value being sent.</td></tr>
<tr><td class="paramname">name</td><td>The name of the connection parameter being sent.</td></tr>
<tr><td class="paramname">value</td><td>The current value of the connection parameter being sent. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a6e947ee6996d5711f18d5b785757ccb3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e947ee6996d5711f18d5b785757ccb3">&#9670;&nbsp;</a></span>guac_user_stream_jpeg()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_stream_jpeg </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="protocol-types_8h.html#a93612063886db58071d02b5393abf186">guac_composite_mode</a>&#160;</td>
<td class="paramname"><em>mode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structguac__layer.html">guac_layer</a> *&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">cairo_surface_t *&#160;</td>
<td class="paramname"><em>surface</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>quality</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded data at the given quality. </p>
<p>The image stream will be automatically allocated and freed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The Guacamole user for whom the image stream should be allocated.</td></tr>
<tr><td class="paramname">socket</td><td>The socket over which instructions associated with the image stream should be sent.</td></tr>
<tr><td class="paramname">mode</td><td>The composite mode to use when rendering the image over the given layer.</td></tr>
<tr><td class="paramname">layer</td><td>The destination layer.</td></tr>
<tr><td class="paramname">x</td><td>The X coordinate of the upper-left corner of the destination rectangle within the given layer.</td></tr>
<tr><td class="paramname">y</td><td>The Y coordinate of the upper-left corner of the destination rectangle within the given layer.</td></tr>
<tr><td class="paramname">surface</td><td>A Cairo surface containing the image data to be streamed.</td></tr>
<tr><td class="paramname">quality</td><td>The JPEG image quality, which must be an integer value between 0 and 100 inclusive. Larger values indicate improving quality at the expense of larger file size. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a35e4c7ba75a16c0b512d543ef4fe9630"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a35e4c7ba75a16c0b512d543ef4fe9630">&#9670;&nbsp;</a></span>guac_user_stream_png()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_stream_png </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="protocol-types_8h.html#a93612063886db58071d02b5393abf186">guac_composite_mode</a>&#160;</td>
<td class="paramname"><em>mode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structguac__layer.html">guac_layer</a> *&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">cairo_surface_t *&#160;</td>
<td class="paramname"><em>surface</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded data. </p>
<p>The image stream will be automatically allocated and freed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The Guacamole user for whom the image stream should be allocated.</td></tr>
<tr><td class="paramname">socket</td><td>The socket over which instructions associated with the image stream should be sent.</td></tr>
<tr><td class="paramname">mode</td><td>The composite mode to use when rendering the image over the given layer.</td></tr>
<tr><td class="paramname">layer</td><td>The destination layer.</td></tr>
<tr><td class="paramname">x</td><td>The X coordinate of the upper-left corner of the destination rectangle within the given layer.</td></tr>
<tr><td class="paramname">y</td><td>The Y coordinate of the upper-left corner of the destination rectangle within the given layer.</td></tr>
<tr><td class="paramname">surface</td><td>A Cairo surface containing the image data to be streamed. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af00042d94cb64fb8ac92cd84aff05bf8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af00042d94cb64fb8ac92cd84aff05bf8">&#9670;&nbsp;</a></span>guac_user_stream_webp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_user_stream_webp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="protocol-types_8h.html#a93612063886db58071d02b5393abf186">guac_composite_mode</a>&#160;</td>
<td class="paramname"><em>mode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structguac__layer.html">guac_layer</a> *&#160;</td>
<td class="paramname"><em>layer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">cairo_surface_t *&#160;</td>
<td class="paramname"><em>surface</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>quality</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>lossless</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded data at the given quality. </p>
<p>The image stream will be automatically allocated and freed. If the server does not support WebP, this function has no effect, so be sure to check the result of <a class="el" href="user_8h.html#a26d186ee6b669c78278124ece46cc8f7" title="Returns whether the given user supports WebP. ">guac_user_supports_webp()</a> or <a class="el" href="client_8h.html#a79cc74558e8f64807ea2847fbacd20e3" title="Returns whether all users of the given client support WebP. ">guac_client_supports_webp()</a> prior to calling this function.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The Guacamole user for whom the image stream should be allocated.</td></tr>
<tr><td class="paramname">socket</td><td>The socket over which instructions associated with the image stream should be sent.</td></tr>
<tr><td class="paramname">mode</td><td>The composite mode to use when rendering the image over the given layer.</td></tr>
<tr><td class="paramname">layer</td><td>The destination layer.</td></tr>
<tr><td class="paramname">x</td><td>The X coordinate of the upper-left corner of the destination rectangle within the given layer.</td></tr>
<tr><td class="paramname">y</td><td>The Y coordinate of the upper-left corner of the destination rectangle within the given layer.</td></tr>
<tr><td class="paramname">surface</td><td>A Cairo surface containing the image data to be streamed.</td></tr>
<tr><td class="paramname">quality</td><td>The WebP image quality, which must be an integer value between 0 and 100 inclusive. For lossy images, larger values indicate improving quality at the expense of larger file size. For lossless images, this dictates the quality of compression, with larger values producing smaller files at the expense of speed.</td></tr>
<tr><td class="paramname">lossless</td><td>Zero to encode a lossy image, non-zero to encode losslessly. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a26d186ee6b669c78278124ece46cc8f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a26d186ee6b669c78278124ece46cc8f7">&#9670;&nbsp;</a></span>guac_user_supports_webp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_user_supports_webp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns whether the given user supports WebP. </p>
<p>If the user does not support WebP, or the server cannot encode WebP images, zero is returned.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The Guacamole user to check for WebP support.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Non-zero if the given user claims to support WebP and the server has been built with WebP support, zero otherwise. </dd></dl>
</div>
</div>
<a id="ad8529247b551cb93509236a7f9138dd2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8529247b551cb93509236a7f9138dd2">&#9670;&nbsp;</a></span>vguac_user_abort()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vguac_user_abort </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2">guac_protocol_status</a>&#160;</td>
<td class="paramname"><em>status</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>format</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">va_list&#160;</td>
<td class="paramname"><em>ap</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred. </p>
<p>Note that this is a completely cooperative signal, and can be ignored by the user or the hosting daemon. The message given will be logged to the system logs.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user to signal to stop. </td></tr>
<tr><td class="paramname">status</td><td>The status to send over the Guacamole protocol. </td></tr>
<tr><td class="paramname">format</td><td>A printf-style format string to log. </td></tr>
<tr><td class="paramname">ap</td><td>The va_list containing the arguments to be used when filling the format string for printing. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af15509bcb891932a3fa93a142018b95c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af15509bcb891932a3fa93a142018b95c">&#9670;&nbsp;</a></span>vguac_user_log()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vguac_user_log </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__user.html">guac_user</a> *&#160;</td>
<td class="paramname"><em>user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="client-types_8h.html#adfeeb4ff06541220c91ce3401d840727">guac_client_log_level</a>&#160;</td>
<td class="paramname"><em>level</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>format</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">va_list&#160;</td>
<td class="paramname"><em>ap</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes a message in the log used by the given user. </p>
<p>The logger used will normally be defined by guacd (or whichever program loads the user) by setting the logging handlers of the user when it is loaded.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">user</td><td>The user logging this message. </td></tr>
<tr><td class="paramname">level</td><td>The level at which to log this message. </td></tr>
<tr><td class="paramname">format</td><td>A printf-style format string to log. </td></tr>
<tr><td class="paramname">ap</td><td>The va_list containing the arguments to be used when filling the format string for printing. </td></tr>
</table>
</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>