blob: 365a177e7fe810df054add9ad983d432ccc859d9 [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.6"/>
<title>libguac: guacamole/instruction.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/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">libguac
&#160;<span id="projectnumber">0.9.4</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a></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">instruction.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Provides functions and structures for reading, writing, and manipulating Guacamole instructions.
<a href="#details">More...</a></p>
<p><a href="instruction_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__instruction.html">guac_instruction</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a single instruction within the Guacamole protocol. <a href="structguac__instruction.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:a21c622edf59a2e618ac757264214079d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__instruction.html">guac_instruction</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="instruction_8h.html#a21c622edf59a2e618ac757264214079d">guac_instruction_alloc</a> ()</td></tr>
<tr class="memdesc:a21c622edf59a2e618ac757264214079d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates a new instruction. <a href="#a21c622edf59a2e618ac757264214079d">More...</a><br/></td></tr>
<tr class="separator:a21c622edf59a2e618ac757264214079d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a07288c2e275efc475da9f88b039edb41"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="instruction_8h.html#a07288c2e275efc475da9f88b039edb41">guac_instruction_reset</a> (<a class="el" href="structguac__instruction.html">guac_instruction</a> *instruction)</td></tr>
<tr class="memdesc:a07288c2e275efc475da9f88b039edb41"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the parse state and contents of the given instruction, such that the memory of that instruction can be reused for another parse cycle. <a href="#a07288c2e275efc475da9f88b039edb41">More...</a><br/></td></tr>
<tr class="separator:a07288c2e275efc475da9f88b039edb41"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a58604631f804b22b066b250abfc6c739"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="instruction_8h.html#a58604631f804b22b066b250abfc6c739">guac_instruction_append</a> (<a class="el" href="structguac__instruction.html">guac_instruction</a> *instruction, void *buffer, int length)</td></tr>
<tr class="memdesc:a58604631f804b22b066b250abfc6c739"><td class="mdescLeft">&#160;</td><td class="mdescRight">Appends data from the given buffer to the given instruction. <a href="#a58604631f804b22b066b250abfc6c739">More...</a><br/></td></tr>
<tr class="separator:a58604631f804b22b066b250abfc6c739"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa98c61dc8c82ce9af1b69083dd9a1fe1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="instruction_8h.html#aa98c61dc8c82ce9af1b69083dd9a1fe1">guac_instruction_free</a> (<a class="el" href="structguac__instruction.html">guac_instruction</a> *instruction)</td></tr>
<tr class="memdesc:aa98c61dc8c82ce9af1b69083dd9a1fe1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees all memory allocated to the given instruction. <a href="#aa98c61dc8c82ce9af1b69083dd9a1fe1">More...</a><br/></td></tr>
<tr class="separator:aa98c61dc8c82ce9af1b69083dd9a1fe1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4e254615c591eb8f26e32e32a65706c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="instruction_8h.html#ae4e254615c591eb8f26e32e32a65706c">guac_instruction_waiting</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, int usec_timeout)</td></tr>
<tr class="memdesc:ae4e254615c591eb8f26e32e32a65706c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns whether new instruction data is available on the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection for parsing. <a href="#ae4e254615c591eb8f26e32e32a65706c">More...</a><br/></td></tr>
<tr class="separator:ae4e254615c591eb8f26e32e32a65706c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4ec1deb8e06efb7c5b8acc6501039df"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__instruction.html">guac_instruction</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="instruction_8h.html#ad4ec1deb8e06efb7c5b8acc6501039df">guac_instruction_read</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, int usec_timeout)</td></tr>
<tr class="memdesc:ad4ec1deb8e06efb7c5b8acc6501039df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads a single instruction from the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection. <a href="#ad4ec1deb8e06efb7c5b8acc6501039df">More...</a><br/></td></tr>
<tr class="separator:ad4ec1deb8e06efb7c5b8acc6501039df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a241426fa0e6d94d3866b994ca6b4e1ae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__instruction.html">guac_instruction</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="instruction_8h.html#a241426fa0e6d94d3866b994ca6b4e1ae">guac_instruction_expect</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, int usec_timeout, const char *opcode)</td></tr>
<tr class="memdesc:a241426fa0e6d94d3866b994ca6b4e1ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads a single instruction with the given opcode from the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection. <a href="#a241426fa0e6d94d3866b994ca6b4e1ae">More...</a><br/></td></tr>
<tr class="separator:a241426fa0e6d94d3866b994ca6b4e1ae"><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>Provides functions and structures for reading, writing, and manipulating Guacamole instructions. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a21c622edf59a2e618ac757264214079d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__instruction.html">guac_instruction</a>* guac_instruction_alloc </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates a new instruction. </p>
<p>Each instruction contains within itself the necessary facilities to parse instruction data.</p>
<dl class="section return"><dt>Returns</dt><dd>The newly allocated instruction, or NULL if an error occurs during allocation, in which case guac_error will be set appropriately. </dd></dl>
</div>
</div>
<a class="anchor" id="a58604631f804b22b066b250abfc6c739"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_instruction_append </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__instruction.html">guac_instruction</a> *&#160;</td>
<td class="paramname"><em>instruction</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>length</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Appends data from the given buffer to the given instruction. </p>
<p>The data will be appended, if possible, to this instruction as a reference and thus the buffer must remain valid throughout the life of the instruction. This function may modify the contents of the buffer when those contents are part of an element within the instruction being read.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">instruction</td><td>The instruction to append data to. </td></tr>
<tr><td class="paramname">buffer</td><td>A buffer containing data that should be appended to this instruction. </td></tr>
<tr><td class="paramname">length</td><td>The number of bytes available for appending within the buffer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The number of bytes appended to this instruction, which may be zero if more data is needed. </dd></dl>
</div>
</div>
<a class="anchor" id="a241426fa0e6d94d3866b994ca6b4e1ae"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__instruction.html">guac_instruction</a>* guac_instruction_expect </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">int&#160;</td>
<td class="paramname"><em>usec_timeout</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>opcode</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads a single instruction with the given opcode from the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection. </p>
<p>If an error occurs reading the instruction, NULL is returned, and guac_error is set appropriately.</p>
<p>If the instruction read is not the expected instruction, NULL is returned, and guac_error is set to GUAC_STATUS_BAD_STATE.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection to use. </td></tr>
<tr><td class="paramname">usec_timeout</td><td>The maximum number of microseconds to wait before giving up. </td></tr>
<tr><td class="paramname">opcode</td><td>The opcode of the instruction to read. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A new instruction if an instruction with the given opcode was read, NULL otherwise. If an instruction was read, but the instruction had a different opcode, NULL is returned and guac_error is set to GUAC_STATUS_BAD_STATE. </dd></dl>
</div>
</div>
<a class="anchor" id="aa98c61dc8c82ce9af1b69083dd9a1fe1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_instruction_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__instruction.html">guac_instruction</a> *&#160;</td>
<td class="paramname"><em>instruction</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Frees all memory allocated to the given instruction. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">instruction</td><td>The instruction to free. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ad4ec1deb8e06efb7c5b8acc6501039df"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__instruction.html">guac_instruction</a>* guac_instruction_read </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">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>Reads a single instruction from the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection. </p>
<p>If an error occurs reading the instruction, NULL is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection to use. </td></tr>
<tr><td class="paramname">usec_timeout</td><td>The maximum number of microseconds to wait before giving up. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A new instruction if data was successfully read, NULL on error or if the instruction could not be read completely because the timeout elapsed, in which case guac_error will be set to GUAC_STATUS_INPUT_TIMEOUT and subsequent calls to guac_protocol_read_instruction() will return the parsed instruction once enough data is available. </dd></dl>
</div>
</div>
<a class="anchor" id="a07288c2e275efc475da9f88b039edb41"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_instruction_reset </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__instruction.html">guac_instruction</a> *&#160;</td>
<td class="paramname"><em>instruction</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Resets the parse state and contents of the given instruction, such that the memory of that instruction can be reused for another parse cycle. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">instruction</td><td>The instruction to reset. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ae4e254615c591eb8f26e32e32a65706c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_instruction_waiting </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">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>Returns whether new instruction data is available on the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection for parsing. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole. ">guac_socket</a> connection to use. </td></tr>
<tr><td class="paramname">usec_timeout</td><td>The maximum number of microseconds to wait before giving up. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A positive value if data is available, negative on error, or zero if no data is currently available. </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 8 2015 04:04:28 for libguac by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
<!-- Google Analytics -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-75289145-1', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
</body>
</html>