<!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: Globals</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>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

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

<div class="contents">
&#160;

<h3><a id="index_e"></a>- e -</h3><ul>
<li>guac_error
: <a class="el" href="error_8h.html#a44aa5f7b9e896438fcdf16fe7feefd07">error.h</a>
</li>
<li>guac_error_message
: <a class="el" href="error_8h.html#a96ab3903ba0e97c745e8bfb006e123cd">error.h</a>
</li>
</ul>


<h3><a id="index_g"></a>- g -</h3><ul>
<li>GUAC_BUFFER_POOL_INITIAL_SIZE
: <a class="el" href="client-constants_8h.html#aa8a296e1032ff408ab141b0765fb9bfb">client-constants.h</a>
</li>
<li>GUAC_CLIENT_CLOSED_STREAM_INDEX
: <a class="el" href="client-constants_8h.html#a6fda25106c4c454c22db2c7e042ee142">client-constants.h</a>
</li>
<li>GUAC_CLIENT_ID_PREFIX
: <a class="el" href="client-constants_8h.html#a8e2b48136e5c358e012a1558d5e5f0c2">client-constants.h</a>
</li>
<li>GUAC_CLIENT_MAX_STREAMS
: <a class="el" href="client-constants_8h.html#ad9f977643c5ffee5c1eeb426664796a1">client-constants.h</a>
</li>
<li>GUAC_CLIENT_MOUSE_LEFT
: <a class="el" href="client-constants_8h.html#a4bb4f5b852ac8c3e2d3c89cd5e63efd2">client-constants.h</a>
</li>
<li>GUAC_CLIENT_MOUSE_MIDDLE
: <a class="el" href="client-constants_8h.html#ad14c5f1800aac863bbebcd676c5c2124">client-constants.h</a>
</li>
<li>GUAC_CLIENT_MOUSE_RIGHT
: <a class="el" href="client-constants_8h.html#a88917d2d7143a483c219eee62fd6317f">client-constants.h</a>
</li>
<li>GUAC_CLIENT_MOUSE_SCROLL_DOWN
: <a class="el" href="client-constants_8h.html#a771231574e9d303aa08fc1cecc9069f0">client-constants.h</a>
</li>
<li>GUAC_CLIENT_MOUSE_SCROLL_UP
: <a class="el" href="client-constants_8h.html#a134afd8a0d8f10a34af51fc70981e39d">client-constants.h</a>
</li>
<li>GUAC_INSTRUCTION_MAX_DIGITS
: <a class="el" href="parser-constants_8h.html#a408e5069154be109ad3dcf45cbc0b00f">parser-constants.h</a>
</li>
<li>GUAC_INSTRUCTION_MAX_ELEMENTS
: <a class="el" href="parser-constants_8h.html#a6f314dc5700812ca93ff132a15b86a46">parser-constants.h</a>
</li>
<li>GUAC_INSTRUCTION_MAX_LENGTH
: <a class="el" href="parser-constants_8h.html#a6cb4157503008653c5200ea640fe8744">parser-constants.h</a>
</li>
<li>GUAC_PROTOCOL_BLOB_MAX_LENGTH
: <a class="el" href="protocol-constants_8h.html#af5dd5c766aeebead268d0daa6c8c2166">protocol-constants.h</a>
</li>
<li>GUAC_PROTOCOL_LIBRARY_LIMIT
: <a class="el" href="plugin-constants_8h.html#a03c00580f4455d35c1ed33ed4dcfe2fe">plugin-constants.h</a>
</li>
<li>GUAC_PROTOCOL_LIBRARY_PREFIX
: <a class="el" href="plugin-constants_8h.html#ac328a06358d3e07e10999e556f77c05a">plugin-constants.h</a>
</li>
<li>GUAC_PROTOCOL_LIBRARY_SUFFIX
: <a class="el" href="plugin-constants_8h.html#af3601bb5aaa3ca309987f70bd48005fd">plugin-constants.h</a>
</li>
<li>GUAC_PROTOCOL_NAME_LIMIT
: <a class="el" href="plugin-constants_8h.html#a4ce2e3a2b6be66e9ab382fb8d2ab2621">plugin-constants.h</a>
</li>
<li>GUAC_SOCKET_KEEP_ALIVE_INTERVAL
: <a class="el" href="socket-constants_8h.html#aa8820e76e3d3471bdc8771591ebf29f7">socket-constants.h</a>
</li>
<li>GUAC_SOCKET_OUTPUT_BUFFER_SIZE
: <a class="el" href="socket-constants_8h.html#af93053e27466c566624301d7b32a68c3">socket-constants.h</a>
</li>
<li>GUAC_USER_CLOSED_STREAM_INDEX
: <a class="el" href="user-constants_8h.html#a8749ef8d1917591b82b7747edc85d275">user-constants.h</a>
</li>
<li>GUAC_USER_ID_PREFIX
: <a class="el" href="user-constants_8h.html#aa6442383e07f6aa68fbe504037101a87">user-constants.h</a>
</li>
<li>GUAC_USER_MAX_OBJECTS
: <a class="el" href="user-constants_8h.html#afbdfab527f553d531ce690cabd4ae1e7">user-constants.h</a>
</li>
<li>GUAC_USER_MAX_STREAMS
: <a class="el" href="user-constants_8h.html#a9e0884fe25345c84beac1c5a13b1c5ce">user-constants.h</a>
</li>
<li>GUAC_USER_OBJECT_ROOT_NAME
: <a class="el" href="user-constants_8h.html#acb353db4f79b67678376bb521db182e5">user-constants.h</a>
</li>
<li>GUAC_USER_STREAM_INDEX_MIMETYPE
: <a class="el" href="user-constants_8h.html#af3135ba0f5c4cf3099374f612446b490">user-constants.h</a>
</li>
<li>GUAC_USER_UNDEFINED_OBJECT_INDEX
: <a class="el" href="user-constants_8h.html#ae0609bd43bffdfa9ebb8da62f8118c9f">user-constants.h</a>
</li>
<li>GUACAMOLE_PROTOCOL_VERSION
: <a class="el" href="protocol-constants_8h.html#ab1706e67b56808564438ef853a8d2821">protocol-constants.h</a>
</li>
</ul>
</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>
        <!-- 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>
</body>
</html>
